NodeJS 如何防止浏览器在使用Javascript的Playwright测试中运行代码时关闭

uurity8g  于 2022-12-18  发布在  Node.js
关注(0)|答案(3)|浏览(522)

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

})
我试着为Python检查这个[链接](How to keep browser opening by the end of the code running with playwright-python?),但无法将其应用到JS。

jljoyd4f

jljoyd4f1#

类似于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();
});

不清楚您试图从代码段中完成什么-如果您只需要等待特定请求触发,您可以使用以下任一方法:waitForRequest或page.waitForResponse,这样就不必担心浏览器是否保持打开状态。

hyrbngr7

hyrbngr72#

你可以试试await Task.Delay(-1)

r1wp621o

r1wp621o3#

我尝试使用await page.pause(),但它不适合我,但我发现了棘手的方法,它工作得很好,只是把在您的测试结束:

await new Promise(() => {})

link上的参考。

相关问题