Version: 1.8.0

Dialogs

Playwright can interact with the web page dialogs such as alert, confirm, prompt as well as beforeunload confirmation.

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

You can register a dialog handler before the action that triggers the dialog to accept or decline it.

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

If your action, be it page.click(selector, **kwargs), page.evaluate(expression, **kwargs) or any other, results in a dialog, the action will stall until the dialog is handled. That's because dialogs in Web are modal and block further page execution until they are handled.

As a result, following snippet will never resolve:

:::warn WRONG! :::

:::warn WRONG! :::

page.click("button") # Will hang here
page.on("dialog", lambda dialog: dialog.accept())

API reference#

beforeunload dialog#

When page.close(**kwargs) is invoked with the truthy run_before_unload value, it page runs its unload handlers. This is the only case when page.close(**kwargs) does not wait for the page to actually close, because it might be that the page stays open in the end of the operation.

You can register a dialog handler to handle the beforeunload dialog yourself:

def handle_dialog(dialog):
assert dialog.type == 'beforeunload'
dialog.dismiss()
page.on('dialog', lambda: handle_dialog)
page.close(run_before_unload=True)