Version: 1.9.0

Dialogs

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

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

By default, dialogs are auto-dismissed by Playwright, so you don't have to handle them. However, you can register a dialog handler before the action that triggers the dialog to accept or decline it.

page.on('dialog', dialog => dialog.accept());
await page.click('button');
note

page.on('dialog') listener must handle the dialog. Otherwise your action will stall, be it page.click(selector[, options]), page.evaluate(pageFunction[, arg]) or any other. 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! :::

page.on('dialog', dialog => console.log(dialog.message()));
await page.click('button'); // Will hang here
note

If there is no listener for page.on('dialog'), all dialogs are automatically dismissed.

API reference#

beforeunload dialog#

When page.close([options]) is invoked with the truthy runBeforeUnload value, it page runs its unload handlers. This is the only case when page.close([options]) 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:

page.on('dialog', async dialog => {
assert(dialog.type() === 'beforeunload');
await dialog.dismiss();
});
await page.close({runBeforeUnload: true});