Визначте відповідь діалогу до кліку.
Свідомо обробіть нативне підтвердження та перевірте реальні наслідки згоди й скасування.

Перекладне видання. Технічні ідентифікатори залишаються в оригінальній формі.

Тест натискає Видалити демонстраційну чернетку. З'являється підтвердження браузера. Обробник записує повідомлення, але не відповідає. Клік не завершується: застосунок чекає відповіді, а не іншого тайм-ауту. Спостереження без відповіді може заблокувати простий сценарій.
Посібник дотримується документації діалогів Playwright на вигаданій локальній чернетці. Реальні документи не видаляються, запитів до сервера немає. Перевіряються обидві відповіді confirm та видимі наслідки. Правило відповіді обирається до відкриття.
Нативне підтвердження не є вікном сторінки
JavaScript confirm належить браузеру, не HTML-елементам, які може натиснути getByRole. Модальне вікно застосунку інше: воно може мати роль діалогу й звичайні кнопки. Спочатку визначте механізм.
Без обробника Playwright автоматично відхиляє нативні діалоги. Якщо обробник існує, він має прийняти чи відхилити діалог. Лише запис повідомлення може заблокувати дію. Тому додавання налагоджувального виводу здатне змінити поведінку тесту.
Зареєструйте відповідь до дії
Додайте обробник перед кліком. Для одного очікуваного діалогу використовуйте одноразовий обробник і явно вкажіть відповідь. Для скасування зі збереженням чернетки:
let observed;
page.once('dialog', async dialog => {
observed = { type: dialog.type(), message: dialog.message() };
await dialog.dismiss();
});
await page.getByRole('button', { name: 'Remove demo draft' }).click();
expect(observed).toEqual({ type: 'confirm', message: 'Remove demo draft?' });
await expect(page.getByRole('status')).toHaveText('Demo draft kept');Приклад потребує контрольованої сторінки й імпортованого expect. Обробник відповідає спочатку, а після кліку тест перевіряє тип і повідомлення. Невдала перевірка всередині обробника не залишить діалог без відповіді.
Для дозволеної згоди додайте новий обробник з accept(), повторіть на свіжому прикладі й перевірте локальний стан. Не використовуйте правило прийняття всіх діалогів у різних сценаріях. Наступне підтвердження може просити іншу руйнівну дію й тихо отримати згоду.
Скасування потребує продуктового очікування
Відхилення доводить надану відповідь, не її дотримання застосунком. Перевірте доступність чернетки й наступної корисної дії. У реальному продукті додайте підтримуваний доказ, що серверний запис не видалено.
Згода вимагає такої самої точності. Зникнення підтвердження не доводить видалення. Встановіть контрольований запис, дозволене середовище та кінцевий результат. Приклад змінює лише статус, тож його знімок не доводить серверних наслідків.
Неочікувані діалоги мають давати ясний збій, а не зникати завдяки широкому обробнику. Збережіть контекст відмінності без публікації приватного тексту. Повідомлення можуть містити назви записів і дані облікових записів.
Обмежте тривалість обробника
Обробник on() активний до видалення або закриття сторінки. Це може підходити навмисній послідовності, але визначте типи, повідомлення й відповіді. once() краще описує один очікуваний діалог.
Prompt додає введене значення до прийняття. beforeunload має власну документовану обробку й параметри закриття. Приклад confirm не охоплює їх автоматично. Прочитайте відповідний API перед розширенням набору.
Нотатка може бути короткою: очікуване повідомлення, скасування зберігає, дозволена згода видаляє, серверний доказ окремо. Це корисніше журналу лише про появу діалогу.
AnyTest описує тести для огляду після дослідження застосунку. Запитайте, чи сценарій відповідає конкретному підтвердженню, чи приймає все. Функція діалогів AnyTest не заявляється. Свідомі відповіді зберігають зміст тесту, наступні перевірки захищають функцію.
Загальні запитання
Чому обробник, який лише записує журнал, блокує клік?
Нативні діалоги блокують сторінку. Зареєстрований обробник має прийняти чи відхилити діалог.
Чи доводить закриття підтвердження дієве скасування?
Ні. Перевірте збережений стан і за потреби докази сервера.