如何在 Puppeteer 中检测警报

4

如何检测页面导航后是否显示带有某些消息的警报。

Puppeteer能否检测或识别页面是否显示了警报框。

我尝试过

page.on('popup', ()=> {
   console.log('popup detected');
});

另外,

page.on('dialog', ()=> {
   console.log('popup detected');
});

1
事件处理程序必须在执行 page.goto 调用之前进行注册。这可能是您的问题吗? - Thomas Dondorf
我不明白你的意思,能否请你用一小段代码示例来演示一下? - Sahil Paudel
我的意思是,你发布的代码需要在 page.goto 之前调用。也许你可以发布你的完整代码? - Thomas Dondorf
return {code: 444, status: 'Incorrect credentials'} }); console.log(status.code); await this.page.goto(stepOneUrl, {waitUntil: 'load'});``` 你能告诉我如何返回所需的对象吗?因为我目前的方法不起作用。 感谢,现在能够检测到弹出窗口了。 - Sahil Paudel
很高兴它起作用了,我已将其添加为答案。如果我正确理解您的代码,您可以在外部范围中设置一个变量。但我不确定我是否完全理解代码试图做什么。 - Thomas Dondorf
2个回答

2

正如评论中所说:如果在调用page.goto之后注册事件处理程序(您的代码),则事件已在您侦听事件之前触发。

因此,请确保在您的代码之后调用page.goto

最初的回答:

如评论所述:如果在调用 page.goto 后注册事件处理程序(即您的代码),则事件在您监听事件之前已经被触发。

因此,请确保在调用 page.goto 之前注册事件处理程序。


1
这是我的两分钱:
 private async gotoPage(path):Promise<Response|Result> {
        return new Promise(async(resolve, reject) => {
            await Promise.all([
                this.page.on('dialog', async (dialog) => {
                    await dialog.dismiss().catch(() => {
                        console.log(dialog.message());
                        return new Result(TestStatus.FAIL, dialog.message());
                    });
                }),
                this.page.goto(`${this.baseURL}${path}`),
                this.page.waitForNavigation({ waitUntil: 'load' })]).then(
                async () => {
                    resolve(new Result(TestStatus.PASS, `Loading to path success : ${path}`));
                },
                async () => {
                    reject(new Result(TestStatus.FAIL, `Could not GotoPage : ${path}`));
                });
        });
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接