Décidez de la réponse au dialogue avant le clic.
Répondez délibérément à la confirmation native, puis vérifiez les effets de l'acceptation et de l'annulation.

Édition traduite. Les identifiants techniques restent sous leur forme originale.

Le test clique sur Supprimer le brouillon de démonstration. Une confirmation du navigateur apparaît. Un écouteur affiche son message sans répondre. Le clic ne finit jamais : l'application attend une réponse, pas un autre délai. Observer sans répondre peut bloquer un parcours simple.
Ce guide suit la documentation des dialogues de Playwright avec un brouillon local inventé. Il ne supprime aucun document réel et n'appelle aucun serveur. Il vérifie les deux réponses à confirm et leurs effets visibles. La politique de réponse est choisie avant l'ouverture.
La confirmation native n'est pas une fenêtre HTML
Un dialogue JavaScript confirm appartient au navigateur, pas aux éléments HTML que getByRole peut actionner. Une fenêtre modale de l'application est différente : elle peut avoir un rôle de dialogue et des boutons ordinaires. Identifiez d'abord le mécanisme.
Playwright ferme automatiquement les dialogues natifs sans écouteur. Dès qu'un écouteur existe, il doit accepter ou fermer le dialogue. Afficher uniquement le message peut bloquer l'action. Voilà pourquoi ajouter une trace de débogage peut changer le comportement.
Enregistrez la réponse avant l'action
Installez l'écouteur avant le clic. Pour un seul dialogue attendu, utilisez un écouteur à usage unique et rendez la réponse explicite. Pour annuler en conservant le brouillon :
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');L'exemple suppose la démonstration contrôlée et expect importé. L'écouteur répond d'abord; le test vérifie ensuite type et message. Une assertion qui échouerait dans l'écouteur avant sa réponse ne laisse donc pas le dialogue ouvert.
Pour une acceptation autorisée, ajoutez un nouvel écouteur appelant accept(), recommencez avec une démonstration neuve et vérifiez l'état local. Ne réutilisez pas un écouteur qui accepte tout sur des parcours différents. Une future confirmation pourrait demander une autre action destructive et recevoir un oui silencieux.
L'annulation exige une attente produit
Fermer le dialogue prouve la réponse donnée, pas que l'application l'a respectée. Vérifiez que le brouillon reste accessible et que l'action utile suivante fonctionne. Dans un produit réel, ajoutez la preuve prise en charge que le dossier serveur n'a pas été supprimé.
L'acceptation exige la même rigueur. La disparition de la confirmation ne prouve pas la suppression. Définissez le dossier contrôlé, l'environnement autorisé et le résultat final. La démonstration ne change qu'un état visible : sa capture n'est pas une preuve serveur.
Un dialogue inattendu doit entraîner un échec clair, pas disparaître grâce à un écouteur trop large. Gardez assez de contexte pour comprendre l'écart sans publier de texte privé. Les messages peuvent contenir noms de dossiers ou détails de compte.
Limitez la durée de l'écouteur
Un écouteur on() reste actif jusqu'à son retrait ou la fermeture de la page. Il peut convenir à une séquence délibérée, mais celle-ci doit préciser types, messages et réponses. once() exprime mieux le cas simple d'un seul dialogue.
Un prompt ajoute une valeur d'entrée à l'acceptation. beforeunload possède son propre traitement et ses options de fermeture documentées. Ne supposez pas que cet exemple les couvre. Consultez l'API correspondant à la fonction avant d'élargir la suite.
La note peut rester courte : message attendu, annulation conservant le brouillon, acceptation autorisée le supprimant, preuve serveur séparée. C'est plus utile qu'un journal indiquant seulement l'apparition du dialogue.
AnyTest décrit des tests révisables après exploration. Demandez si le parcours répond à la confirmation attendue ou accepte tout. Aucune fonction de dialogues d'AnyTest n'est revendiquée. Une réponse délibérée protège le sens du test; les assertions suivantes protègent la fonction.
Questions courantes
Pourquoi un écouteur qui journalise seulement peut-il bloquer le clic ?
Les dialogues natifs bloquent la page. Un écouteur enregistré doit accepter ou fermer le dialogue.
Fermer la confirmation prouve-t-il que l'annulation fonctionne ?
Non. Vérifiez l'état conservé et les preuves serveur quand la fonction réelle l'exige.