Диалоги
Введение
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() или что-то другое. Это связано с тем, что диалоги в веб-приложениях являются модальными и, следовательно, блокируют дальнейшее выполнение страницы до тех пор, пока они не будут обработаны.
В результате следующий фрагмент кода никогда не завершится:
предупреждениеНЕВЕРНО!
page.on('dialog', dialog => console.log(dialog.message()));
await page.getByRole('button').click(); // Will hang here примЕсли нет обработчика для page.on('dialog'), все диалоги автоматически закрываются.
Диалог beforeunload
Когда вызывается page.close() со значением runBeforeUnload, отличным от false, страница выполняет свои обработчики завершения работы. Это единственный случай, когда 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'); Это позволит дождаться открытия диалога печати после нажатия кнопки. Убедитесь, что скрипт оценивается до нажатия кнопки / после загрузки страницы.
© 2024 Microsoft
Licensed under the Apache License, Version 2.0.
https://playwright.dev/docs/dialogs