Jest+Puppeteer after run test TypeError: Cannot read property 'waitForSelector' of undefined

Jest+Puppeteer after run test TypeError: Cannot read property 'waitForSelector' of undefined

将一组测试移动到单独的 class 或 Jest+puppeteer 模块中的正确方法是什么,该模块将在其他测试中调用? 比如我有一个describe with tests,我想在其他的describe中使用这个describe。

login.spec.js

'use strict'

const testConst = require('./const')
const selectors = require('./selectors')
const action = require('./actions')
const br = require('./browser')
const Auth = require('./login')
   
let page
let browser

beforeAll(async () => {
      // set up Puppeteer
      browser = await br.set_up_Puppeteer(true)
      console.log('browser.isConnected')
      // Web page
      console.log('browser ready')
      page = await br.see_webPage(browser, testConst.browser.url_address)
      console.log('page ready')

      console.log('fill field email and click login btn')
      console.log('logged')

  }, testConst.browser.timeout)

  afterAll(async () => {
      await browser.close()
  }, testConst.browser.timeout)

Auth.login(page)

login.js

'use strict'

const testConst = require('../const.js')
const selectors = require('../selectors')
const action = require('../actions')

class login{
  static async login(page) {

    describe('go to OrgTracker from launchpad', () => {
        test('open card Org Tracker tool in launchpad', async () => {
          await page.waitForSelector(selectors, {
            visible: true
          })
          await page.click(selectors)
          await page.waitForSelector(selectors, {
            visible: true
          })
        }, testConst.browser.timeout)
      })
  }

}

module.exports=login

但是这个组合不起作用,在 运行 test:login 之后我看到错误类型错误:无法读取 属性 'waitForSelector' of undefined

您的问题是代码末尾的 Auth.login(page) 语句。 page 变量此时尚未初始化。此外,您已经在 beforeAll 中调用它,这似乎是正确的,具体取决于您要实现的目标。

这样工作

login.spec.js

'use strict'
const testConst = require('../const')
const selectors = require('../selectors')
const action = require('../actions')
const br = require('../browser')
const Auth = require('../login')

let page
let browser

const emails_correctData =  testConst.users.correctData.emails
const password_correctData = testConst.users.correctData.passwords

  beforeAll(async () => {
    // set up Puppeteer
      browser = await br.set_up_Puppeteer(true);
      console.log('browser.isConnected');
      // Web page
      page = await br.see_webPage(browser, testConst.browser.url_address, 'user');
      console.log('browser ready');

  }, testConst.browser.timeout)

  afterAll(async () => {
      await browser.close();
  }, testConst.browser.timeout)

  describe('login on system', async() => {

      test('login page as ' + emails_correctData.email1 + ' logged correctly', async () => {
          console.log('fill field email and click login btn')

          await Auth.login( page, emails_correctData.email1, password_correctData.password)
          // full page screenshot
          await action.make_screenshot(page,  testConst.screenshot.path_afterLogin, '_after_login.jpg')
          console.log('logged')
      }, testConst.browser.timeout)

  })

login.js

'use strict'

const testConst = require('../const')
const selectors = require('../selectors')
const action = require('../actions')

class Auth{

    static async login( page, emails_correctData, password) {
      await page.click(selectors.login.signIn).then(async()=>{
         await expect(page.waitForSelector(selectors.login.email)).toBeTruthy()
       })
       console.log('click signIn')
       await action.fillField(page, selectors.login.email, emails_correctData)

       console.log('fillField email')
       await action.fillField(page, selectors.login.password, password)

       console.log('fillField password')
       await page.click(selectors.login.btnLogin).then(async()=>{
         console.log('click btn signIn')
         const userName = await page.$eval(selectors.menu.start, e => e.innerHTML)
         expect(userName).toBe(testConst.users.correctData.userName.userName1)
       },testConst.browser.timeout)
  }
  
}

module.exports=Auth

但这并不能解决我的问题。我想在 class 中指定整组测试并将它们放在我需要的地方。