Diwall

Español
Descargar 1.24.4

El elemento está ahí, y el clic no hace nada

La captura muestra el botón. Set-of-Mark lo numera. El clic informa de éxito, y nada se mueve. Tres niveles de recurso, en el orden en que probarlos.

El síntoma. El elemento se ve en la captura. Set-of-Mark le dio un número. Hace clic, obtiene succes: true — y la página no se mueve.

O bien obtiene un tiempo agotado sobre un elemento que ve perfectamente en la captura.

Por qué un elemento visible puede no dejarse pulsar

Playwright se niega a pulsar lo que una persona no podría pulsar. Antes de actuar comprueba que el elemento es visible, estable y que nada lo tapa. Esa comprobación es una virtud: le impide pulsar la capa de un indicador de carga creyendo que acierta en el botón de detrás.

También salta con cosas que una persona sí puede pulsar. Un interruptor con un estilo CSS propio, un botón dentro de un <dialog> abierto con showModal(), un elemento bajo una capa decorativa sin eventos de puntero — todos reales, todos interactivos, todos rechazados.

Tres niveles, en este orden

1 — Clic simple. Empiece siempre aquí. Si funciona, lo demás no importa.

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

2 — force: true. Se salta la comprobación de interactividad de Playwright y pulsa de todos modos. Es la respuesta correcta para un elemento que está de verdad pero no supera la comprobación.

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

3 — repli_js: true. Un segundo nivel, no un sustituto del primero. Diwall lo reintenta con un clic JavaScript sobre el propio elemento — el mismo el.click() que si no escribiría a mano en una acción evaluer, integrado en cliquer.

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

Solo se ejecuta después de que un clic nativo haya fallado realmente. Poner la opción no fuerza JavaScript en cada clic.

Cómo saber qué nivel hizo el trabajo

La brújula se lo dice, y solo cuando el recurso ocurrió de verdad:

"boussole": {"repli_js_utilise": true}

El campo aparece cuando se ejecutó el recurso alternativo, nunca solo porque la opción estuviera puesta. Así sabe si su destino necesita realmente el nivel 3 — conviene saberlo antes de copiar esa opción en cada acción del escenario.

Una incompatibilidad, y falla de forma visible repli_js ejecuta JavaScript, que –no-evaluer prohíbe durante toda la ejecución. Un escenario que combine ambos se rechaza en la validación (arguments_incompatibles, código 2) antes de que arranque ningún navegador — nunca se ignora en silencio.

El caso que parece el mismo y no lo es

Si el clic falla sobre un elemento dentro de un diálogo que abrió en una llamada anterior, ningún nivel le salvará. El diálogo ya no existe: reanudar una sesión recarga la página, y un diálogo showModal() no sobrevive a una recarga.

Es otro problema, con otra solución. La sesión no se mantiene entre dos llamadas →

En resumen

  • Pruebe el clic simple, luego force: true, luego repli_js: true. En ese orden.
  • repli_js necesita un fallo real para activarse — no es un clic JavaScript a demanda.
  • Mire repli_js_utilise para saber lo que su destino exige realmente.
  • Un clic que falla sobre un elemento de una llamada anterior es un problema de sesión, no de clic.