Playwright 可以与网页对话框交互,例如 alert、confirm、prompt,以及 beforeunload 确认对话框。关于打印对话框,请参见下方的「打印对话框」。
alert()、confirm()、prompt() 对话框
Section titled “alert()、confirm()、prompt() 对话框”默认情况下,Playwright 会自动关闭对话框,因此你不必手动处理它们。不过,你可以在触发对话框的操作之前注册一个对话框处理器,用它来 accept() 或 dismiss() 该对话框。
page.on('dialog', dialog => dialog.accept());await page.getByRole('button').click();因此,下面的代码片段永远不会完成:
beforeunload 对话框
Section titled “beforeunload 对话框”当调用 page.close() 并传入 truthy 的 runBeforeUnload 值时,页面会运行它的 unload 处理程序。这是 page.close() 不等待页面真正关闭的唯一情况,因为操作结束时页面最终可能仍然保持打开状态。
你可以注册一个对话框处理器,自己处理 beforeunload 对话框:
page.on('dialog', async dialog => { assert(dialog.type() === 'beforeunload'); await dialog.dismiss();});await page.close({ runBeforeUnload: true });为了断言通过 window.print 触发了打印对话框,可以使用下面的代码片段:
await page.goto('<url>');
await page.evaluate('(() => {window.waitForPrintDialog = new Promise(f => window.print = f);})()');await page.getByText('Print it!').click();
await page.waitForFunction('window.waitForPrintDialog');这会在按钮被点击后等待打印对话框打开。请确保在点击按钮之前、页面加载之后执行该脚本。