Skip to main content

对话框

Playwright 可以与网页对话框进行交互,例如 alertconfirmprompt 以及 beforeunload 确认。

alert(), confirm(), prompt() dialogs

默认情况下,Playwright 会自动关闭对话框,因此您不必处理它们。但是,您可以在触发对话框的操作之前注册对话框处理程序,以 dialog.accept(**kwargs)dialog.dismiss() 它。

page.on("dialog", lambda dialog: dialog.accept())
page.get_by_role("button").click()
note

page.on("dialog") 监听器 必须处理 对话框。否则您的操作将停滞,无论是 locator.click(**kwargs) 还是其他操作。这是因为 Web 中的对话框是模态的,因此在处理它们之前会阻止进一步的页面执行。

因此,以下代码片段将永远不会解析:

danger

错误!

page.on("dialog", lambda dialog: print(dialog.message))
page.get_by_role("button").click() # Will hang here
note

如果没有 page.on("dialog") 的监听器,所有对话框都会自动关闭。

beforeunload dialog

当使用真值 run_before_unload 调用 page.close(**kwargs) 时,页面将运行其卸载处理程序。这是 page.close(**kwargs) 不等待页面实际关闭的唯一情况,因为页面可能在操作结束时保持打开状态。

您可以注册一个对话框处理程序来自己处理 beforeunload 对话框:

def handle_dialog(dialog):
assert dialog.type == 'beforeunload'
dialog.dismiss()

page.on('dialog', lambda: handle_dialog)
page.close(run_before_unload=True)