Diwall

Deutsch
Herunterladen 1.24.4

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 evaluer heraus 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_navigation nach dem Klick = nichts wurde gesendet.
  • Aus evaluer: .closest('form').submit(), immer.
  • Ein Zeitlimit ist kein Fehlschlag – prüfen, bevor Sie es erneut versuchen.