Das Element ist vorhanden, und der Klick bewirkt nichts
Die Aufnahme zeigt die Schaltfläche. Set-of-Mark nummeriert sie. Der Klick meldet Erfolg, und nichts bewegt sich. Drei Eskalationsstufen, in der Reihenfolge, in der Sie sie versuchen.
Das Symptom. Das Element ist auf der Aufnahme sichtbar. Set-of-Mark hat ihm
eine Nummer gegeben. Sie klicken es an, erhalten succes: true – und die Seite
bewegt sich nicht.
Oder Sie erhalten ein überschrittenes Zeitlimit bei einem Element, das Sie auf dem Screenshot bestens sehen.
Warum ein sichtbares Element sich nicht anklicken lässt
Playwright weigert sich, anzuklicken, was ein Mensch nicht anklicken könnte. Vor dem Handeln prüft es, ob das Element sichtbar, stabil und nicht von etwas anderem verdeckt ist. Diese Prüfung ist gewollt: Sie verhindert, dass Sie die Ebene eines Ladeindikators anklicken und glauben, die Schaltfläche dahinter getroffen zu haben.
Sie schlägt aber auch bei Dingen an, die ein Mensch sehr wohl anklicken kann.
Ein Schalter mit eigener CSS-Gestaltung, eine Schaltfläche in einem <dialog>,
der mit showModal() geöffnet wurde, ein Element unter einer dekorativen Ebene
ohne Zeigerereignisse – alle echt, alle interaktiv, alle abgewiesen.
Drei Stufen, in dieser Reihenfolge
1 – Einfacher Klick. Beginnen Sie immer hier. Wenn er funktioniert, zählt nichts anderes.
{"type": "cliquer", "selecteur": "#confirm"}
2 – force: true. Überspringt die Interaktionsprüfung von Playwright und
klickt trotzdem. Das ist die richtige Antwort für ein Element, das wirklich da
ist, aber an der Prüfung scheitert.
{"type": "cliquer", "selecteur": "#confirm", "force": true}
3 – repli_js: true. Eine zweite Stufe, kein Ersatz für die erste. Diwall
versucht es erneut mit einem JavaScript-Klick auf das Element selbst – dasselbe
el.click(), das Sie sonst von Hand in eine evaluer-Aktion schreiben würden,
eingebaut in cliquer.
{"type": "cliquer", "selecteur": "#dialog-confirm button[type=submit]",
"force": true, "repli_js": true}
Sie greift erst, wenn ein nativer Klick tatsächlich gescheitert ist. Die Option zu setzen, erzwingt nicht bei jedem Klick JavaScript.
Woran Sie sehen, welche Stufe gewirkt hat
Der Kompass sagt es Ihnen, und nur, wenn die Eskalation wirklich stattfand:
"boussole": {"repli_js_utilise": true}
Das Feld erscheint, wenn der Ausweichweg lief, nie nur, weil die Option gesetzt war. So erfahren Sie, ob Ihr Ziel wirklich Stufe 3 braucht – gut zu wissen, bevor Sie die Option auf jede Aktion des Szenarios kopieren.
Eine Unverträglichkeit, und sie scheitert laut
repli_js führt JavaScript aus, was –no-evaluer
für den ganzen Lauf verbietet. Ein Szenario, das beides kombiniert, wird bei
der Prüfung abgelehnt (arguments_incompatibles, Exit-Code 2),
bevor überhaupt ein Browser startet – nie still übergangen.
Der Fall, der gleich aussieht und es nicht ist
Scheitert der Klick an einem Element in einem Dialog, den Sie in einem
früheren Aufruf geöffnet haben, rettet Sie keine Eskalationsstufe. Der Dialog
ist weg: Eine Sitzung fortzusetzen lädt die Seite neu, und ein
showModal()-Dialog überlebt kein Neuladen.
Das ist ein anderes Problem mit einer anderen Lösung. Die Sitzung bleibt zwischen zwei Aufrufen nicht erhalten →
Kurz gesagt
- Erst der einfache Klick, dann
force: true, dannrepli_js: true. In dieser Reihenfolge. repli_jsbraucht ein echtes Scheitern, um auszulösen – es ist kein JS-Klick auf Zuruf.- Sehen Sie in
repli_js_utilisenach, was Ihr Ziel tatsächlich verlangt. - Ein Klick, der an einem Element aus einem früheren Aufruf scheitert, ist ein Sitzungsproblem, kein Klickproblem.