【问题标题】:How to prevent the browser from closing while running code in Playwright Tests in Javascript在 Javascript 的 Playwright 测试中运行代码时如何防止浏览器关闭
【发布时间】:2022-12-15 21:16:47
【问题描述】:
我正在尝试在浏览器中记录网络调用。对于我的用例,我要求浏览器处于打开状态并且应该只使用脚本关闭。我目前正在使用 page.pause() 函数来防止浏览器自动关闭。有没有其他方法可以防止浏览器自动关闭。
test('Verify home page Load event',async({page})=>{
//const browser = await chromium.launchPersistentContext("",{headless:false});
await page.goto("https://samplesite.com")
await page.on('request',req=>{
const requestUrl = req.url();
if(requestUrl.indexOf("google-analytics.com/collect")>-1){
console.log("Intercepted:->"+requestUrl);
}else{
req.continue
}
})
await page.pause();
})
我尝试查看此 [链接] (How to keep browser opening by the end of the code running with playwright-python?) 的 python,但无法将其应用于 JS。
【问题讨论】:
标签:
javascript
node.js
ui-automation
playwright
【解决方案1】:
与 python 问题的答案中描述的类似,您需要以某种方式使脚本保持活动状态。
answer 描述了几种方法。
然而,page.pause() 绝对是推荐的方法 - 它恰恰适用于您需要在脚本执行时检查浏览器的这种情况。你的脚本也有一些问题——当你遇到你的目标请求时,你正在记录一些东西但没有调用request.continue()(注意这是一个方法,不是财产)。这将导致所有请求无限期挂起,直到它继续或中止。
你可能想做这样的事情:
await page.route('**/*', (route, request) => {
const rurl = request.url();
if (rurl.includes('google-analytics.com/collect')) {
console.log(`Intercepted request to ${rurl}`);
// Do other stuff?
}
route.continue();
});
目前还不清楚你想从你的 sn-p 中完成什么——如果你只需要等待一个特定的请求被触发,你可以使用:
page.waitForRequest 或 page.waitForResponse,无需担心保持浏览器打开。
【解决方案2】:
你可以试试await Task.Delay(-1)
【解决方案3】:
我尝试使用 await page.pause() 但它对我不起作用,但我发现了一种棘手的方法,而且效果很好,只需放在测试结束时:
await new Promise(() => {})
参考link。