Dinoer

Das Element ist da, und der Klick bewirkt nichts

Der Selektor findet die Schaltfläche, der Klick meldet Erfolg, und nichts bewegt sich. Drei Stufen, in der Reihenfolge, in der man sie versucht.

Das Symptom. Der Selektor findet ein echtes, sichtbares Element. Sie klicken, erhalten succes: true, und die Seite bewegt sich nicht. Oder Sie erhalten ein Zeitlimit für ein Element, das laut --a11y vorhanden ist.

Warum ein echtes Element abgelehnt werden kann

Playwright weigert sich, zu klicken, was ein Mensch nicht klicken könnte. Vor dem Handeln prüft es, ob das Element sichtbar und stabil ist und nicht von etwas anderem verdeckt wird. Diese Prüfung bewahrt Sie davor, auf eine Ladeüberlagerung zu klicken und zu glauben, Sie hätten die Schaltfläche dahinter getroffen.

Sie lehnt aber auch Dinge ab, die ein Mensch sehr wohl klicken kann: einen mit eigenem CSS gezeichneten Schalter, eine Schaltfläche in einem mit showModal() geöffneten <dialog>, ein Element unter einer dekorativen Ebene. Alle echt, alle bedienbar, alle abgelehnt.

Drei Stufen, in dieser Reihenfolge

1. Einfacher Klick. Fangen Sie immer hier an. Wenn er funktioniert, ist alles andere unerheblich.

{"type": "cliquer", "selecteur": "#confirm"}

2. force: true. Überspringt die Prüfungen von Playwright und klickt trotzdem: die richtige Antwort für ein Element, das wirklich da ist, aber an den Prüfungen scheitert.

{"type": "cliquer", "selecteur": "#confirm", "force": true}

3. repli_js: true. Dinoer führt zuerst den nativen Klick aus (mit force, falls gesetzt); erst wenn Playwright einen Fehler auslöst, klickt es das Element per JavaScript (el.click()), so wie Sie es von Hand in einer evaluer-Aktion täten.

{"type": "cliquer", "selecteur": "#dialog-confirm button[type=submit]",
 "force": true, "repli_js": true}

Das Setzen der Option macht nicht jeden Klick zu einem JavaScript-Klick: Der Rückgriff läuft nur nach einem echten Fehlschlag.

Erkennen, welche Stufe gewirkt hat

Die Antwort sagt es, nur wenn der Rückgriff tatsächlich gelaufen ist:

"boussole": {"repli_js_utilise": true}

So erfahren Sie, ob Ihr Ziel Stufe 3 wirklich braucht, bevor Sie die Option auf jede Aktion des Szenarios kopieren.

Eine Unverträglichkeit, sofort gemeldet repli_js führt JavaScript aus, das –no-evaluer für den ganzen Lauf verbietet. Ein Aufruf, der beides kombiniert, wird mit arguments_incompatibles (Exit-Code 2) abgelehnt, bevor der Browser startet.

Der Fall, der gleich aussieht und es nicht ist

Scheitert der Klick an einem Element in einem Dialog, den Sie bei einem früheren Aufruf geöffnet haben, hilft keine Stufe. Der Dialog ist weg: Das Fortsetzen einer Sitzung lädt die Seite neu, und ein mit showModal() geöffneter Dialog übersteht kein Neuladen.

Das ist ein anderes Problem, mit einer anderen Lösung. Die Sitzung überdauert keine zwei Aufrufe →

Kurz gesagt

  • Versuchen Sie den einfachen Klick, dann force: true, dann repli_js: true, in dieser Reihenfolge.
  • repli_js braucht einen echten Fehlschlag, um zu laufen; es ist kein JavaScript-Klick auf Abruf.
  • Lesen Sie repli_js_utilise, um zu erfahren, was Ihr Ziel wirklich braucht.
  • Ein Klick, der an einem Element aus einem früheren Aufruf scheitert, ist ein Sitzungsproblem, kein Klickproblem.