Dinoer

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

El selector encuentra el botón, el clic informa de éxito y nada se mueve. Tres niveles, en el orden en que conviene probarlos.

El síntoma. El selector encuentra un elemento real y visible. Hace clic, obtiene succes: true y la página no se mueve. O bien obtiene un tiempo agotado sobre un elemento que --a11y muestra que existe.

Por qué se puede rechazar un elemento real

Playwright se niega a hacer clic en 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 evita que haga clic en una capa de carga creyendo que ha alcanzado el botón de detrás.

También rechaza cosas que una persona sí puede pulsar: un interruptor dibujado con CSS propio, un botón dentro de un <dialog> abierto con showModal(), un elemento bajo una capa decorativa. Todos reales, todos utilizables, 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 las comprobaciones de Playwright y hace clic de todos modos: la respuesta adecuada para un elemento que está de verdad pero no supera las comprobaciones.

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

3. repli_js: true. Dinoer hace primero el clic nativo (con force si se ha indicado); solo si Playwright lanza un error hace clic en el elemento con JavaScript (el.click()), como lo haría usted a mano en una acción evaluer.

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

Indicar la opción no convierte cada clic en un clic de JavaScript: la alternativa solo se ejecuta tras un fallo real.

Saber qué nivel hizo el trabajo

La respuesta lo indica, solo cuando la alternativa se ejecutó de verdad:

"boussole": {"repli_js_utilise": true}

Así sabe si su objetivo necesita realmente el nivel 3 antes de copiar la opción en todas las acciones del escenario.

Una incompatibilidad, avisada de inmediato repli_js ejecuta JavaScript, que –no-evaluer prohíbe en toda la ejecución. Una llamada que combina ambos se rechaza con arguments_incompatibles (código de salida 2) antes de arrancar el navegador.

El caso que se parece y no es el mismo

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

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

En resumen

  • Pruebe el clic simple, luego force: true y luego repli_js: true, en ese orden.
  • repli_js necesita un fallo real para ejecutarse; no es un clic de JavaScript a demanda.
  • Lea repli_js_utilise para saber lo que su objetivo necesita de verdad.
  • Un clic que falla sobre un elemento de una llamada anterior es un problema de sesión, no de clic.