Diwall

Deutsch
Herunterladen 1.24.4

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, dann repli_js: true. In dieser Reihenfolge.
  • repli_js braucht ein echtes Scheitern, um auszulösen – es ist kein JS-Klick auf Zuruf.
  • Sehen Sie in repli_js_utilise nach, was Ihr Ziel tatsächlich verlangt.
  • Ein Klick, der an einem Element aus einem früheren Aufruf scheitert, ist ein Sitzungsproblem, kein Klickproblem.