如何在 JavaScript 中的 Playwright Tests 中运行代码时防止浏览器关闭

问题描述 投票:0回答:6

我正在尝试在浏览器中记录网络调用。对于我的用例,我要求浏览器处于打开状态,并且只能使用脚本关闭。我目前正在使用 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
6个回答
5
投票

我尝试使用

await page.pause()
,但它对我不起作用,但我找到了棘手的方法,而且效果很好,只需放在测试结束即可:

await new Promise(() => {})

参考链接


4
投票

与 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.waitForRequestpage.waitForResponse,无需担心浏览器保持打开状态。


2
投票

你可以试试

await Task.Delay(-1)


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
  }
});

0
投票

尝试设置

PW_TEST_REUSE_CONTEXT
环境变量。例如,在 VS 代码中: enter image description here


0
投票

如果您使用启用了“Playwright Test for VSCode”扩展的 VSCode (https://marketplace.visualstudio.com/items?itemName=ms-playwright.playwright)

  • 您可以勾选“显示浏览器”,它将保持浏览器打开状态。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.