我正在尝试在浏览器中记录网络调用。对于我的用例,我要求浏览器处于打开状态,并且只能使用脚本关闭。我目前正在使用 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。
与 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();
});
不清楚您想要从代码片段中完成什么 - 如果您只需要等待特定请求触发,您可以使用以下任一方法: page.waitForRequest 或 page.waitForResponse,无需担心浏览器保持打开状态。
你可以试试
await Task.Delay(-1)
我已经成功使用下面的
afterEach
代码。基本,但查看测试是否报告错误,然后禁用测试超时并添加 @joyful 的未解决承诺以简单地保持位置。显然,它不能并行工作或允许完整的测试套件运行。注意: afterEach
似乎在任何错误条件输出之前运行,因此我们需要手动输出这些错误以查看出了什么问题。这些似乎只对他们的堆栈有用。
test.afterEach(async ({ context, extensionId }, testInfo) => {
const notPassed = testInfo.status !== 'passed';
const hasError = testInfo.error !== undefined;
const stayOpen = (notPassed || hasError);
console.log(...testInfo.errors.map((e) => e.stack));
if (stayOpen) {
console.error('\n*** Error detected, holding open browser for debugging. Press CTRL+C to exit. ***');
testInfo.setTimeout(0); // Disables any test timeout
await new Promise(() => {}); // Never resolves
}
});
如果您使用启用了“Playwright Test for VSCode”扩展的 VSCode (https://marketplace.visualstudio.com/items?itemName=ms-playwright.playwright)