Pruebas Guiadas Inteligentes
La herramienta analyze puede ejecutar las Pruebas Guiadas Inteligentes Automatizadas (IGT) de Deque en la página que escanea, en la misma llamada, justo después del escaneo Axe. Pase la matriz opcional igtTools nombrando qué IGT ejecutar:
| Valor | IGT | Qué verifica |
|---|---|---|
"keyboard" |
Teclado | Orden de tabulación, elementos inaccesibles por teclado, trampas de enfoque, indicadores de enfoque ausentes o débiles, y elementos que envían formularios al enfocarse |
"interactive-elements" |
Elementos Interactivos | Si los botones, enlaces y controles personalizados tienen el nombre accesible correcto, función y estado. Vea IGT de Elementos Interactivos. |
"modal" |
Diálogo Modal | Si el enfoque permanece dentro de un modal, la semántica del diálogo modal, y (cuando se proporciona un disparador) si se puede cerrar y dónde va el enfoque después. Vea IGT de Diálogo Modal. |
{
"url": "http://localhost:3000",
"igtTools": ["keyboard"]
}Instruya a su agente de IA en lenguaje natural: el agente traduce su intención en la llamada de herramienta:
Scan http://localhost:3000 for accessibility issues and run the keyboard IGT on itCada IGT solicitado se ejecuta en secuencia después del escaneo Axe, en el orden que los enumere, contra la misma página, en el mismo navegador, con el mismo ancho de vista. Cualquier cosa que prepare la página se ejecuta una vez y se aplica al escaneo y a cada IGT: acciones before, inyección de cookies, y el parámetros del viewport.
{
"url": "http://localhost:3000",
"igtTools": ["keyboard"],
"before": [
{
"action": "fill",
"selector": "#username",
"value": "<resolved-from-.env.local>"
},
{ "action": "click", "selector": "button[type=submit]" },
{ "action": "waitFor", "selector": "#main-content" }
]
}Forma de respuesta
Configurar igtTools cambia la forma de data. Sin ello, data es la matriz de problemas Axe. Con ello, data tiene dos claves al mismo nivel, axe y igt, con una entrada igt por cada IGT solicitado:
{
"pageUrl": "http://localhost:3000",
"data": {
"axe": [],
"igt": {
"keyboard": {
"status": "complete",
"issues": [],
"igtElements": [],
"terminatedReason": "keyboard-trap"
},
"modal": {
"status": "complete",
"issues": [],
"igtElements": []
}
}
}
}status—"complete"o"error". Verifíquelo antes de leer cualquier otra cosa:issuesyigtElementsestán presentes solo en"complete", yerrorsolo en"error". Selección por fases agrega tres estados más para el IGT de Elementos Interactivos.issues— los problemas de accesibilidad que encontró el IGT. El conteo de problemas es la longitud de esta matriz.igtElements— cada elemento que el IGT procesó, no solo los que tienen problemas. Las entradas conanalysisFailed: trueno pudieron ser analizadas por IA y deben revisarse manualmente. Cada entrada se reduce solo a campos de identificación:vnodeId,selector,tagName,role,accessibleName,states, yanalysisFailed, cada uno presente solo cuando el elemento lo contiene.terminatedReason— presente solo cuando la ejecución finalizó antes de que todos los pasos concluyeran, por lo que los resultados pueden ser parciales. No es un error. Consulte Razones de terminación.
Una llamada sin igtTools permanece sin cambios. data permanece como la matriz de problemas Axe exactamente igual que antes, por lo que los mensajes existentes, las instrucciones del agente, y las integraciones siguen funcionando sin modificación.
Razones de terminación
terminatedReason |
IGT | Significado |
|---|---|---|
insufficient-credits |
Cualquiera | La cuenta se quedó sin créditos de IA durante la ejecución. |
subscription-missing |
Cualquiera | La cuenta no tiene la suscripción de Axe DevTools para Web que el IGT requiere. |
keyboard-trap |
Teclado | La prueba encontró una trampa de enfoque de la que no pudo escapar. |
dismissibility-unavailable |
Modal | No hubo activador (una ejecución modalSelector-solo o before-solo), por lo que la prueba no pudo verificar si el modal puede cerrarse. Esperado cuando esos modos evalúan el modal con éxito, no es un fallo. |
focus-restoration-unavailable |
Modal | No hubo activador para que el enfoque regresara, por lo que la prueba no pudo verificar dónde va el enfoque después de que el modal se cierra. Esperado para modos sin activador, no es un fallo. |
modal-not-detected |
Modal | No se encontró un modal para evaluar. |
modal-dismiss-failed |
Modal | El modal no pudo cerrarse durante la evaluación. |
trigger-not-resolved |
Modal | modalTriggerSelector no coincidió con ningún elemento en la página, por lo que no se abrió un modal. |
modal-selector-not-resolved |
Modal | modalSelector no coincidió con ningún elemento en la página. |
modal-selector-not-visible |
Modal | modalSelector coincidió con un elemento que no está visible. Si el modal se abre por una interacción, ábralo con before. |
modal-fallback-not-resolved |
Modal | El modalSelector de respaldo (pasado con un disparador) no coincidió con ningún elemento en la página. |
modal-fallback-not-visible |
Modal | El modalSelector de respaldo (pasado con un disparador) coincidió con un elemento que no está visible. |
El IGT de Elementos Interactivos no tiene razones de terminación propias. Una página sin elementos interactivos devuelve un resultado "complete" con matrices vacías.
Las fallas están aisladas
Un IGT que falla no no la llamada y nunca afecta los resultados de Axe ni los otros IGT. La falla se reporta como un status: "error" del propio IGT con un mensaje. Los resultados de Axe y de cada otro IGT regresan normalmente. Esto incluye cuando la configuración de aprendizaje automático de su organización está desactivada, en cuyo caso cada entrada del IGT explica que el aprendizaje automático es necesario.
Uso de créditos
Los IGT están potenciados por IA y forman parte del Sistema de Gestión de Créditos de IA. Cada ejecución consume créditos de IA de la asignación mensual de su organización; el escaneo de Axe en sí no lo hace. Solicite IGT de manera deliberada en lugar de agregarlos a cada escaneo. Para el IGT de Elementos Interactivos, alcance o elección de elementos reduce la cantidad de elementos analizados y, por lo tanto, los créditos utilizados.
Si sus instrucciones personalizadas del agente indican al agente que llame al herramienta igt independiente, actualícelos para usar analyze con igtTools en su lugar: una llamada cubre tanto el escaneo como el IGT, y la herramienta independiente está obsoleto.
IGT de Elementos Interactivos
The Interactive Elements IGT finds the buttons, links, and custom controls on the page and uses AI to check each one's accessible name, role, and state. By default it analyzes cada interactive element it finds in a single call:
{
"url": "http://localhost:3000",
"igtTools": ["interactive-elements"]
}Analyze http://localhost:3000 and run the interactive elements guided testCada elemento analizado consume créditos de IA, por lo que en una página grande —una cuadrícula de datos, un menú de navegación largo, una lista de productos— la ejecución predeterminada puede usar muchos créditos. Hay dos opciones que limitan lo que se analiza.
Definir el alcance con includeSelectors
Pase includeSelectors, un arreglo de selectores CSS, para analizar solo los elementos que coincidan. Los elementos fuera de los selectores no se analizan:
{
"url": "http://localhost:3000",
"igtTools": ["interactive-elements"],
"includeSelectors": ["#main", "nav.primary"]
}Analyze http://localhost:3000 and run the interactive elements guided test,
but only on the elements inside #main and nav.primaryincludeSelectors es diferente del selector de analyze. selector limita qué parte de la página cubre el escaneo de Axe, mientras que includeSelectors limita qué elementos analiza el IGT de Elementos Interactivos. Puede usar uno o ambos. includeSelectors requiere "interactive-elements" en igtTools.
Elegir qué elementos probar
Cuando no sabe de antemano qué elementos son importantes, use selección por fases. Divide la prueba en dos llamadas de herramientas, con una pausa entre ellas para que pueda elegir qué se analiza:
- Primera llamada: encontrar elementos. El agente llama a
analyzeconinteractive: true. El escaneo de Axe se ejecuta como de costumbre, y el IGT encuentra los elementos interactivos de la página pero no realiza sin análisis de IA en ellos. La ejecución se pausa y devuelve la lista de elementos que encontró, más unsessionID. - Usted elige. El agente le muestra la lista: el rol de cada elemento, su nombre accesible y estado, agrupados por componente o rol cuando sea posible, y usted le indica cuáles prueba.
- Segunda llamada: analizar. El agente llama a
analyzenuevamente con lossessionIDy losselectedIDsque eligió. La ejecución pausada continúa en la misma sesión del navegador, sin cargar la página ni encontrar elementos de nuevo, y devuelve un resultado normal de"complete"solo para los elementos seleccionados.
Una solicitud que lo pide:
Analyze http://localhost:3000 and run the interactive elements guided test.
Show me the interactive elements it finds first and let me choose which
ones to test.La primera llamada:
{
"url": "http://localhost:3000",
"igtTools": ["interactive-elements"],
"interactive": true
}devuelve los resultados de Axe y los candidatos:
{
"pageUrl": "http://localhost:3000",
"data": {
"axe": [],
"igt": {
"interactive-elements": {
"status": "needs_selection",
"sessionID": "3f9c…",
"candidates": [
{ "vnodeId": 12, "role": "button", "name": "Add to cart" },
{ "vnodeId": 31, "role": "link", "name": "Checkout" }
],
"componentGroups": { "intelligent": [], "role": [] }
}
}
}
}La segunda llamada nombra a los candidatos elegidos por vnodeId:
{
"url": "http://localhost:3000",
"igtTools": ["interactive-elements"],
"sessionID": "3f9c…",
"selectedIDs": [12]
}Tenga en cuenta lo siguiente al usar la selección por fases:
- Solo corre el IGT de Elementos Interactivos.
igtToolsdebe ser exactamente["interactive-elements"]en ambas llamadas. Para ejecutar los IGT de Teclado o Modal también, ejecútelos en una llamada separada. - La segunda llamada omite
data.axe. Los resultados de Axe fueron devueltos en la primera llamada. En la segunda llamada, todos los parámetros de configuración (viewportWidth,viewportHeight,cookies,before,selector,advancedRules,screenshot,chromePath) se ignoran, porque la sesión del navegador pausada se reutiliza tal cual.urlsigue siendo necesario. includeSelectorssigue aplicando. Páselo en la primera llamada para limitar qué elementos aparecen en la lista.selectedIDsdebe provenir de la lista. Si algún ID no estaba en los candidatos, la llamada devuelvestatus: "invalid_selection"con los IDs desconocidos enunknownIDs. La ejecución permanece pausada, para que el agente pueda intentar nuevamente con IDs válidos.- Las ejecuciones pausadas expiran. Una ejecución que no se continúa dentro de 3 minutos se cierra y devuelve
status: "session_expired". A lo sumo 3 ejecuciones pausadas pueden estar abiertas a la vez. Ambos límites son configurables conSELECTION_SESSION_TTL_MSyMAX_SELECTION_SESSIONS. Después de una expiración, comience de nuevo con una nueva llamada deinteractive: true.
La selección por fases es la forma más eficiente en créditos de probar una página grande. La primera llamada no realiza análisis de IA en elementos interactivos, y la segunda llamada analiza solo los elementos que eligió.
IGT de Diálogo Modal
El IGT de Diálogo Modal verifica un único diálogo modal en la página. Comprueba que el enfoque del teclado permanezca dentro del modal mientras esté abierto y que el modal tenga la semántica correcta de diálogo (aria-modal y el rol del contenedor modal). Cuando la prueba tiene el elemento que abre el modal, también verifica que el modal puede cerrarse y que el enfoque regresa a un lugar sensato posteriormente.
La prueba necesita saber qué modal verificar. Hay tres maneras de indicarlo:
| Modo de identificación | Cómo | Qué se evalúa |
|---|---|---|
| Disparador (recomendado) | modalTriggerSelector — el elemento que abre el modal |
Contención de enfoque, semántica de diálogo, cierre y retorno de enfoque |
| Elemento modal | modalSelector — el elemento modal en sí |
Solo contención de enfoque y semántica de diálogo |
Solo pasos before |
Sin selector — tu acciones before abre el modal |
Solo contención de enfoque y semántica de diálogo |
Usa modalTriggerSelector siempre que el modal tenga un disparador — es el único modo que verifica todo. La prueba hace clic en el disparador en sí:
{
"url": "http://localhost:3000",
"igtTools": ["modal"],
"modalTriggerSelector": "#open-dialog"
}Analyze http://localhost:3000 and run the modal guided test on the dialog
opened by #open-dialogUsa modalSelector cuando no haya un disparador en el cual hacer clic, como un modal que esté abierto cuando se carga la página. Si el modal solo aparece después de alguna interacción, utiliza before para abrirlo primero:
{
"url": "http://localhost:3000",
"igtTools": ["modal"],
"modalSelector": "#newsletter-dialog"
}Sin ninguno de los selectores, la prueba verifica cualquier modal que esté abierto una vez que los pasos de before terminen. Usa esto para modales que no abre un solo elemento, como uno que aparece tras una secuencia de pulsaciones de teclas o un cierre de sesión por tiempo de espera:
{
"url": "http://localhost:3000",
"igtTools": ["modal"],
"before": [
{ "action": "click", "selector": "#settings" },
{ "action": "click", "selector": "#delete-account" }
]
}Ambos selectores aceptan una cadena CSS para un elemento en el marco superior, o un arreglo de selectores para alcanzar un elemento dentro de un iframe (por ejemplo, ["iframe#app", "#open-dialog"]), el mismo formato que selector.
Sin un disparador, una lista issues vacía no significa que el modal se pueda cerrar. Cuando una ejecución solo con modalSelector o solo con before encuentra y evalúa el modal, termina con terminatedReason: "dismissibility-unavailable". Esto es esperado y significa que el cierre y el retorno de enfoque fueron no evaluado, no que hayan pasado. Si no se puede encontrar el modal, la ejecución termina con una razón diferente, como modal-not-detected o modal-selector-not-resolved; consulta Razones de terminación.
Proporcionar un selector modal de respaldo
Si conoces ambos, el disparador y el elemento modal, pásalos ambos. La prueba aún comienza desde el disparador y aún verifica todo. El modalSelector se utiliza solo si la prueba no puede identificar el modal después de hacer clic en el disparador, típicamente porque el modal utiliza un marcado no estándar:
{
"url": "http://localhost:3000",
"igtTools": ["modal"],
"modalTriggerSelector": "#open-dialog",
"modalSelector": "#custom-dialog"
}El resultado no dice si se utilizó el respaldo. Una ejecución que lo necesitó verificó un elemento que la prueba no pudo reconocer como un modal, así que trata una lista issues vacía de una ejecución con ambos selectores como evidencia más débil que una de solo con disparador.
No abras el modal tú mismo
Cuando pasas modalTriggerSelector, la prueba hace clic en el disparador para abrir el modal. Si el modal ya está abierto, ese clic usualmente lo vuelve a cerrar. Entonces:
- No hagas clic en el disparador en
before. Un clicbeforeen el mismo selector quemodalTriggerSelectores rechazado con un error. Usabeforepara alcanzar el estado de la página en el que el disparador se encuentra, como iniciar sesión o ir a una vista particular. - No pases un disparador para un modal que ya está abierto, ya sea en la carga de la página o desde un paso
before. UsamodalSelectorpor sí solo en su lugar.
modalTriggerSelector y modalSelector cada uno requiere "modal" en igtTools.
Ejecutando todo en una sola llamada
Cada IGT tiene sus propias opciones, por lo que una sola llamada analyze puede ejecutar el escaneo de Axe, Reglas avanzadas, y cada IGT en la misma página. La página se carga y prepara una vez, y cada resultado se devuelve bajo su propia clave.
Analyze http://localhost:3000 for accessibility issues with thorough
advanced rules. Also run the keyboard, interactive elements, and modal
guided tests (test the modal triggered by button#open-dialog).El agente resuelve el indicador y llama a la herramienta analyze con una carga parecida a:
{
"url": "http://localhost:3000",
"advancedRules": "thorough",
"igtTools": ["keyboard", "interactive-elements", "modal"],
"modalTriggerSelector": "button#open-dialog"
}y recibe los resultados de Axe (incluyendo hallazgos de Reglas Avanzadas) bajo data.axe y una entrada por IGT bajo data.igt:
{
"pageUrl": "http://localhost:3000",
"advancedRules": { "value": "thorough", "source": "tool_arg" },
"data": {
"axe": [],
"igt": {
"keyboard": { "status": "complete", "issues": [], "igtElements": [] },
"interactive-elements": {
"status": "complete",
"issues": [],
"igtElements": []
},
"modal": { "status": "complete", "issues": [], "igtElements": [] }
}
}
}Los IGT se ejecutan uno tras otro, en el orden listado en igtTools, y cada uno reporta por separado: un bloqueo de teclado o un modal que no se puede encontrar no detiene a los demás. Esto funciona también con cada otra analyze opción: pasos before y cookies para una página detrás de un inicio de sesión, viewportWidth para un punto de interrupción móvil, selector para delimitar el escaneo de Axe, y screenshot.
Selección por fases no puede combinarse con otros IGT. Para limitar el IGT de Elementos Interactivos en una llamada multi-IGT, usa includeSelectors.
La herramienta igt
La herramienta igt está obsoleta. Usa la Parámetro igtTools de la herramienta analyze en su lugar — ejecuta las mismas Pruebas Guiadas Inteligentes contra la misma página en una sola llamada, junto con el escaneo de Axe.
igt sigue siendo completamente funcional y devuelve los mismos resultados que antes, así que nada se rompe hoy. Será eliminado en una futura versión. Si tus instrucciones personalizadas del agente nombran a la herramienta igt, actualízalos para llamar a analyze con igtTools.
La herramienta igt ejecuta el Pruebas Guiadas Inteligentes Automatizadas de Deque contra una página web como una llamada independiente. Todo lo que hace, analyze ahora lo hace en la misma llamada que el escaneo de accesibilidad — consulta el resto de esta página para el uso y el consumo de créditos, que son iguales para ambos.
El objeto de resultado por prueba también es el mismo para ambos — status, issues, igtElements, y un opcional terminatedReason, como se describe en Forma de respuesta. Solo el envoltorio difiere: igt devuelve sus resultados directamente bajo data, indexados por nombre de prueba (data.keyboard), mientras que analyze los anida bajo data.igt junto a data.axe.
