Dinoer

Das Formular meldet einen Erfolg und sendet niemals Daten ab

Der Klick funktioniert, das Szenario endet grün, und der Server empfängt nichts. Zwei verschiedene Ursachen führen zu genau diesem Ergebnis – und die Lösung für eine behebt nicht die andere.

Das Symptom. Sie füllen ein Formular aus, klicken auf “Senden” und erhalten succes: true – und das Ziel bleibt unverändert. Das Anzeigen der Seite danach zeigt dieselbe Seite oder die Startseite, aber niemals die erwartete Ergebnis-Seite.

Zwei voneinander unabhängige Ursachen führen zu diesem identischen Ergebnis. Unterscheiden Sie sie voneinander, bevor Sie versuchen, das Problem zu beheben, sonst wenden Sie möglicherweise die falsche Lösung an.

Ursache 1 – Der Browser hat es blockiert und das leise gesagt

HTML5-Validierung. Ein Feld, das mit required markiert ist, ist leer oder enthält mit type="email" etwas, das kein gültiger Wert ist. Der Browser verhindert den Absenden des Formulars und zeigt eine kleine, native Meldung – Bitte füllen Sie dieses Feld aus – an, die an dem entsprechenden Eingabefeld befestigt ist.

Dinoer meldet den Klick als erfolgreich, weil er es auch war: der Klick fand statt. Der Browser hat einfach beschlossen, ihn nicht zu berücksichtigen.

Wie man es erkennt. Das attendre_navigation direkt nach dem Klick wird in ~0 ms zurückgegeben. Nichts wurde navigiert, weil nichts gesendet wurde. Lesen Sie das resultierende a11y_tree – der Text des Bubbles ist darin enthalten, leicht zu übersehen, wenn Sie nur succes überprüfen.

Die Lösung. Füllen Sie das fehlende Feld aus. Wenn das Feld absichtlich leer bleiben soll, senden Sie das Formular direkt ab und umgehen die lokale Validierung:

{"type": "evaluer",
 "script": "document.querySelector('#my-form').submit()"}

Ursache 2 – Ein JavaScript-Klick ist keine Absendung

Das ist überraschender. Der Aufruf von .click() auf einem Absende-Button aus JavaScript löst das DOM click Ereignis aus, garantiert aber nicht die HTTP-Übertragung des übergeordneten Formulars. Browser behandeln einen simulierten Klick anders als einen vom Benutzer initiierten Klick, insbesondere wenn Validierungsfunktionen angehängt sind.

Beobachtet bei einem echten WordPress-Theme-Update: Das Szenario endete succes: true, die resultierende Seite zeigte die WordPress-Startseite, und kein Theme wurde aktualisiert.

{"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 Submit-Methode des Browsers direkt auf. .click() bei einem Submit-Button fragt höflich nach; .submit() erledigt die Aufgabe.

Die Regel, die es wert ist, beibehalten zu werden

Um ein Formular von evaluer, immer zu übermitteln, verwenden Sie .closest(‘form’).submit() – niemals .click() auf der Übermittlungsschaltfläche.

Und wenn Sie sich überhaupt nicht in evaluer befinden, bevorzugen Sie einen echten cliquer auf der Schaltfläche: Der native Klick von Playwright verhält sich wie der eines Benutzers – genau das, was ein synthetischer Klick nicht tut.

Bevor Sie Schlussfolgerungen ziehen:

Ein Eintrag, der scheinbar fehlgeschlagen ist, könnte erfolgreich gewesen sein. Ein langsamer POST-Vorgang – ein Klonen, ein Importieren oder alles, was mehrere Sekunden dauert – kann dazu führen, dass die Zeitüberschreitung erreicht wird, während der Server weiterläuft und die Arbeit abschließt. TimeoutError bei einem Klick bedeutet, dass Playwright das Warten abgebrochen hat, nicht, dass nichts passiert ist.

Prüfen Sie das Ziel, bevor Sie es erneut versuchen, sonst führen Sie die Operation zweimal aus. Die Operation, die eine Weile dauert →

Kurz gesagt

  • Zwei Ursachen, ein Symptom: Die native Validierung blockierte es, oder ein JavaScript-Fehler .click() verhinderte den Versand.
  • ~0 ms auf attendre_navigation nach dem Klick = nichts wurde gesendet.
  • Von evaluer: .closest('form').submit(), immer.
  • Ein Timeout ist kein Fehler – überprüfen Sie dies, bevor Sie erneut versuchen.