El elemento está dentro de un iframe y un selector simple no lo alcanza
Un módulo de pago, un editor incrustado, un formulario de terceros. El borde del marco es una frontera de seguridad del navegador, y dos acciones la cruzan.
El síntoma. La página se lee con normalidad: hay un formulario, un módulo
de pago, un editor incrustado, un módulo de reservas de terceros. Un
cliquer o un remplir simple con un selector CSS no encuentra nada dentro,
y el árbol de accesibilidad también se detiene en el marco: muestra
- iframe y nada debajo.
Por qué se detiene ahí
Un iframe es un documento aparte. Cuando procede de otro origen, el navegador prohíbe a la página, y a cualquier script que se ejecute en ella, entrar en él. Esa frontera es la que impide a un sitio leer el contenido de un marco de pago que incrusta. Ninguna opción la levanta para los scripts de la página.
Dos acciones la cruzan
Playwright maneja el navegador desde fuera de la página, así que la regla de mismo origen que se impone a los scripts de la página no se le aplica. Dinoer lo ofrece como dos acciones:
{"type": "cliquer_iframe", "iframe_selecteur": "iframe#payment",
"selecteur": "button.confirm"}
{"type": "remplir_iframe", "iframe_selecteur": "iframe#payment",
"selecteur": "input[name=cvv]",
"valeur": "depuis_secrets", "secret_cle": "cvv"}
remplir_iframe acepta depuis_secrets y depuis_secrets_totp igual que
remplir: una credencial dentro de un marco se sigue resolviendo en el
proceso del navegador, nunca se escribe en el escenario.
cliquer_iframe acepta force: true: las comprobaciones que hace Playwright
antes de un clic se aplican dentro del marco igual que fuera.
Un iframe dentro de un iframe
iframe_selecteur apunta a un marco de la página. Los marcos anidados
requieren un descenso nivel a nivel, en orden:
{"type": "cliquer_iframe",
"iframe_chemin": ["iframe#wrapper", "iframe#payment"],
"selecteur": "button.confirm"}
Una lista ordenada, un selector CSS por nivel. Las dos formas se excluyen: use una u otra, no ambas.
El límite
El árbol de accesibilidad no muestra el interior de un marco. El selector CSS interior tiene que conseguirlo usted.
Dónde encontrarlo: si el iframe tiene el mismo origen que la página, un
evaluer puede leerlo mediante document.querySelector('iframe').contentDocument.
Si procede de otro origen, la página no se lo dará: lea la documentación del
tercero, o abra directamente la dirección del marco y léala allí con
--a11y.
En resumen
- Un iframe de otro origen es, para los scripts de la página, una frontera firme del navegador.
cliquer_iframe/remplir_iframeconiframe_selecteurpara un nivel.iframe_chemin, una lista ordenada, para marcos anidados.- Las credenciales, TOTP incluido, se resuelven dentro de los marcos igual que fuera.
- Usted aporta el selector interior; Dinoer cruza la frontera.