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: truey luegorepli_js: true, en ese orden. repli_jsnecesita un fallo real para ejecutarse; no es un clic de JavaScript a demanda.- Lea
repli_js_utilisepara 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.