rajdeeep2k17
2/3/2018 - 2:23 PM

SexyDate Test to commit

All Test Cases are listed here

require('dotenv').config()
const { exists } = require('../jest/utils')
const faker = require('faker');

describe("Theme 1 Testing", async() => {
  const fakeEmail = faker.internet.email();
  const itomail = faker.name.firstName() + '@itobuz.com';
  const first_name = faker.name.firstName() + 'abc';
  const pass = faker.internet.password()
  const message = faker.lorem.sentence();

  test("Setup", async() => {
    await page.setRequestInterception(true)
    page.on('request', (request) => {
        (['image','font'].indexOf(request.resourceType()) !== -1 ) ? request.abort() : request.continue()   
    })
  })
  
  describe("Registration - Incorrect Email ID", async() => {
    it("Submit form with incorrect email", async() => {
      await page.goto(baseUrl, {waitUntil: "networkidle0"})
      await page.type('form input', 'testing123@test.co.in')
      await page.click('#register-form form button')
      await page.waitForSelector('app-register-step-one p-autocomplete + div.msg.msg--error')
    })
  })

  describe("Registration - No Email ID", async() => {
    it("Submit form with blank email", async() => {
      await page.goto(baseUrl, {waitUntil: "networkidle0"})
      await page.click('#register-form form button')
      await page.waitForSelector('app-register-step-one p-autocomplete + div.msg--error')
    })
  })

  describe("Registration - Email Domain Autocomplete", async() => {
    it("Type into registration Input", async() => {
      await page.goto(baseUrl, {waitUntil: "networkidle0"})
      await page.type('form input', 'rajdeep@o')
      await page.waitForSelector('form > div > div:nth-child(2) > div > p-autocomplete > span > div > ul')
    })
  })
  
  describe("testing registration process step by step", async() => {
    it("first step", async() => {
      await page.goto(baseUrl, {waitUntil: "networkidle2"})
      await page.type('input[type="email"]', itomail)
      await page.selectRandom('div.register select')
      await page.click('form button')
      await page.waitForSelector('div.custom-modal.register')
    })
    it("second step", async() => {
      await page.type('input[formControlName="nick_name"]', first_name)
      await page.type('input[formControlName="name"]', first_name)
      await page.type('input[formControlName="password"]', pass)
      await page.selectRandom('div.custom-modal.register select')
      await page.click('.btn-green')
      await page.waitForSelector('div.register-step-three-container')
    })
    it("third step", async() => {
      let selectBoxesSelectors = [
        'div.register-step-three-container select[formcontrolname="country_id"]',
        'div.register-step-three-container select[formcontrolname="province_id"]',
        'div.register-step-three-container select[formcontrolname="height"]',
        'div.register-step-three-container select[formcontrolname="weight"]',
        'div.register-step-three-container select[formcontrolname="body_type_id"]',
        'div.register-step-three-container select[formcontrolname="hair_color_id"]',
        'div.register-step-three-container select[formcontrolname="eye_color_id"]'
      ]
      await page.selectRandom(selectBoxesSelectors, { multiple: true })
      await page.type('div.register-step-three-container textarea[formcontrolname="description"]', message)
      await page.click('.btn-green')
      await page.waitForSelector('div.register .img-wrapper img')
    })

    it("Check that it has the correct email", async() => {
      let email1 = await page.$eval('div.register div.email-confirmation span.bold-text', e => e.innerText)
      let email2 = await page.$eval('div.register input[formcontrolname="email"]', e => e.value ) 
      expect(email1).toBe(email2)
      expect(email1).toBe(itomail)
    })

    it("Checks for email sent", async () => {
      // Check with gmail IMAP to read if we got an email, check SPAM as well as INBOX
    })
    
    it("Resends email", async () => {
      await page.click('div.register button.resend-email')
      page.waitForSelector('div.register div.msg--success')
    })

    it("Verify Mail Open button", async () => {
      // Click on button with selector - , and check session storage url, and if a mailbox exists
      // new tab, should be open and should be on the same domain
    })

    it("Checks for Resends email", async () => {
      // Check with gmail IMAP to read if we got an email, check SPAM as well as INBOX
    })  
  })



  describe("Login Cases", async() => {
    describe("Login Error checks", async() => {
      it("unregistered user login", async() => {
        await page.goto(baseUrl, {waitUntil: "networkidle0"})
        await page.click(".login-btn")
        await page.waitForSelector('.login-details > form')
        await page.type('input[formcontrolname="email_or_nick"]', itomail)
        await page.type('input[formcontrolname="password"]', pass)
        await page.click('button[type="submit"]')
        await page.waitForSelector('form button[type="submit"]+div.msg--error')
      })
  
      it("login without any user credentials", async() => {
        await page.reload({waitUntil: "networkidle0"})
        await page.click('button[type="submit"]')
        await page.waitForSelector('input[formcontrolname="email_or_nick"]+div.msg--error')
        await page.waitForSelector('input[formcontrolname="password"]+div.msg--error')
      })
  
      it("wrong credential user login", async() => {
        await page.reload({waitUntil: "networkidle0"})
        await page.type('input[formcontrolname="email_or_nick"]', fakeEmail)
        await page.type('input[formcontrolname="password"]', pass)
        await page.click('button[type="submit"]')
        await page.waitForSelector('form button[type="submit"]+div.msg--error')
      })
  
      it("entering only email displays 'enter password'", async() => {
        await page.reload({waitUntil: "networkidle0"})
        await page.type('input[formcontrolname="email_or_nick"]', fakeEmail)
        await page.click('button[type="submit"]')
        await page.waitForSelector('input[formcontrolname="password"]+div.msg--error')
      })
  
      it("focusing in and out of the email field", async() => {
        await page.reload({waitUntil: "networkidle0"})
        await page.waitForSelector('app-login div > form')
        await page.type('input[formcontrolname="email_or_nick"]', '')
        await page.click('div.container .search-result-header h3')
        await page.waitForSelector('input[formcontrolname="email_or_nick"]+div.msg--error')
      })
  
      it("focusing in and out of the password field", async() => {
          await page.reload({waitUntil: "networkidle0"})
          await page.type('input[formcontrolname="password"]', '')
          await page.click('div.container .search-result-header h3')
          await page.waitForSelector('input[formcontrolname="password"]+div.msg--error')
      })
    })

    describe("Successful Login Cases", async() => {
      it("First time registered-user login", async() => {
        await page.reload({waitUntil: "networkidle0"})
        await page.type('input[formcontrolname="email_or_nick"]', process.env.LOGEMAIL)
        await page.type('input[formcontrolname="password"]', process.env.PASSWORD)
        await page.click('button[type="submit"]')
        await page.waitForSelector('div.popup-wrapper')
      })

      describe("User with completed profile(basic and elite) login", async() => {
        it("Loggin out", async() => {
          await page.click('.btn-green-complement')
          await page.click('.login-btn')
        })
          
        it("Existing/Basic user login and waits till loading of basic text, sad smiley and become elite button", async() => {
          await page.goto(`${baseUrl}/iniciar-sesion`, {waitUntil: "networkidle0"})
          await page.type('input[formcontrolname="email_or_nick"]', process.env.COMPMAIL)
          await page.type('input[formcontrolname="password"]', process.env.PASSWORD)
          await page.click('button[type="submit"]')
          await page.waitForSelector('app-member.swiper-slide.swiper-slide-active > div.profile-pic-wrapper > div.profile-pic')
          var basicText =  await page.$eval('div.login-wrapper.logged-in span', e => e.innerText)
          expect('BASIC SUBSCRIPTION').toEqual(basicText)
          await page.waitForSelector('div.login-wrapper.logged-in .fa-frown-o')
          await page.waitForSelector('div.desktop-nav button')
          var logoutText = await page.$eval('div.container > div.login-wrapper.logged-in > button', e => e.innerText)
          expect('Log out  ').toEqual(logoutText)
        })
        it("Existing/Elite user login and loading elite text, happy smiley and welcome message", async() => {
          await page.click('div.login-wrapper.logged-in > button')
          await page.waitForSelector('input[formcontrolname="email_or_nick"]')
          await page.type('input[formcontrolname="email_or_nick"]', process.env.ELITUSER)
          await page.type('input[formcontrolname="password"]', process.env.PASSWORD)
          await page.click('button[type="submit"]')
          await page.waitForSelector('.login-wrapper.logged-in > div > h5 > span')
          var eliteText =  await page.$eval('div.login-wrapper.logged-in span', e => e.innerText)
          expect(' SUBSCRIPTION ELITE').toEqual(eliteText)
          await page.waitForSelector('div.login-wrapper.logged-in .fa-smile-o')
          await page.waitForSelector('div.page-content-container > div.col-md-7 > p:nth-child(2)')
          var logoutText = await page.$eval('div.container > div.login-wrapper.logged-in > button', e => e.innerText)
          expect('Log out  ').toEqual(logoutText)
        })
      })
    })
  })
  
  describe("Login Page - Forgot Password", async() => {
    it("forget password", async() => {
      await page.goto(baseUrl, {waitUntil: "networkidle0"})
      await page.click(".login-btn")
      await page.waitForSelector('div.login-details a')
      await page.click('div.login-details a')
      await page.waitForSelector('div.login-wrap')
      await page.type('input[formControlName="email"]', process.env.LOGEMAIL)
      await page.click('div.button-wrap .login')
      await page.waitForSelector('div.msg--success')
    })
    it("Validation for submitting without entering email", async() => {
      await page.goto(`${baseUrl}iniciar-sesion`, {waitUntil: "networkidle0"})
      await page.click('app-login form > div > a')
      await page.waitForSelector('ngb-modal-window form button')
      await page.click('ngb-modal-window form button')
      await page.waitForSelector('ngb-modal-window form > div.msg.msg--error')
    })
    it("Validation for submitting with an invalid email", async() => {
      await page.waitForSelector('ngb-modal-window form > input')
      await page.type('ngb-modal-window form > input', 'rajib@xyzs.co.qwerty')
      await page.click('ngb-modal-window form button')
      await page.waitForSelector('ngb-modal-window form > div.msg.msg--error')
    })
    it("Clicking X closes modal", async() => {
      await page.click('ngb-modal-window div.heading-wrap > button')
      try {
        await page.waitForSelector('ngb-modal-window', {timeout: 5000})
      }
      catch(err) {
        console.log('Modal Not Found Hence Test Passed')
      }
    })
  })
	
    describe("Quick search", async () => {
      it ("login", async() => {
        await page.goto(baseUrl, { waitUntil: "networkidle0" })
        await page.click(".login-btn")
        await page.type('input[formcontrolname="email_or_nick"]', process.env.USERNAME)
        await page.type('input[formcontrolname="password"]', process.env.PASSWORD)
        await page.click('button[type="submit"]')
        await page.waitForSelector('div.content-container .quick-search')
      })

      describe("random search", async() => {
        it("quick search", async() => {
          let selectBoxesSelectors = [
            'div.quick-search.row select[formcontrolname="sex"]',
            'div.quick-search.row select[formcontrolname="seeking"]',
            'div.quick-search.row select[formcontrolname="age"]',
            'div.quick-search.row select[formcontrolname="province_id"]',
          ]
          await page.selectRandom(selectBoxesSelectors, { multiple: true })
          await page.click('div.form-group .search-btn')
          await page.waitForSelector('div.member-list-wrapper')
        })
        it("search with only profile pics", async() => {
          const placeHolderImagesLength = await page.$$eval('div.member-list-wrapper app-member-list div.member-image-wrapper > div.member-image', (el, domain) => Array.from(el).map(e => e.style.backgroundImage).filter( e => e.indexOf(domain) > -1).length, api.split('.')[1] )
          expect(placeHolderImagesLength).toBe(0)
        })
      })
      
      describe("search which has results", async() => {
        var lookingVal
        var ageVal
        var provinceVal
        it("start search", async () => {
          await page.click('.page-content-header .btn-black')
          await page.waitForSelector('div.quick-search select')
          lookingVal = await page.$eval('app-quick-search div.quick-search.row > div:nth-child(2) select > option:nth-child(3)', e => e.value)
          await page.select('app-quick-search div.quick-search.row > div:nth-child(2) select', lookingVal)
          ageVal = await page.$eval('app-quick-search div.quick-search.row > div:nth-child(3) select > option:nth-child(5)', e => e.value.split('-'))
          const ageForSelect = await page.$eval('app-quick-search div.quick-search.row > div:nth-child(3) select > option:nth-child(5)', e => e.value)
          await page.select('app-quick-search div.quick-search.row > div:nth-child(3) select', ageForSelect)
          provinceVal = await page.$eval('app-quick-search div.quick-search.row > div:nth-child(4) select', e => e.selectedOptions[0].innerText)
          const provinceForSelect = await page.$eval('app-quick-search div.quick-search.row > div:nth-child(4) select > option:nth-child(32)', e => e.value)
          await page.select('app-quick-search div.quick-search.row > div:nth-child(4) select', provinceForSelect)
          await page.click('app-quick-search .form-group.only-photo.custom-checkbox > label.custom-check')
          await page.click('div.form-group .search-btn')
          await page.waitForSelector('div.member-info > p')
        })

        it("comparing Age in search result", async () => {
          const ageResult = await page.$eval('div.member-info > p.member-address.member-age', e => +(e.innerText).split(' ')[0])
          expect(ageResult).toBeNull
          expect(ageResult).toBeLessThanOrEqual(+ageVal[1])
          expect(ageResult).toBeGreaterThanOrEqual(+ageVal[0])
        })

        it("comparing Province in search result", async () => {
          const provinceResult = await page.$eval('div.member-info > p:nth-child(3)', e => e.innerText)
          expect(provinceResult).toEqual(provinceVal)
        })
        it("search without profile pics", async() => {
          const placeHolderImagesLength = await page.$$eval('div.member-list-wrapper app-member-list div.member-image-wrapper > div.member-image', (el, domain) => Array.from(el).map(e => e.style.backgroundImage).filter( e => e.indexOf(domain) > -1).length, api.split('.')[1] )
          expect(placeHolderImagesLength).toBeGreaterThanOrEqual(1)
        })
        
      })
      
      describe("search with no result", async() => {
        it("result not found", async () => {
          await page.click('.page-content-header .btn-black')
          const ageForSelect = await page.$eval('app-quick-search div.quick-search.row > div:nth-child(3) select > option:nth-child(8)', e => e.value)
          await page.select('app-quick-search div.quick-search.row > div:nth-child(3) select', ageForSelect)
          await page.click('div.form-group .search-btn')
          await page.waitForSelector('div.no-favs .msg--info');
        })
      })
      
    })

    describe("Faq page", async() => {
      it("accordian length and content", async() => {
        await page.goto(`${baseUrl}preguntas-y-respuestas`, {waitUntil: "networkidle0"})
        await page.waitForSelector('div.page-content-header');
        var accordionLength = await page.$$eval('app-faq app-accordion', e => e.length)
        await page.waitForFunction( () => document.querySelectorAll("app-faq app-accordion"), e => e.length === accordionLength)
        var randomAccordian = await page.$$eval('app-faq app-accordion', 
          e => Math.floor(Math.random()*e.length)
        )
        console.log(randomAccordian);
        await page.waitForSelector(`app-accordion:nth-child(${+randomAccordian+1}) .accordion--arrow .icon-down-arrow-of-angle`)
        await page.click(`app-accordion:nth-child(${+randomAccordian+1})`)
        await page.waitForSelector(`app-accordion:nth-child(${+randomAccordian+1}) .accordion--arrow .icon-up-arrow-angle`)
        await page.waitForSelector(`app-accordion:nth-child(${+randomAccordian+1}) .accordion--content`)
        await page.waitFor(3000)
      })
    })

    describe("Affiliation page", async() => {
      it("wait till all content loads", async() => {
        await page.goto(`${baseUrl}página/Programa-de-afiliación`, {waitUntil: "networkidle0"})
        await page.waitForSelector('div.custom-page p:nth-child(2)')
      })
    })
    describe("Terms and conditions page", async() => {
      it("wait till all content loads", async() => {
        await page.goto(`${baseUrl}página/terminos-y-condiciones-de-uso-generales`, {waitUntil: "networkidle0"})
        await page.waitForSelector('div.custom-page p')
      })
    })
  describe("Messaging - Basic User", async() => {
    it("Login as Basic", async() => {
      await page.goto(baseUrl, {waitUntil: "networkidle0"})
      await page.click(".login-btn")
      await page.waitForSelector('app-login form > input:nth-child(2)')
      await page.type('app-login form > input:nth-child(2)', process.env.USERNAME)
      await page.type('app-login form > input:nth-child(4)', process.env.PASSWORD)
      await page.click('app-login form > button')
      await page.waitForSelector('body app-desktop-sidebar')
    })

    it("Send Message redirects to payment page ", async() => {
      await page.waitForSelector('swiper app-member.swiper-slide.swiper-slide-active > div.profile-pic-wrapper > div.member-icon-wrapper.d-flex.flex-row > div:nth-child(2)')
      await page.click('swiper app-member.swiper-slide.swiper-slide-active > div.profile-pic-wrapper > div.member-icon-wrapper.d-flex.flex-row >  div:nth-child(2)')
      await page.waitForSelector('div.chat-typing-area > form textarea')
      await page.type('div.chat-typing-area > form textarea', 'Hi There Wassup??')
      await page.click('div.chat-typing-area > form button.btn-green-complement')
      await page.waitForSelector('app-payment div.msg.msg--info.text-center')
    })
  })

  describe("Messaging - Elite User", async() => {

    it("Login as Elite and go to Home Page", async() => {
      await page.goto(baseUrl, {waitUntil: "networkidle0"})
      await page.click(".login-btn")
      await page.waitForSelector('app-login form > input:nth-child(2)')
      await page.type('app-login form > input:nth-child(2)', process.env.ELITE_USERNAME)
      await page.type('app-login form > input:nth-child(4)', process.env.PASSWORD)
      await page.click('app-login form > button')
      await page.waitForSelector('app-free-msg')
      await page.click('div.desktop-nav ul > li:nth-child(1) a')
      await page.waitForSelector('div.content-container > swiper')
    })
    it("Send Message to 5 users", async() => {
      const activeIndex = await page.$$eval('div.content-container > swiper app-member', els => Array.from(els).findIndex( e => e.className.indexOf('swiper-slide-active') > -1 ) ) + 1
      var i
      for (i = activeIndex; i < activeIndex + 5; i++) {
        await page.click(`div.content-container > swiper app-member:nth-child(${i}) span.icon-envelope-solid`)
        await page.waitForSelector('div.chat-typing-area > form textarea')
        await page.type('div.chat-typing-area > form textarea', 'Wasssup ???')
        await page.click('div.chat-typing-area > form button.btn-green-complement')
        await page.waitForSelector('div.chat-box-wrapper > div:nth-child(1)')
        await page.click('app-desktop-sidebar div.side-menu > ul > li:nth-child(1)')
        await page.waitForSelector('div.content-container > swiper')
      }
      await page.click('div.feature-profiles i.icon-next.slide-one-next')
      await page.click(`div.content-container > swiper app-member:nth-child(${i}) span.icon-envelope-solid`)
      await page.waitForSelector('div.chat-typing-area > form textarea')
      await page.type('div.chat-typing-area > form textarea', 'Wasssup ???')
      await page.click('div.chat-typing-area > form button.btn-green-complement')
      await page.waitForSelector('app-payment div.msg.msg--info.text-center')
    })
  })
  	describe("Send message", async() => {
      it("goes to send message page", async() => {
        await page.waitForSelector('div.desktop-nav ul > li > a')
        await page.click('div.desktop-nav ul > li:nth-child(1) > a')

        await page.waitForSelector('div.desktop-nav ul > li > a')
        await page.click('div.desktop-nav ul > li:nth-child(4) > a')

        await page.waitForSelector('div.member-info > div.like-list-wrapper')
        await page.click('div.like-list-wrapper > span.icon-envelope.icon-c')
      })
      it("send message without entering any text displays an error for 5 seconds", async() => {
        await page.waitForSelector('div.chat-typing-area > form .btn-green-complement')
        await page.click('div.chat-typing-area > form .btn-green-complement')
        await page.$eval('div.chat-typing-area > form .msg.msg--error', e => {
          setTimeout(function () {
            e.style.display='none';
          }, 5000);
          return false;
        })
      })
      it("sending one character in message", async() => {
        await page.type('div.chat-typing-area .textarea-wrapper > textarea', 'm')
        await page.click('div.chat-typing-area > form .btn-green-complement')
        var twoCharacters = await page.$eval('div.chat-typing-area > form .msg.msg--error', e => e.innerText)
        expect('The message must be at least 2 characters.').toEqual(twoCharacters)
      })
      it("successful message", async() => {
        await page.type('div.chat-typing-area .textarea-wrapper > textarea', message)
        await page.click('div.chat-typing-area > form .btn-green-complement')
        await page.reload({waitUntil: "networkidle0"})
        var sentMsg = await page.$eval('div.chat-box-main-wrapper > div > div > div:nth-child(1) > div.chat-box-info > div.chat-box-info-area > p', e => e.innerText)
        expect(message).toEqual(sentMsg)
      })
    })
    describe("Dashboard Page - Recent Activity", async() => {
    it("Login as Basic", async() => {
      await page.goto(baseUrl, {waitUntil: "networkidle0"})
      await page.click(".login-btn")
      await page.waitForSelector('app-login form > input:nth-child(2)')
      await page.type('app-login form > input:nth-child(2)', process.env.USERNAME)
      await page.type('app-login form > input:nth-child(4)', process.env.PASSWORD)
      await page.click('app-login form > button')
      await page.waitForSelector('div.content-container > swiper')
    })
    it("Add Member To Favourite", async() => {
      await page.waitForSelector('app-recent-activity span.fa.fa-heart-o')
      await page.click("app-recent-activity span.fa.fa-heart-o")
      await page.waitForSelector('app-recent-activity span.fa.fa-heart')
      await page.waitForSelector('app-root > app-notification-list > div')
    })
    it("Remove Member from Favourite", async() => {
      await page.waitForSelector('app-recent-activity span.fa.fa-heart')
      await page.click("app-recent-activity span.fa.fa-heart")
      await page.waitForSelector('app-recent-activity span.fa.fa-heart-o')
      await page.waitForSelector('app-root > app-notification-list > div')
    })

  })

  describe("Dashboard Page", async() => {
    it("Login as Basic", async() => {
      await page.goto(baseUrl, {waitUntil: "networkidle0"})
      await page.click(".login-btn")
      await page.waitForSelector('app-login form > input:nth-child(2)')
      await page.type('app-login form > input:nth-child(2)', process.env.USERNAME)
      await page.type('app-login form > input:nth-child(4)', process.env.PASSWORD)
      await page.click('app-login form > button')
      await page.waitForSelector('div.content-container > swiper')
    })
    describe("Popular Members Carousel Test", async() => {
      it("Next Arrow Slides Carousel To Right", async() => {
        const nextIndex = 
                await page.$$eval('div.new-member-wrapper swiper app-member', els => 
                          Array.from(els).findIndex( e => e.className.indexOf('swiper-slide-active') > -1 )) + 2;
        const nextName = await page.$eval(`div.new-member-wrapper swiper app-member:nth-child(${nextIndex}) span.member-name`, el => el.innerHTML)
        await page.waitForSelector('div.new-member-wrapper i.icon-next.slide-two-next')
        await page.click('div.new-member-wrapper i.icon-next.slide-two-next')
        const activeIndex = 
        await page.$$eval('div.new-member-wrapper swiper app-member', els => 
                  Array.from(els).findIndex( e => e.className.indexOf('swiper-slide-active') > -1 )) + 1;
        const activeName = await page.$eval(`div.new-member-wrapper swiper app-member:nth-child(${activeIndex}) span.member-name`, el => el.innerHTML)
        expect(nextName).toBe(activeName);
      })
      it("Previous Arrow Slides Carousel To Left", async() => {
        const nextIndex = 
                await page.$$eval('div.new-member-wrapper swiper app-member', els => 
                          Array.from(els).findIndex( e => e.className.indexOf('swiper-slide-active') > -1 )) + 2;
        const nextName = await page.$eval(`div.new-member-wrapper swiper app-member:nth-child(${nextIndex}) span.member-name`, el => el.innerHTML)
        await page.waitForSelector('div.new-member-wrapper i.icon-back.slide-two-prev')
        await page.click('div.new-member-wrapper i.icon-back.slide-two-prev')
        const activeIndex = 
        await page.$$eval('div.new-member-wrapper swiper app-member', els => 
                  Array.from(els).findIndex( e => e.className.indexOf('swiper-slide-active') > -1 )) + 3;
        const activeName = await page.$eval(`div.new-member-wrapper swiper app-member:nth-child(${activeIndex}) span.member-name`, el => el.innerHTML)
        expect(nextName).toBe(activeName);
        })
    })
  })

  describe("Dashboard - New Members", async() => {
    it("Login as Basic", async() => {
      await page.goto(`${baseUrl}iniciar-sesion`, {waitUntil: "networkidle0"})
      await page.waitForSelector('app-login form > input:nth-child(2)')
      await page.type('app-login form > input:nth-child(2)', process.env.USERNAME)
      await page.type('app-login form > input:nth-child(4)', process.env.PASSWORD)
      await page.click('app-login form > button')
      await page.waitForSelector('div.content-container > swiper')
    })
    it("Add profile to favourites", async() => {
      await page.click('div.new-member-wrapper app-member.swiper-slide-active span.fa.fa-heart-o')
      await page.waitForSelector('div.new-member-wrapper app-member.swiper-slide-active span.fa.fa-heart')
      await page.waitForSelector('app-root > app-notification-list > div')
    })
    it("Remove profile from favourites", async() => {
      await page.click('div.new-member-wrapper app-member.swiper-slide-active span.fa.fa-heart')
      await page.waitForSelector('div.new-member-wrapper app-member.swiper-slide-active span.fa.fa-heart-o')
      await page.waitForSelector('app-root > app-notification-list > div')
    })
  })

  describe("Dashboard - Popular Members", async() => {
    it("Login as Basic", async() => {
      await page.goto(`${baseUrl}iniciar-sesion`, {waitUntil: "networkidle0"})
      await page.waitForSelector('app-login form > input:nth-child(2)')
      await page.type('app-login form > input:nth-child(2)', process.env.USERNAME)
      await page.type('app-login form > input:nth-child(4)', process.env.PASSWORD)
      await page.click('app-login form > button')
      await page.waitForSelector('div.content-container > swiper')
    })
    it("Add profile to favourites", async() => {
      await page.click('div.feature-profiles + swiper app-member.swiper-slide-active span.fa.fa-heart-o')
      await page.waitForSelector('div.feature-profiles + swiper app-member.swiper-slide-active span.fa.fa-heart')
      await page.waitForSelector('app-root > app-notification-list > div')
    })
    it("Remove profile from favourites", async() => {
      await page.click('div.feature-profiles + swiper app-member.swiper-slide-active span.fa.fa-heart')
      await page.waitForSelector('div.feature-profiles + swiper app-member.swiper-slide-active span.fa.fa-heart-o')
      await page.waitForSelector('app-root > app-notification-list > div')
    })
  })

  describe("Drag New Members Carousel", async() => {
    it("Login as Basic", async() => {
      await page.goto(`${baseUrl}iniciar-sesion`, {waitUntil: "networkidle0"})
      await page.waitForSelector('app-login form > input:nth-child(2)')
      await page.type('app-login form > input:nth-child(2)', process.env.USERNAME)
      await page.type('app-login form > input:nth-child(4)', process.env.PASSWORD)
      await page.click('app-login form > button')
      await page.waitForSelector('div.content-container > swiper')
    })
    it("Drag To Left", async() => {
        const middleIndex = 
                await page.$$eval('div.new-member-wrapper swiper app-member', els => 
                          Array.from(els).findIndex( e => e.className.indexOf('swiper-slide-active') > -1 )) + 3;
        const middleName = await page.$eval(`div.new-member-wrapper swiper app-member:nth-child(${middleIndex}) span.member-name`, el => el.innerHTML)
        const posTop = await page.$eval(`div.new-member-wrapper swiper app-member:nth-child(${middleIndex})`, 
                                      el => el.getBoundingClientRect().top)
        const posLeft = await page.$eval(`div.new-member-wrapper swiper app-member:nth-child(${middleIndex})`, 
                                      el => el.getBoundingClientRect().left)
        const itemWidth = await page.$eval(`div.new-member-wrapper swiper app-member:nth-child(${middleIndex})`, 
                                      el => el.getBoundingClientRect().width)
        await page.mouse.move(posLeft + 50, posTop + 50)
        await page.mouse.down()
        await page.mouse.move(posLeft - (itemWidth * 2.0), posTop + 50)
        await page.mouse.up()
        const newMiddleIndex = 
                await page.$$eval('div.new-member-wrapper swiper app-member', els => 
                          Array.from(els).findIndex( e => e.className.indexOf('swiper-slide-active') > -1 )) + 3;
        const newMiddleName = await page.$eval(`div.new-member-wrapper swiper app-member:nth-child(${newMiddleIndex}) span.member-name`, el => el.innerHTML)
        expect(middleName).not.toBe(newMiddleName)
    })
    it("Drag To Right", async() => {
      const middleIndex = 
              await page.$$eval('div.new-member-wrapper swiper app-member', els => 
                        Array.from(els).findIndex( e => e.className.indexOf('swiper-slide-active') > -1 )) + 3;
      const middleName = await page.$eval(`div.new-member-wrapper swiper app-member:nth-child(${middleIndex}) span.member-name`, el => el.innerHTML)
      const posTop = await page.$eval(`div.new-member-wrapper swiper app-member:nth-child(${middleIndex})`, 
                                    el => el.getBoundingClientRect().top)
      const posLeft = await page.$eval(`div.new-member-wrapper swiper app-member:nth-child(${middleIndex})`, 
                                    el => el.getBoundingClientRect().left)
      const itemWidth = await page.$eval(`div.new-member-wrapper swiper app-member:nth-child(${middleIndex})`, 
                                    el => el.getBoundingClientRect().width)
      await page.mouse.move(posLeft + 50, posTop + 50)
      await page.mouse.down()
      await page.mouse.move(posLeft + (itemWidth * 2.0), posTop + 50)
      await page.mouse.up()
      const newMiddleIndex = 
              await page.$$eval('div.new-member-wrapper swiper app-member', els => 
                        Array.from(els).findIndex( e => e.className.indexOf('swiper-slide-active') > -1 )) + 3;
      const newMiddleName = await page.$eval(`div.new-member-wrapper swiper app-member:nth-child(${newMiddleIndex}) span.member-name`, el => el.innerHTML)
      expect(middleName).not.toBe(newMiddleName)
    })
  })

  describe("Drag Popular Members Carousel", async() => {
    it("Login as Basic", async() => {
      await page.goto(`${baseUrl}iniciar-sesion`, {waitUntil: "networkidle0"})
      await page.waitForSelector('app-login form > input:nth-child(2)')
      await page.type('app-login form > input:nth-child(2)', process.env.USERNAME)
      await page.type('app-login form > input:nth-child(4)', process.env.PASSWORD)
      await page.click('app-login form > button')
      await page.waitForSelector('div.content-container > swiper')
    })
    it("Drag To Left", async() => {
        const middleIndex = 
                await page.$$eval('div.feature-profiles + swiper app-member', els => 
                          Array.from(els).findIndex( e => e.className.indexOf('swiper-slide-active') > -1 )) + 3;
        const middleName = await page.$eval(`div.feature-profiles + swiper app-member:nth-child(${middleIndex}) span.member-name`, el => el.innerHTML)
        const posTop = await page.$eval(`div.feature-profiles + swiper app-member:nth-child(${middleIndex})`, 
                                      el => el.getBoundingClientRect().top)
        const posLeft = await page.$eval(`div.feature-profiles + swiper app-member:nth-child(${middleIndex})`, 
                                      el => el.getBoundingClientRect().left)
        const itemWidth = await page.$eval(`div.feature-profiles + swiper app-member:nth-child(${middleIndex})`, 
                                      el => el.getBoundingClientRect().width)
        await page.mouse.move(posLeft + 50, posTop + 50)
        await page.mouse.down()
        await page.mouse.move(posLeft - (itemWidth * 2.0), posTop + 50)
        await page.mouse.up()
        const newMiddleIndex = 
                await page.$$eval('div.feature-profiles + swiper app-member', els => 
                          Array.from(els).findIndex( e => e.className.indexOf('swiper-slide-active') > -1 )) + 3;
        const newMiddleName = await page.$eval(`div.feature-profiles + swiper app-member:nth-child(${newMiddleIndex}) span.member-name`, el => el.innerHTML)
        expect(middleName).not.toBe(newMiddleName)
    })
    it("Drag To Right", async() => {
      const middleIndex = 
              await page.$$eval('div.feature-profiles + swiper app-member', els => 
                        Array.from(els).findIndex( e => e.className.indexOf('swiper-slide-active') > -1 )) + 3;
      const middleName = await page.$eval(`div.feature-profiles + swiper app-member:nth-child(${middleIndex}) span.member-name`, el => el.innerHTML)
      const posTop = await page.$eval(`div.feature-profiles + swiper app-member:nth-child(${middleIndex})`, 
                                    el => el.getBoundingClientRect().top)
      const posLeft = await page.$eval(`div.feature-profiles + swiper app-member:nth-child(${middleIndex})`, 
                                    el => el.getBoundingClientRect().left)
      const itemWidth = await page.$eval(`div.feature-profiles + swiper app-member:nth-child(${middleIndex})`, 
                                    el => el.getBoundingClientRect().width)
      await page.mouse.move(posLeft + 50, posTop + 50)
      await page.mouse.down()
      await page.mouse.move(posLeft + (itemWidth * 2.0), posTop + 50)
      await page.mouse.up()
      const newMiddleIndex = 
              await page.$$eval('div.feature-profiles + swiper app-member', els => 
                        Array.from(els).findIndex( e => e.className.indexOf('swiper-slide-active') > -1 )) + 3;
      const newMiddleName = await page.$eval(`div.feature-profiles + swiper app-member:nth-child(${newMiddleIndex}) span.member-name`, el => el.innerHTML)
      expect(middleName).not.toBe(newMiddleName)
    })
  })

  describe("Dashboard Page", async() => {
    it("Login as Basic", async() => {
      await page.goto(baseUrl, {waitUntil: "networkidle0"})
      await page.click(".login-btn")
      await page.waitForSelector('app-login form > input:nth-child(2)')
      await page.type('app-login form > input:nth-child(2)', process.env.USERNAME)
      await page.type('app-login form > input:nth-child(4)', process.env.PASSWORD)
      await page.click('app-login form > button')
      await page.waitForSelector('div.content-container > swiper')
    })
    describe("Popular Members Carousel Test", async() => {
      it("Next Arrow Slides Carousel To Right", async() => {
        const nextIndex = 
                await page.$$eval('div.feature-profiles + swiper app-member', els => 
                          Array.from(els).findIndex( e => e.className.indexOf('swiper-slide-active') > -1 )) + 2;
        const nextName = await page.$eval(`div.feature-profiles + swiper app-member:nth-child(${nextIndex}) span.member-name`, el => el.innerHTML)
        await page.waitForSelector('div.feature-profiles i.icon-next.slide-one-next')
        await page.click('div.feature-profiles i.icon-next.slide-one-next')
        const activeIndex = 
        await page.$$eval('div.feature-profiles + swiper app-member', els => 
                  Array.from(els).findIndex( e => e.className.indexOf('swiper-slide-active') > -1 )) + 1;
        const activeName = await page.$eval(`div.feature-profiles + swiper app-member:nth-child(${activeIndex}) span.member-name`, el => el.innerHTML)
        expect(nextName).toBe(activeName);
      })
      it("Previous Arrow Slides Carousel To Left", async() => {
        const nextIndex = 
                await page.$$eval('div.feature-profiles + swiper app-member', els => 
                          Array.from(els).findIndex( e => e.className.indexOf('swiper-slide-active') > -1 )) + 2;
        const nextName = await page.$eval(`div.feature-profiles + swiper app-member:nth-child(${nextIndex}) span.member-name`, el => el.innerHTML)
        await page.waitForSelector('div.feature-profiles i.icon-back.slide-one-prev')
        await page.click('div.feature-profiles i.icon-back.slide-one-prev')
        const activeIndex = 
        await page.$$eval('div.feature-profiles + swiper app-member', els => 
                  Array.from(els).findIndex( e => e.className.indexOf('swiper-slide-active') > -1 )) + 3;
        const activeName = await page.$eval(`div.feature-profiles + swiper app-member:nth-child(${activeIndex}) span.member-name`, el => el.innerHTML)
        expect(nextName).toBe(activeName);
        })
    })
  })
  describe("support page", async() => {
      it("random accordian length and content", async() => {
        await page.goto(`${baseUrl}soporte`, {waitUntil: "networkidle0"})
        await page.waitForSelector('div.page-content-header');
        var accordionLength = await page.$$eval('app-contact app-accordion', e => e.length)
        await page.waitForFunction( () => document.querySelectorAll("app-contact app-accordion"), e => e.length === accordionLength)
        var randomAccordian = await page.$$eval('app-contact app-accordion', 
          e => Math.floor(Math.random()*e.length)
        )
        console.log(randomAccordian);
        await page.waitForSelector(`app-contact app-accordion:nth-child(${+randomAccordian+1}) .accordion--arrow .icon-down-arrow-of-angle`)
        await page.click(`app-contact app-accordion:nth-child(${+randomAccordian+1})`)
        await page.waitForSelector(`app-contact app-accordion:nth-child(${+randomAccordian+1}) .accordion--arrow .icon-up-arrow-angle`)
        await page.waitForSelector(`app-contact app-accordion:nth-child(${+randomAccordian+1}) .accordion--content`)
        await page.waitFor(3000)
      })
    })
  describe("Contact Page", async() => {
    it("Contact Form Validate Submission without Data", async() => {
      await page.goto(`${baseUrl}soporte`, {waitUntil: "networkidle0"})
      await page.click('app-contact-form div.heading-wrapper')
      await page.waitForSelector('#form-wrapper > form > div:nth-child(8) > button')
      await page.click('#form-wrapper > form > div:nth-child(8) > button')
      await page.waitForSelector('#form-wrapper > form > div:nth-child(1) > div.msg.msg--error')
      await page.waitForSelector('#form-wrapper > form > div:nth-child(2) > div.msg.msg--error')
      await page.waitForSelector('#form-wrapper > form > div:nth-child(3) > div.msg.msg--error')
      await page.waitForSelector('#form-wrapper > form > div:nth-child(4) > div.msg.msg--error')
      await page.waitForSelector('#form-wrapper > form > div:nth-child(5) > div.msg.msg--error')
      await page.waitForSelector('#form-wrapper > form > div:nth-child(6) > div.msg.msg--error')
      await page.waitForSelector('#form-wrapper > form > div:nth-child(7) > div.msg.msg--error')
    })
    it("Contact Form Submission with Data", async() => {
      await page.type('#form-wrapper > form > div:nth-child(2) > input', 'rajdeep')
      await page.type('#form-wrapper > form > div:nth-child(3) > input', 'This Is Test Subject')
      await page.type('#form-wrapper > form > div:nth-child(4) > input', 'rajdeep@itobuz.com')
      await page.type('#form-wrapper > form > div:nth-child(5) > input', 'rajdeep@itobuz.com')
      await page.type('#form-wrapper textarea', 'This is my test message to submit form')
      await page.click('#form-wrapper > form > div:nth-child(8) > button')
      await page.waitForSelector('#form-wrapper > form > div:nth-child(7) > div.msg.msg--error')
    })
  })
    describe("Message List Page", async() => {
    it("Login as Prosenjit", async() => {
      await page.goto(`${baseUrl}iniciar-sesion`, {waitUntil: "networkidle0"})
      await page.waitForSelector('app-login form > input:nth-child(2)')
      await page.type('app-login form > input:nth-child(2)', process.env.USERNAME_P)
      await page.type('app-login form > input:nth-child(4)', process.env.PASSWORD)
      await page.click('app-login form > button')
      await page.waitForSelector('app-desktop-sidebar div.side-menu > ul > li:nth-child(2)')
      await page.click('app-desktop-sidebar div.side-menu > ul > li:nth-child(2)')
      await page.waitForSelector('div.message-list')
    })
    it("Selecting user checks tick", async() => {
      await page.waitForSelector('div.message-list-wrapper label.label--material-checkbox.gotoDetails')
      await page.click('div.message-list-wrapper label.label--material-checkbox.gotoDetails')
      await page.waitForSelector('div.message-list-wrapper label.label--material-checkbox.gotoDetails.active')
      const count = await page.$eval('div.group-btns > button:nth-child(2) > span.pl-2.pr-3', el => el.innerHTML)
      expect(count).toContain('1')
    })
    it("Delete count evaluates to 1", async() => {
      const count = await page.$eval('div.group-btns > button:nth-child(2) > span.pl-2.pr-3', el => el.innerHTML)
      expect(count).toContain('1')
    })
    it("Click delete to delete message", async() => {
      var chatName = await page.$eval('div.message-list-wrapper div.message-list-info > p.message-history', el => el.innerHTML)
      await page.click('div.page-content-header > div.group-btns > button:nth-child(2)')
      await page.waitForFunction( (e) => !Array.from(document.querySelectorAll('div.message-list')).map(e => e.innerText.split('\n').shift()).includes(e), {polling: 'mutation'}, chatName)
      var namesArray = await page.$$eval('div.message-list', els => Array.from(els).map(e => e.innerText.split('\n').shift()))
      expect(namesArray).not.toContain(chatName)
    })
    it("Select All button Selects all messages", async() => {
      await page.click('div.content-container > div:nth-child(4) > button')
      const messagesLength = await page.$$eval('div.message-list', els => Array.from(els).length)
      await page.waitForFunction( (e) => Array.from(document.querySelectorAll('div.message-list-wrapper label.label--material-checkbox.gotoDetails.active')).length ==e , {polling: 'mutation'}, messagesLength)
      const tickLength = await page.$$eval('div.message-list-wrapper label.label--material-checkbox.gotoDetails.active', els => Array.from(els).length)
      expect(messagesLength).toEqual(tickLength)
      
    })
    it("Number of selected messages in delete button", async() => {
      const messagesLength = await page.$$eval('div.message-list', els => Array.from(els).length)
      const count = await page.$eval('div.group-btns > button:nth-child(2) > span.pl-2.pr-3', el => el.innerHTML)
      expect(count).toContain(messagesLength)
    })
  })