我正在测试 puppet 戏中的警告框:
msg = '';
await page.goto('http://localhost:8080/', {
waitUntil: 'networkidle2'
});
await page.$eval('#value', el => el.value = '<script>alert("BLEH")</script>');
page.on('dialog', async dialog => {
msg = dialog.message();
await dialog.dismiss()
})
// submit comment
await page.$eval('#message', form => form.submit());
expect(msg).toEqual('BLEH');
然而,它似乎没有在警告框中返回消息(即使我已经确认它可以手动操作)。你知道为什么page.on('dialog', async dialog => {
没有被输入吗?
1条答案
按热度按时间anhgbhbe1#
我不确定您的页面发生了什么--看起来您是在测试XSS,但无论如何,您可以承诺对话框处理程序解析为
dialog.message()
值,如本例所示。注意,我是用Enter键提交表单的--调用
form.submit()
似乎覆盖了默认的阻止机制,杀死了页面,但是如果它在您的站点上工作,那么这种修改不会改变下面代码的基本点。请记住
await dialogDismissed;
永远不会超时,因为它不是Puppeteer函数。如果您希望这样,请在promise中调用setTimeout(reject, someDelay)
。