Das Formular meldet Erfolg und wird nie abgeschickt
Der Klick gelingt, das Szenario endet grün, und der Server hat nichts erhalten. Zwei verschiedene Ursachen führen genau zu diesem Ergebnis – und die Lösung für die eine behebt die andere nicht.
Das Symptom. Sie füllen ein Formular aus, klicken auf Absenden, erhalten
succes: true – und das Ziel ist unverändert. Die danach gemachte Aufnahme
zeigt dieselbe Seite oder die Startseite, nie die erwartete Ergebnisseite.
Zwei voneinander unabhängige Ursachen führen zu genau diesem Ergebnis. Unterscheiden Sie sie, bevor Sie zu einer Lösung greifen, sonst wenden Sie die falsche an.
Ursache 1 – der Browser hat blockiert, und es leise gesagt
HTML5-Validierung. Ein als required markiertes Feld ist leer, oder ein
type="email" enthält etwas, das keine Adresse ist. Der Browser verweigert das
Absenden und zeigt eine kleine native Sprechblase – Bitte füllen Sie dieses
Feld aus –, die am betroffenen Feld hängt.
Diwall meldet den Klick als erfolgreich, weil er es war: Der Klick fand statt. Der Browser hat nur abgelehnt, darauf zu reagieren.
Woran man es erkennt. Das attendre_navigation direkt nach dem Klick
kehrt nach ~0 ms zurück. Nichts hat navigiert, weil nichts gesendet wurde. Und
die Sprechblase ist auf der Aufnahme, klein und leicht zu übersehen – sehen Sie
sich die Aufnahme in voller Größe an, bevor Sie etwas schließen.
Die Lösung. Füllen Sie das fehlende Feld aus. Muss das Feld absichtlich leer bleiben, schicken Sie das Formular direkt ab und umgehen die native Validierung:
{"type": "evaluer",
"script": "document.querySelector('#my-form').submit()"}
Ursache 2 – ein JavaScript-Klick ist kein Absenden
Diese überrascht mehr. .click() aus JavaScript auf einer Absende-Schaltfläche
löst das DOM-Ereignis click aus, garantiert aber nicht das HTTP-Absenden des
umgebenden Formulars. Browser behandeln einen synthetischen Klick anders als
einen Klick des Benutzers, besonders wenn Validierungs-Handler angehängt sind.
Beobachtet bei einem echten Theme-Update in einem Content-Management-System:
Das Szenario endete mit succes: true, die Aufnahme zeigte die Startseite der
Website, und kein Theme war aktualisiert worden.
{"type": "evaluer",
"script": "document.querySelector('input[name=upgrade]').click()"}
Die Lösung – immer in dieser Form:
{"type": "evaluer",
"script": "document.querySelector('input[value=\"theme-slug\"]').closest('form').submit()"}
.closest('form').submit() ruft die native Absendemethode des Browsers direkt
auf. .click() auf einer Absende-Schaltfläche fragt höflich; .submit() tut
es.
Die Regel, die bleiben sollte
Um ein Formular aus
evaluerheraus abzuschicken, verwenden Sie immer.closest(‘form’).submit()– nie.click()auf der Absende-Schaltfläche.
Und wenn Sie gar nicht in evaluer sind, nehmen Sie lieber ein echtes
cliquer auf die Schaltfläche: Der native Klick von Playwright verhält sich wie
der eines Benutzers – genau das, was ein synthetischer Klick nicht tut.
Bevor Sie schließen
Ein Absenden, das gescheitert scheint, kann gelungen sein. Ein langsamer POST –
ein Klon, ein Import, alles, was Dutzende Sekunden dauert – kann ins Zeitlimit
laufen, während der Server weitermacht und die Arbeit beendet. TimeoutError
bei einem Klick heißt, dass Playwright nicht mehr gewartet hat, nicht, dass
nichts passiert ist.
Prüfen Sie das Ziel, bevor Sie es erneut versuchen – sonst führen Sie den Vorgang zweimal aus. Die Operation, die Minuten dauert →
Kurz gesagt
- Zwei Ursachen, ein Symptom: Die native Validierung hat blockiert, oder ein
JavaScript-
.click()hat nie abgeschickt. - ~0 ms bei
attendre_navigationnach dem Klick = nichts wurde gesendet. - Aus
evaluer:.closest('form').submit(), immer. - Ein Zeitlimit ist kein Fehlschlag – prüfen, bevor Sie es erneut versuchen.