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, dannrepli_js: true, in dieser Reihenfolge. repli_jsbraucht 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.