Tests guidés intelligents
L'outil analyze peut exécuter les Tests guidés intelligents automatisés (IGT) de Deque sur la page qu'il analyse, dans le même appel, immédiatement après le scan Axe. Passez le tableau optionnel igtTools indiquant quels IGT exécuter :
| Valeur | IGT | Ce qu'il vérifie |
|---|---|---|
"keyboard" |
Clavier | Ordre de tabulation, éléments inaccessibles par clavier, pièges à focus, indicateurs de focus manquants ou faibles, et éléments qui soumettent des formulaires au focus |
"interactive-elements" |
Éléments interactifs | Si les boutons, liens et contrôles personnalisés ont le bon nom accessible, rôle et état. Voir IGT des éléments interactifs. |
"modal" |
Dialogue modal | Si le focus reste à l'intérieur d'un modal, la sémantique du dialogue modal, et (lorsqu'un déclencheur est donné) si il peut être fermé et où le focus se déplace après. Voir IGT de dialogue modal. |
{
"url": "http://localhost:3000",
"igtTools": ["keyboard"]
}Invitez votre agent AI en langage naturel — l'agent traduit votre intention en appel de l'outil :
Scan http://localhost:3000 for accessibility issues and run the keyboard IGT on itChaque IGT demandé s'exécute séquentiellement après le scan Axe, dans l'ordre que vous les listez, sur la même page, dans le même navigateur, à la même largeur d'affichage. Tout ce qui prépare la page s'exécute une fois et s'applique au scan et à chaque IGT : actions before, injection de cookies, et le paramètres d'affichage.
{
"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" }
]
}Forme de la réponse
Définir igtTools modifie la forme de data. Sans cela, data est le tableau des problèmes Axe. Avec cela, data a deux clés au même niveau, axe et igt, avec une entrée igt par IGT demandé :
{
"pageUrl": "http://localhost:3000",
"data": {
"axe": [],
"igt": {
"keyboard": {
"status": "complete",
"issues": [],
"igtElements": [],
"terminatedReason": "keyboard-trap"
},
"modal": {
"status": "complete",
"issues": [],
"igtElements": []
}
}
}
}status—"complete"ou"error". Vérifiez cela avant de lire quoi que ce soit d'autre :issuesetigtElementssont présents uniquement sur"complete", eterrorseulement sur"error". Sélection par étapes ajoute trois autres statuts pour l'IGT des éléments interactifs.issues— les problèmes d'accessibilité que l'IGT a trouvés. Le nombre de problèmes est la longueur de ce tableau.igtElements— l'élément chaque que l'IGT a traité, pas seulement ceux avec des problèmes. Les entrées avecanalysisFailed: truen'ont pas pu être analysées par l'IA et devraient être examinées manuellement. Chaque entrée est réduite aux seuls champs d'identification :vnodeId,selector,tagName,role,accessibleName,states, etanalysisFailed, présents uniquement lorsque l'élément le porte.terminatedReason— présent seulement lorsque l'exécution s'est terminée avant que chaque étape ne soit terminée, de sorte que les résultats peuvent être partiels. Ce n'est pas une erreur. Voir Raisons de résiliation.
Un appel sans igtTools est inchangé. data reste exactement le tableau des problèmes Axe comme auparavant, donc les invites existantes, les instructions des agents et les intégrations continuent de fonctionner sans modification.
Raisons de résiliation
terminatedReason |
IGT | Signification |
|---|---|---|
insufficient-credits |
N'importe quel | Le compte a épuisé les crédits AI pendant l'exécution. |
subscription-missing |
N'importe quel | Le compte n'a pas l'abonnement Axe DevTools pour Web requis par l'IGT. |
keyboard-trap |
Clavier | Le test a rencontré un piège à focus dont il ne pouvait s'échapper. |
dismissibility-unavailable |
Modal | Il n'y avait pas de déclencheur (un appel modalSelector-seulement ou before-seulement), donc le test n'a pas pu vérifier si le modal peut être fermé. Attendu lorsque ces modes évaluent le modal avec succès, ce n'est pas un échec. |
focus-restoration-unavailable |
Modal | Il n'y avait pas de déclencheur pour lequel le focus pouvait revenir, donc le test n'a pas pu vérifier où va le focus après la fermeture du modal. Attendu pour les modes sans déclencheur, pas un échec. |
modal-not-detected |
Modal | Aucun modal n'a été trouvé pour être évalué. |
modal-dismiss-failed |
Modal | Le modal n'a pas pu être fermé pendant l'évaluation. |
trigger-not-resolved |
Modal | modalTriggerSelector n'a correspondu avec aucun élément de la page, donc aucun modal n'a été ouvert. |
modal-selector-not-resolved |
Modal | modalSelector n'a correspondu avec aucun élément de la page. |
modal-selector-not-visible |
Modal | modalSelector a correspondu à un élément qui n'est pas visible. Si le modal s'ouvre d'une interaction, ouvrez-le avec before. |
modal-fallback-not-resolved |
Modal | Le fallback modalSelector (passé avec un déclencheur) n'a correspondu avec aucun élément de la page. |
modal-fallback-not-visible |
Modal | Le fallback modalSelector (passé avec un déclencheur) a correspondu à un élément qui n'est pas visible. |
L'IGT des éléments interactifs n'a pas ses propres raisons de résiliation. Une page sans éléments interactifs renvoie un résultat "complete" avec des tableaux vides.
Les échecs sont isolés
An IGT that fails does pas fail the call and never affects the Axe results or the other IGTs. The failure is reported as that IGT's own status: "error" with a message. The Axe results and every other IGT's results come back normally. This includes when your organization's machine learning setting is disabled, in which case each IGT's entry explains that machine learning is required.
Utilisation des crédits
Les IGT sont alimentés par l'IA et font partie du Système de gestion des crédits IA. Chaque exécution consomme des crédits IA de l'allocation mensuelle de votre organisation ; le scan Axe lui-même ne le fait pas. Demandez des IGT délibérément plutôt que de les ajouter à chaque scan. Pour l'IGT des éléments interactifs, le ciblage ou le choisir des éléments réduit le nombre d'éléments analysés, et donc les crédits utilisés.
Si vos instructions d'agent personnalisées demandent à l'agent d'appeler l'outil autonome outil igt, mettez-les à jour pour utiliser analyze avec igtTools à la place — un appel couvre à la fois le scan et l'IGT, et l'outil autonome est obsolète.
IGT des éléments interactifs
L'IGT des éléments interactifs trouve les boutons, les liens et les contrôles personnalisés sur la page et utilise l'IA pour vérifier le nom accessible, le rôle et l'état de chacun. Par défaut, il analyse chaque élément interactif qu'il trouve en un seul appel :
{
"url": "http://localhost:3000",
"igtTools": ["interactive-elements"]
}Analyze http://localhost:3000 and run the interactive elements guided testChaque élément analysé consomme crédits IA, donc sur une grande page — une grille de données, un long menu de navigation, une liste de produits — l'exécution par défaut peut en utiliser beaucoup. Deux options limitent ce qui est analysé.
Ciblage avec includeSelectors
Passez includeSelectors, un tableau de sélecteurs CSS, pour analyser uniquement les éléments qui correspondent. Les éléments hors des sélecteurs ne sont pas analysés :
{
"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 est différent du analyze de selector. selector limite la partie de la page que Scan Axe couvre, tandis que includeSelectors limite les éléments que IGT des éléments interactifs analyse. Vous pouvez utiliser l'un, l'autre, ou les deux. includeSelectors nécessite "interactive-elements" dans igtTools.
Choisir quels éléments tester
Lorsque vous ne savez pas à l'avance quels éléments importent, utilisez sélection progressive. Cela divise le test en deux appels d'outils, avec une pause entre les deux pour que vous puissiez choisir ce qui est analysé :
- Premier appel — trouver des éléments. L'agent appelle
analyzeavecinteractive: true. Le scan Axe s'exécute normalement, et l'IGT trouve les éléments interactifs de la page mais exécute aucune analyse IA sur eux. L'exécution s'interrompt et renvoie la liste des éléments qu'elle a trouvés, ainsi qu'unsessionID. - Vous choisissez. L'agent vous montre la liste — le rôle de chaque élément, son nom accessible et son état, groupés par composant ou rôle lorsque cela est possible — et vous lui dites lesquels tester.
- Deuxième appel — analyser. L'agent appelle
analyzeà nouveau avec lesessionIDet leselectedIDsque vous avez choisis. L'exécution en pause continue dans la même session de navigateur, sans recharger la page ni retrouver les éléments, et retourne un résultat"complete"normal uniquement pour les éléments sélectionnés.
Une invite qui le demande :
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.Le premier appel :
{
"url": "http://localhost:3000",
"igtTools": ["interactive-elements"],
"interactive": true
}renvoie les résultats Axe et les candidats :
{
"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": [] }
}
}
}
}Le deuxième appel nomme les candidats choisis par vnodeId :
{
"url": "http://localhost:3000",
"igtTools": ["interactive-elements"],
"sessionID": "3f9c…",
"selectedIDs": [12]
}Gardez à l'esprit les éléments suivants lorsque vous utilisez la sélection progressive :
- Elle exécute uniquement l'IGT Éléments interactifs.
igtToolsdoit être exactement["interactive-elements"]sur les deux appels. Pour exécuter également les IGT Clavier ou Modal, exécutez-les dans un appel distinct. - Le deuxième appel omet
data.axe. Les résultats Axe sont revenus lors du premier appel. Lors du deuxième appel, tous les paramètres de configuration (viewportWidth,viewportHeight,cookies,before,selector,advancedRules,screenshot,chromePath) sont ignorés, car la session de navigateur en pause est réutilisée tel quel.urlest toujours requis. includeSelectorss'applique toujours. Passez-le lors du premier appel pour limiter les éléments qui apparaissent dans la liste.selectedIDsdoit provenir de la liste. Si un identifiant ne figurait pas parmi les candidats, l'appel renvoiestatus: "invalid_selection"avec les identifiants inconnus dansunknownIDs. L'exécution reste en pause, afin que l'agent puisse réessayer avec des identifiants valides.- Les exécutions en pause expirent. Une exécution qui n'est pas continuée dans les 3 minutes est fermée et renvoie
status: "session_expired". Au maximum, 3 exécutions en pause peuvent être ouvertes en même temps. Les deux limites sont configurables avecSELECTION_SESSION_TTL_MSetMAX_SELECTION_SESSIONS. Après une expiration, recommencez avec un nouvel appelinteractive: true.
La sélection progressive est la méthode la plus économique en crédits pour tester une grande page. Le premier appel n'exécute aucune analyse IA sur les éléments interactifs, et le deuxième appel analyse uniquement les éléments que vous avez choisis.
IGT de dialogue modal
Le test de la boîte de dialogue modale IGT vérifie une seule boîte de dialogue modale sur la page. Il vérifie que le focus clavier reste à l'intérieur de la modale lorsqu'elle est ouverte et que la modale dispose des bonnes sémantiques de dialogue (aria-modal et le rôle du conteneur modale). Lorsque le test dispose de l'élément qui ouvre la modale, il vérifie également que la modale peut être fermé et que le focus revient à un endroit logique ensuite.
Le test doit savoir quelle modale vérifier. Il y a trois façons de le lui indiquer :
| Mode de ciblage | Comment | Ce qui est évalué |
|---|---|---|
| Déclencheur (recommandé) | modalTriggerSelector — l'élément qui ouvre la modale |
Confinement du focus, sémantique du dialogue, fermeture et retour du focus |
| Élément modale | modalSelector — l'élément modale lui-même |
Confinement du focus et sémantique du dialogue uniquement |
Étapes before uniquement |
Pas de sélecteur — votre actions before ouvre la modale |
Confinement du focus et sémantique du dialogue uniquement |
Utilisez modalTriggerSelector chaque fois que la modale a un déclencheur — c'est le seul mode qui vérifie tout. Le test clique lui-même sur le déclencheur :
{
"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-dialogUtilisez modalSelector lorsqu'il n'y a pas de déclencheur sur lequel cliquer, comme une modale qui s'ouvre lorsque la page se charge. Si la modale n'apparaît qu'après une interaction, utilisez before pour l'ouvrir d'abord :
{
"url": "http://localhost:3000",
"igtTools": ["modal"],
"modalSelector": "#newsletter-dialog"
}Sans sélecteur, le test vérifie la modale ouverte une fois les étapes before terminées. Utilisez cela pour des modales qu'aucun élément unique n'ouvre, comme celle qui apparaît après une séquence de frappes au clavier ou un délai d'inactivité :
{
"url": "http://localhost:3000",
"igtTools": ["modal"],
"before": [
{ "action": "click", "selector": "#settings" },
{ "action": "click", "selector": "#delete-account" }
]
}Les deux sélecteurs acceptent une chaîne CSS pour un élément dans le cadre supérieur, ou un tableau de sélecteurs pour atteindre un élément à l'intérieur d'un iframe (par exemple, ["iframe#app", "#open-dialog"]), au même format que selector.
Sans déclencheur, une liste vide issues ne signifie pas que la modale peut être fermée. Lorsqu'une exécution modalSelector uniquement ou before uniquement trouve et évalue la modale, elle se termine par terminatedReason: "dismissibility-unavailable". C'est attendu et signifie que la fermeture et le retour du focus ont été non évalué — pas qu'ils ont réussi. Si la modale ne peut pas être trouvée, l'exécution se termine pour une autre raison, par exemple modal-not-detected ou modal-selector-not-resolved ; voir Raisons de résiliation.
Fournir un sélecteur de repli pour la modale
Si vous connaissez à la fois le déclencheur et l'élément modale, passez les deux. Le test démarre toujours à partir du déclencheur et vérifie tout. Le modalSelector n'est utilisé que si le test ne peut pas identifier la modale après avoir cliqué sur le déclencheur — généralement parce que la modale utilise un balisage non standard :
{
"url": "http://localhost:3000",
"igtTools": ["modal"],
"modalTriggerSelector": "#open-dialog",
"modalSelector": "#custom-dialog"
}Le résultat ne dit pas si le repli a été utilisé. Une exécution qui en a eu besoin a vérifié un élément que le test ne pouvait pas reconnaître comme une modale, donc traitez une liste vide issues d'une exécution avec les deux sélecteurs comme preuve plus faible qu'une exécution uniquement par déclencheur.
Ne pas ouvrir la modale vous-même
Lorsque vous passez modalTriggerSelector, le test clique sur le déclencheur pour ouvrir la modale. Si la modale est déjà ouverte, ce clic la referme généralement. Donc :
- Ne cliquez pas sur le déclencheur dans
before. Un clicbeforesur le même sélecteur quemodalTriggerSelectorest rejeté avec une erreur. Utilisezbeforepour atteindre l'état de la page où vit le déclencheur, comme se connecter ou accéder à une vue particulière. - Ne pas passer un déclencheur pour une modale déjà ouverte, soit au chargement de la page, soit à partir d'une étape
before. UtilisezmodalSelectorseul à la place.
modalTriggerSelector et modalSelector nécessitent chacun "modal" dans igtTools.
Tout exécuter en un appel
Chaque IGT a ses propres options, donc un seul appel analyze peut exécuter l'analyse Axe, Règles avancées, et chaque IGT sur la même page. La page est chargée et préparée une fois, et chaque résultat revient sous sa propre clé.
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).L'agent résout l'invite et appelle l'outil analyze avec une charge utile similaire à :
{
"url": "http://localhost:3000",
"advancedRules": "thorough",
"igtTools": ["keyboard", "interactive-elements", "modal"],
"modalTriggerSelector": "button#open-dialog"
}et reçoit les résultats Axe (y compris les découvertes de Règles avancées) sous data.axe et une entrée par IGT sous 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": [] }
}
}
}Les IGT s'exécutent l'un après l'autre, dans l'ordre listé dans igtTools, et chacun fait un rapport séparément — un piège à clavier ou une modale introuvable n'arrête pas les autres. Cela fonctionne également avec toute autre option analyze : étapes before et cookies pour une page derrière une connexion, viewportWidth pour un point de rupture mobile, selector pour délimiter l'analyse Axe, et screenshot.
Sélection par étapes ne peut pas être combiné avec d'autres IGT. Pour limiter le test IGT des Éléments interactifs dans un appel multi-IGT, utilisez includeSelectors.
L'outil igt
L'outil igt est obsolète. Utilisez plutôt Le paramètre igtTools de l'outil analyze — il exécute les mêmes tests guidés intelligents sur la même page en un seul appel, en parallèle avec l'analyse Axe.
igt reste pleinement fonctionnel et renvoie les mêmes résultats qu'avant, donc rien ne se brise aujourd'hui. Il sera supprimé dans une prochaine version. Si vos instructions d'agent personnalisées nomment l'outil igt, mettez-les à jour pour appeler analyze avec igtTools.
L'outil igt exécute les Tests guidés intelligents automatisés de Deque sur une page web comme un appel autonome. Tout ce qu'il fait, analyze le fait maintenant dans le même appel que l'analyse d'accessibilité — consultez le reste de cette page pour l'utilisation et la consommation de crédit, qui sont les mêmes pour les deux.
L'objet de résultat par test est également le même pour les deux — status, issues, igtElements, et un terminatedReason facultatif, comme décrit dans Forme de la réponse. Seul l'enveloppe diffère : igt retourne ses résultats directement sous data, indexés par nom de test (data.keyboard), tandis que analyze les imbrique sous data.igt avec data.axe.
