我对编剧有意见page.waitForEvent() https://playwright.dev/docs/api/class-page#page-wait-for-event:
我希望我的测试在单击链接后导航到不同页面后等待我们的应用程序触发的特定事件。新导航到的页面上有一个组件需要一些时间来加载,我们会触发一个自定义事件来表明它已准备好使用。
事件触发如下所示:
const event = new Event('componentReady')
window.dispatchEvent(event)
在我的剧作家测试中,我试图等待这个事件,按照文档 https://playwright.dev/docs/api/class-page#page-wait-for-event:
const [frame, _] = await Promise.all([
this.page.waitForEvent('componentReady'),
this.page.locator('button').click(),
])
问题是我的测试挂起并最终超时page.waitForEvent()
没有检测到我的'componentReady'
事件。有没有人尝试过page.waitForEvent()
前?我在这里做错了什么吗?
目前,我的测试只是等待一些预定义的时间,但在不同的网络条件和不同的硬件上,有时等待时间过长,会浪费时间,或者等待时间过少,导致测试失败,因为东西尚未加载。显然这并不理想,我想通过使用适当的信号来避免这种情况。
注意:我已经验证事件实际上正在被触发,从而创建一个打印到控制台的侦听器。
window.addEventListener('componentReady', (e) => { console.log('Fired event "componentReady"', e) })
事实上,当剧作家单击按钮时,我可以看到下面的消息正在打印到控制台。我什至在测试运行时通过注入了上面的监听器page.evaluate()
如果我暂停测试执行并打开 playwright 运行的浏览器的 DevTools -> Console,我还可以看到控制台输出。
我似乎找不到任何其他有关问题的报告page.waitForEvent()
因此,如果您能提供任何建议或可能有帮助的资源,我将不胜感激。