对话框
Playwright 可以与网页对话框交互,例如 alert、confirm、prompt 以及 beforeunload 确认。
alert(), confirm(), prompt() 对话框
默认情况下,Playwright 会自动关闭对话框,因此您不必处理它们。但是,您可以在触发对话框的操作之前注册一个对话框处理程序,以 dialog.accept([promptText]) 或 dialog.dismiss() 它。
page.on('dialog', dialog => dialog.accept());
await page.getByRole('button').click();
note
page.on('dialog') 监听器 必须处理 对话框。否则您的操作将停滞,无论是 locator.click([options]) 还是其他操作。这是因为 Web 中的对话框是模态的,因此会阻止进一步的页面执行,直到它们被处理。
因此,以下代码段将永远不会解析:
danger
错误!
page.on('dialog', dialog => console.log(dialog.message()));
await page.getByRole('button').click(); // 将在这里挂起
note
如果没有 page.on('dialog') 的监听器,所有对话框都会自动关闭。
beforeunload 对话框
当使用真值 runBeforeUnload 调用 page.close([options]) 时,页面将运行其 unload 处理程序。这是 page.close([options]) 不等待页面实际关闭的唯一情况,因为页面可能在操作结束时保持打开状态。
您可以注册一个对话框处理程序来自己处理 beforeunload 对话框:
page.on('dialog', async dialog => {
assert(dialog.type() === 'beforeunload');
await dialog.dismiss();
});
await page.close({ runBeforeUnload: true });