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

Диалоги

Введение

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

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

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

page.on('dialog', dialog => dialog.accept());
await page.getByRole('button').click();
примечание

Слушатель page.on('dialog') должен обрабатывать диалог. В противном случае ваше действие будет приостановлено, будь то locator.click() или что-то еще. Это связано с тем, что диалоги в вебе являются модальными и, следовательно, блокируют дальнейшее выполнение страницы, пока они не будут обработаны.

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

warning

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

page.on('dialog', dialog => console.log(dialog.message()));
await page.getByRole('button').click(); // Зависнет здесь
примечание

Если нет слушателя для page.on('dialog'), все диалоги автоматически отклоняются.

Диалог beforeunload

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

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

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

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

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

await page.goto('<url>');

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

await page.waitForFunction('window.waitForPrintDialog');

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