Automated tests 为什么木偶演员不能通过简单的测试;等待功能失败:超过超时500毫秒";?

Automated tests 为什么木偶演员不能通过简单的测试;等待功能失败:超过超时500毫秒";?,automated-tests,jestjs,puppeteer,Automated Tests,Jestjs,Puppeteer,在尝试使用Jest和Puppeter设置一些简单的端到端测试时,我发现我编写的任何测试都会在超时后莫名其妙地失败 下面是一个简单的示例测试文件,它与以下内容略有不同: 它产生的反应是: TimeoutError: Text not found "I'm Feeling Lucky" waiting for function failed: timeout 500ms exceeded 我曾尝试在goto行中添加自定义超时、test子句等,但都没有效果。你知道是什么引起的吗?谢谢。我

在尝试使用Jest和Puppeter设置一些简单的端到端测试时,我发现我编写的任何测试都会在超时后莫名其妙地失败

下面是一个简单的示例测试文件,它与以下内容略有不同:

它产生的反应是:

TimeoutError: Text not found "I'm Feeling Lucky"
      waiting for function failed: timeout 500ms exceeded

我曾尝试在goto行中添加自定义超时、test子句等,但都没有效果。你知道是什么引起的吗?谢谢。

我想说的是,使用
toMatch
需要显示文本。但是,在您的情况下,要验证的文本是与按钮关联的文本

您应该尝试以下方法:

await expect(page).toMatchElement('input[value="I\'m Feeling Lucky"]');
更新1:

另一种可能性(这是您自己提出的)是验证在页面有机会加载之前超时。根据我的经验,在无头模式下执行代码时,这是一个常见的问题。非常快。有时候太快了。语句可以在UI中的一切就绪之前执行

在这种情况下,最好在代码中添加一些
waitForSelector
语句,如下所示:

await page.waitForSelector('input[value="I\'m Feeling Lucky"]');
这将确保在继续代码中的下一步之前显示所需的选择器。通过这样做,您将使脚本更加健壮,同时保持效率-这些等待不会降低代码的速度。它们只需暂停,直到
puppeter
将要与之交互/验证的选择器注册为显示。大多数时候,你甚至不会注意到暂停,因为它会很短(我说的是毫秒)


但这将使您的脚本坚如磐石,同时也确保在测试执行期间,如果网页因任何原因响应较慢,则不会出现问题。

您可能正在使用“expect Puppeter”软件包,该软件包执行
toMatch
expect。这是一个不小的偏差。奇怪的是,你的默认超时时间不是包的默认时间30秒,检查一下

但是,要解决您的问题,请执行以下操作:

wait expect(page).toMatch(“我觉得很幸运,{timeout:6000}”)

或使用以下命令显式设置默认超时:

page.setDefaultTimeout(超时)


看。

嘿,谢谢你的建议!进一步检查后,看起来我的测试是在内部的按钮/文本呈现之前执行的,因此它超时,因为它从未及时找到元素。我不确定这里是否有更深层次的问题,因为给出的测试应该根据木偶师自己的示例进行。在这种情况下,您可能应该尝试使用
waitForSelector
调用,以确保在尝试验证文本/选择器之前,所有内容都已加载到UI中。这只会让你的测试更加可靠。事实上,为了其他人的利益,我也用这些信息更新了我的答案。
await page.waitForSelector('input[value="I\'m Feeling Lucky"]');