Playwright中waitForUrl超时求助:新页签URL校验失败
问题原因及解决方案
你的超时问题确实是因为打开新页签导致的:你当前使用的this.page是原页签的浏览器上下文实例,点击按钮打开新页签后,原页签并没有发生导航行为,所以page.waitForURL会一直等待直到超时。
正确的处理步骤
要校验新页签的URL,需要先获取新页签对应的Page实例,再对其进行操作:
- 在点击按钮前,监听原页签的
popup事件,等待新页签弹出 - 并行执行点击操作和事件监听,获取新页签实例
- 使用新页签实例等待URL或直接校验地址
代码示例
// 并行监听弹窗事件和执行点击操作 const [newPage] = await Promise.all([ this.page.waitForEvent('popup'), // 等待新页签弹出 this.shareFeedbackBtn().click() // 触发按钮点击 ]); // 等待新页签加载完成(可选,根据需要选择加载状态) await newPage.waitForLoadState('load'); // 方式1:直接校验URL是否符合预期 expect(newPage.url()).toMatch(/https:\/\/community\.test\.com\/.*/); // 方式2:使用waitForURL等待目标URL(支持通配符) await newPage.waitForURL("https://community.test.com/**");
注意事项
- 必须确保
waitForEvent('popup')在点击操作之前被调用,否则可能错过弹窗事件 - 如果页面可能弹出多个弹窗,可以通过事件回调过滤目标页签,比如判断初始URL:
const [newPage] = await Promise.all([ this.page.waitForEvent('popup', { predicate: (page) => page.url().includes('community.test.com') }), this.shareFeedbackBtn().click() ]);
内容的提问来源于stack exchange,提问作者Chris Hansen
相关产品推荐
相关产品推荐

