Entscheide die Dialogantwort vor dem Klick.
Beantworte die native Bestätigung bewusst und prüfe die tatsächlichen Folgen von Annahme und Abbruch.

Übersetzte Ausgabe. Technische Kennungen bleiben in ihrer ursprünglichen Form.

Der Test klickt auf Demoentwurf entfernen. Eine Browserbestätigung erscheint. Ein Listener protokolliert die Nachricht, antwortet aber nicht. Der Klick endet nie: Die Anwendung wartet auf eine Antwort, nicht auf einen weiteren Timeout. Ein beobachtender, aber nicht antwortender Handler kann einen einfachen Ablauf blockieren.
Dieser Leitfaden folgt der Dialog-Dokumentation von Playwright mit einem erfundenen lokalen Entwurf. Kein echtes Dokument wird gelöscht, kein Server aufgerufen. Geprüft werden beide Antworten auf confirm und ihre sichtbaren Ergebnisse. Die Antwortregel steht vor dem Auslösen fest.
Native Bestätigung ist kein Seitenmodal
Ein JavaScript-confirm gehört zur Browseroberfläche, nicht zu HTML-Elementen, die getByRole anklicken kann. Ein Modal der Anwendung ist anders: Es kann eine Dialogrolle und normale Schaltflächen besitzen. Bestimme zuerst den Mechanismus.
Ohne Listener schließt Playwright native Dialoge automatisch. Mit registriertem Listener muss dieser annehmen oder schließen. Wer nur die Nachricht protokolliert, kann die Aktion blockieren. Deshalb kann zusätzliche Debugausgabe das Testverhalten ändern.
Registriere die Antwort vor der Aktion
Installiere den Listener vor dem Klick. Wenn genau ein Dialog erwartet wird, nutze einen einmaligen Handler und mache die Antwort im Code sichtbar. Für Abbruch und Erhalt des Entwurfs:
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');Das Beispiel setzt die kontrollierte Vorlage und importiertes expect voraus. Der Handler antwortet zuerst; nach dem Klick werden Typ und Nachricht geprüft. Eine fehlgeschlagene Prüfung innerhalb des Handlers lässt so keinen unbeantworteten Dialog offen.
Für eine erlaubte Annahme registriere einen neuen Handler mit accept(), wiederhole auf einer frischen Vorlage und prüfe den lokalen Zustand. Nutze keinen pauschalen Alles-annehmen-Listener in anderen Abläufen. Eine spätere Bestätigung könnte eine andere zerstörerische Aktion verlangen und still ein Ja erhalten.
Abbruch braucht eine Produkterwartung
Schließen belegt die gegebene Antwort, nicht ihre Einhaltung durch die Anwendung. Prüfe, dass der Entwurf verfügbar bleibt und die nächste sinnvolle Aktion funktioniert. Im echten Produkt ergänze den unterstützten Nachweis, dass der Serverdatensatz nicht entfernt wurde.
Für Annahme gilt dieselbe Sorgfalt. Eine verschwundene Bestätigung beweist keine Löschung. Definiere kontrollierten Datensatz, erlaubte Testumgebung und Endergebnis. Die Demo ändert nur eine Statusanzeige; ihr Screenshot ist kein Servernachweis.
Unerwartete Dialoge sollen klar fehlschlagen, nicht durch einen breiten Handler verschwinden. Halte genug Kontext fest, ohne private Nachrichten zu veröffentlichen. Dialogtexte können Datensatznamen oder Kontodaten enthalten.
Begrenze die Lebensdauer des Handlers
Ein on()-Listener bleibt bis zur Entfernung oder zum Schließen der Seite aktiv. Das kann für eine bewusste Folge passen, doch Typen, Nachrichten und Antworten müssen feststehen. once() beschreibt einen einzelnen Dialog deutlicher.
Prompt-Dialoge ergänzen einen Eingabewert. beforeunload hat eigene dokumentierte Behandlung und Schließoptionen. Dieses Bestätigungsbeispiel deckt sie nicht automatisch ab. Lies die passende API, bevor du die Suite erweiterst.
Die Ergebnisnotiz kann knapp bleiben: erwartete Nachricht, Abbruch erhält, erlaubte Annahme entfernt, Servernachweis getrennt. Das hilft mehr als ein Protokoll des Erscheinungszeitpunkts.
AnyTest beschreibt überprüfbare Tests nach Anwendungserkundung. Frage, ob der Ablauf auf die erwartete Bestätigung antwortet oder alles akzeptiert. Eine AnyTest-Dialogfunktion wird nicht behauptet. Bewusste Antworten schützen die Bedeutung, anschließende Prüfungen die Funktion.
Häufige Fragen
Warum kann ein nur protokollierender Dialog-Listener den Klick blockieren?
Native Dialoge blockieren die Seite. Ein registrierter Listener muss annehmen oder schließen.
Beweist das Schließen der Bestätigung einen funktionierenden Abbruch?
Nein. Prüfe den erhaltenen Zustand und bei Bedarf die Servernachweise.