【问题标题】:puppeteer is closing the browser before running all the jest testspuppeteer 在运行所有笑话测试之前关闭浏览器
【发布时间】:2020-04-25 19:50:38
【问题描述】:

重现步骤

  • git clone https://github.com/anikethsaha/docsify
  • git checkoute2e-test-puppeteer`
  • npm i
  • npm run test:e2e
  • 检查sideBar.spec.js的测试

运行 122 个测试中的 31 个测试会失败

告诉我们您的环境:

哪些步骤会重现问题? npm run test:e2e

请包含重现问题的代码。

  1. https://github.com/anikethsaha/docsify/blob/e2e-test-puppeteer/e2e/tests/sideBar.spec.js 2. 3.

预期的结果是什么? 它应该运行所有的测试用例 122

会发生什么? 但是相反,它只运行了 31 个测试,之后浏览器正在关闭,然后剩下的 91 个测试没有运行

上下文

我正在使用live-server 运行一个服务器,该服务器将为我的文件提供服务,并且它是在一个自定义的笑话环境中完成的。 我有一个sideBar.spec.js 文件,它通过单击所有侧边栏链接然后使用jest-image-snapshot 拍摄快照来测试它们。 在这个测试中,我使用page.click 方法单击所有可能的锚链接。 它没有运行剩余的 91 个测试。 我将超时时间增加到 300 秒,但它仍然在此之前停止。

我看到了一个奇怪的行为,即侧边栏带有一个切换按钮。所以默认情况下,侧边栏是打开的。但是在退出关闭浏览器之前,IDK 会切换侧边栏以关闭它,然后关闭浏览器。 检查 sideBar.spec.js 的测试 你可以在这里找到测试的行为https://travis-ci.org/docsifyjs/docsify/jobs/631003978?utm_medium=notification&utm_source=github_status

【问题讨论】:

  • 我认为这是 puppeteer 的默认超时时间。我没有检查您提供的所有内容,但我会从那开始。它有一个设定的超时时间(我想一分钟后),您需要对其进行修改以使其保持打开状态,只要您愿意。 that好吗?
  • 那么我应该增加超时时间吗?因为传递 0 实际上是禁用权利。
  • 我不确定将其设置为 0 是否会禁用它。我没有合法的答案,但我记得谷歌搜索并发现有关将其设置为 0 且无法正常工作的问题。它有点深,但它可能是你的解决方案

标签: javascript node.js unit-testing jestjs puppeteer


【解决方案1】:

浏览器在执行所有测试之前没有关闭,事实并非如此。 在 beforeAll 钩子中添加参数browser = await puppeteer.launch({headless: false}),当你看到发生了什么时总是更容易。

我用你的代码玩了一段时间,如果你试图点击的选择器真的存在,我在控制台中检查了,看起来它们不存在。 (您也可以在您提供的日志中清楚地看到它:Node is either not visible or not an HTMLElement 等)

例如:

const cdnIds = [
 'latest-version',
 'specific-version',
 'compressed-file',
 'other-cdn'
]
cdnIds.forEach(id => {
 test('go to #cdn?id=' + id, async done => {
   await page.click(`a.section-link[href='#/cdn?id=${id}']`)
   const ss = await page.screenshot()
   expectThres(ss)
   done()
 })
})

没有匹配的选择器,例如a.section-link[href='#/cdn?id=other-cdn'] 或a.section-link[href^='#/cdn']

【讨论】:

  • 实际上它们是隐藏的。所以他们的父 a 需要被点击然后他们才会可见。所有的侧边栏标签都是这样的。首先a 被点击然后它的孩子(ul > li > a.section-link[...])是可见的。
  • 我在无头本地运行它们:仅 false。如果你在本地运行,你会看到一个奇怪的行为,在一些侧边栏测试之后,主要是在 plugins 循环中,在退出浏览器之前,puppeteer 正在关闭(切换)侧边栏
猜你喜欢
  • 2023-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-04
  • 1970-01-01
相关资源
最近更新 更多