Skip to main content
Version: 1.12.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.Dialog += (_, dialog) => dialog.AcceptAsync();
await page.ClickAsync("button");
note

event Page.Dialog listener must handle the dialog. Otherwise your action will stall, be it Page.ClickAsync(selector, options), Page.EvaluateAsync(expression, 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:

warning

WRONG!

page.Dialog += (_, dialog) => Console.WriteLine(dialog.Message);
await page.ClickAsync("button"); // Will hang here
note

If there is no listener for event Page.Dialog, all dialogs are automatically dismissed.

API reference#

beforeunload dialog#

When Page.CloseAsync(options) is invoked with the truthy runBeforeUnload value, it page runs its unload handlers. This is the only case when Page.CloseAsync(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.Dialog += (_, dialog) =>
{
Assert.Equal("beforeunload", dialog.Type);
dialog.DismissAsync();
};
await page.CloseAsync(runBeforeUnload: true);