Перейти к основному содержимому

Диалоги

Введение

Playwright может взаимодействовать с диалогами веб-страниц, такими как alert, confirm, prompt, а также с подтверждением beforeunload. Для диалогов печати см. Печать.

Диалоги alert(), confirm(), prompt()

По умолчанию диалоги автоматически отклоняются Playwright, поэтому вам не нужно их обрабатывать. Однако вы можете зарегистрировать обработчик диалогов перед действием, которое вызывает диалог, чтобы либо Dialog.accept(), либо Dialog.dismiss() его.

page.onDialog(dialog -> dialog.accept());
page.getByRole(AriaRole.BUTTON).click();
примечание

Слушатель Page.onDialog(handler) должен обработать диалог. В противном случае ваше действие будет приостановлено, будь то Locator.click() или что-то еще. Это потому, что диалоги в вебе являются модальными и, следовательно, блокируют дальнейшее выполнение страницы, пока они не будут обработаны.

В результате следующий фрагмент никогда не разрешится:

warning

НЕПРАВИЛЬНО!

page.onDialog(dialog -> System.out.println(dialog.message()));
page.getByRole(AriaRole.BUTTON).click(); // Здесь произойдет зависание
примечание

Если нет слушателя для Page.onDialog(handler), все диалоги автоматически отклоняются.

Диалог beforeunload

Когда Page.close() вызывается с истинным значением setRunBeforeUnload, страница запускает свои обработчики выгрузки. Это единственный случай, когда Page.close() не ждет фактического закрытия страницы, потому что может случиться так, что страница останется открытой в конце операции.

Вы можете зарегистрировать обработчик диалогов, чтобы самостоятельно обработать диалог beforeunload:

page.onDialog(dialog -> {
assertEquals("beforeunload", dialog.type());
dialog.dismiss();
});
page.close(new Page.CloseOptions().setRunBeforeUnload(true));

Диалоги печати

Чтобы убедиться, что диалог печати через window.print был вызван, вы можете использовать следующий фрагмент:

page.navigate("<url>");

page.evaluate("(() => {window.waitForPrintDialog = new Promise(f => window.print = f);})()");
page.getByText("Print it!").click();

page.waitForFunction("window.waitForPrintDialog");

Это будет ожидать открытия диалога печати после нажатия кнопки. Убедитесь, что вы оценили скрипт перед нажатием кнопки / после загрузки страницы.