在 Playwright 自动装置中使用 page.on('response') eventEmitter 监听器

问题描述 投票:0回答:1

我正在尝试创建一个 page.on('response') 事件监听器固定装置,它将在我的所有测试中使用。

目前,只要我的代码库中存在某些事件,就会导致具有特定 ID 的 div 出现在 UI 中。 我可以通过创建一个单独的方法并将其包含在 beforeEach 挂钩中来使其工作,但是我想知道这是否可以作为自动装置实现。

//helper.js

exports.test = base.test.extend({
  responseMacroErrorCheck: [async ({ page }) => {
    page.on('response', data => {
      if (data) {
        data.body().then(b => {
          let ioCheck = b.indexOf('example')
          if (b && ioCheck !== -1) {
            process.stdout.write(`Macro error detected on page (example)`)
            process.stdout.write(`${b.toString().substring(ioCheck - 500, ioCheck + 500)}`)
            throw new Error(`Macro error detected on page (example)\n${b})}`)
          }
        })
      }
    })
    await use('responseMacroErrorCheck')
  }, { scope: 'test', auto: true }],
})

// error.spec.js

const scanUrlList = [
  'myUrl'
]

test.describe('Scan URL list for macro errors', () => {
  scanUrlList.forEach(ele => {
    test(ele, async ({ page }) => {
      await page.goto(`myUrl`)
    })
  })
})

上述方法似乎可以使代码无法识别

responseMacroErrorCheck
,但是如果我添加以下代码,它就可以正常运行并按预期运行 // 助手.js

export const responseMacroErrorCheck = async (page) => {
  page.on('response', data => {
    if (data) {
      data.body().then(b => {
        let ioCheck = b.indexOf('example')
        if (b && ioCheck !== -1) {
          process.stdout.write(`Macro error detected on page (example)`)
          process.stdout.write(`${b.toString().substring(ioCheck - 500, ioCheck + 500)}`)
          throw new Error(`Macro error detected on page (example)\n${b})}`)
        }
      })
    }
  })
}

// error.spec.js

  test.beforeEach(async ({ page }) => {
    await h.responseMacroErrorCheck(page)
  })

我的自动夹具中是否缺少某些东西?或者只是页面发出的事件在自动装置中无法识别?

javascript automated-tests playwright
1个回答
0
投票

必须:

import {test} from helper.js
而不是
import {test} from @playwright/test

© www.soinside.com 2019 - 2024. All rights reserved.