Diwall

Español
Descargar 1.24.4

Hizo clic, pero no en el elemento que usted quería

Tres botones idénticos, una lista que ganó cuatro filas, un banner que se cerró entre la captura y el clic. El número era correcto; el destino, no.

El síntoma. El clic funciona. Pasa algo. No es lo que usted quería — se clonó el dominio equivocado, se borró la fila equivocada, se abrió el diálogo equivocado.

Ningún error, porque mecánicamente nada fue mal. Diwall pulsó lo que usted designó. Usted designó lo que no era.

Causa 1 — varios elementos coinciden con su selector

Una página con tres botones «Clone», uno por dominio. Este selector toma el primero en el orden del DOM:

{"type": "cliquer", "selecteur": "button:has-text('Clone')"}

Observado de verdad: el clonado arrancó sobre otro dominio distinto del previsto, y solo el registro del servidor lo dijo. Una inversión silenciosa.

La solución — designar, no describir. O bien precisa el selector con algo propio de esa fila:

{"type": "cliquer", "selecteur": "button[title='Clone example-two']"}

O bien usa el número de Set-of-Mark, único por construcción: tres botones idénticos reciben tres números distintos.

Causa 2 — la página cambió, así que el número se movió

Set-of-Mark numera los elementos en el orden del DOM. Añada cuatro filas a la lista por encima de su destino, y su destino se desplaza cuatro puestos. Un procedimiento validado en una página con una fila falla en la misma página con cinco — mismo código, mismo selector, otro resultado.

Peor: algo puede aparecer o desaparecer entre su captura y su clic. Un banner de cookies que se cierra, un modal que se abre. El número que leyó en la captura ya no designa el mismo elemento cuando se ejecuta el clic.

La solución, en dos niveles.

Vuelva a capturar Set-of-Mark tras cualquier acción que cambie el DOM, y lea los nuevos números. Eso reduce la ventana; no la cierra en una página que no deja de cambiar.

Para cerrarla, capture Set-of-Mark dentro del propio escenario, antes del primer cliquer_som:

diwall-shot --url https://target.local/ --som --guide-version 1.3 \
  --actions '[{"type":"capturer","nom":"avant","som":true},{"type":"cliquer_som","id":5}]'

Desde la 1.24.0, la resolución por defecto es híbrida. Cuando existe un marcador data-dw-som-id — puesto por un capturer con "som": true antes en el mismo escenario —, Diwall resuelve por ese marcador en lugar de reindexar el DOM en su estado actual: id: 5 es ese elemento, se haya movido lo que se haya movido a su alrededor. Sin captura previa en el escenario, vuelve a la reindexación de siempre, sin cambios. En ambos casos la respuesta indica qué vía se usó, en boussole.respect.som_resolution (stable, brut o brut_sans_reference), y señala cualquier desacuerdo entre las dos vías en boussole.respect.som_derive_detectee — la deriva ya nunca es silenciosa.

El marcador no sobrevive de una llamada shot.py a otra (cada una recarga la página): es la razón de fondo por la que una secuencia con estado va en un solo escenario. --som-brut fuerza la reindexación sola de antes de la 1.24.0; --som-rafraichir se conserva como alias sin efecto.

Identificar por el contenido, no por la posición

«El más reciente es el número 7» es verdad hasta que alguien crea uno nuevo.

Cuando su destino lleva algo identificativo — una marca de hora, un slug, un identificador en un atributo value o data-* —, Set-of-Mark ya se lo da. elements_som[].texte lo expone, y puede filtrar el JSON directamente:

{"id": 12, "tag": "INPUT", "texte": "clone-2026-08-01-0930"}

Elija el número comparando ese texto, no contando filas. Sin modelo de visión, sin heurística que se rompa la semana que viene. La misma idea sirve para comprobar después — un evaluer devuelve los elementos restantes en JSON, comparables por programa:

{"type": "evaluer",
 "script": "Array.from(document.querySelectorAll('input.chk-item')).map(i => i.value)"}

En resumen

  • Un selector que coincide con varios elementos toma el primero, en silencio.
  • Los números de Set-of-Mark se mueven con el DOM — vuelva a capturar tras cada cambio.
  • Capture Set-of-Mark dentro del escenario antes de actuar; la resolución híbrida ata entonces un número a ese elemento y señala cualquier deriva en som_derive_detectee.
  • Identifique los destinos por su contenido, nunca por su posición en una lista.