Tests d’accessibilité de l’automatisation du navigateur
Créez des tests qui vérifient le clavier, les noms sémantiques, le focus, les annonces et les erreurs inclusives.
Vous voulez la documentation structurée pour Démarrage ?
Cet article fait partie de la bibliothèque éditoriale. Pour les étapes de configuration, la référence et les mises à jour continues, passez directement à la section docs.
Les tests d'accessibilité de l'automatisation du navigateur sont plus utiles lorsqu'ils vérifient le même parcours qu'une personne doit effectuer : trouver un contrôle, l'atteindre sans pointeur, comprendre son nom et son état, terminer une tâche et récupérer d'une erreur. Une exécution automatisée ne peut pas certifier tous les aspects de l’accessibilité, mais elle peut protéger les contrats reproductibles qui autrement seraient faciles à régresser. L'objectif pratique est un petit test observable qui explique ce qui a été vérifié et ce qui nécessite encore un examen humain.
Commencez avec une page synthétique autorisée ou un compte de test. Le navigateur peut observer la sémantique rendue, le mouvement du focus, le comportement du clavier et l'état visible. Il ne peut pas établir qu'une personne réelle disposant d'une technologie d'assistance particulière vivera correctement chaque interaction, ni prouver qu'un service a traité une mutation à distance. Conservez ces limites dans le résultat afin qu'une assertion verte du navigateur ne soit pas présentée comme une déclaration de conformité complète. Les Directives pour l'accessibilité du contenu Web fournissent des critères de réussite ; la spécification ARIA explique les rôles, les états et les propriétés.
Les tests d'accessibilité doivent également inclure les états que les clients rencontrent le plus souvent : un utilisateur récurrent, une fenêtre d'affichage étroite, une langue modifiée, une autorisation bloquée et une réponse réseau qui arrive en retard. Pour chaque état, définissez le focus, le nom, le statut et l'action de récupération attendus. Cela maintient le test proche de la promesse du produit tout en laissant la place à un examen manuel de la parole, du grossissement et de la charge cognitive.
Une exécution d'accessibilité est plus forte lorsque sa portée est visible avant de démarrer. Nommez l'itinéraire, les données synthétiques, la fenêtre d'affichage, le mode de saisie, le point de repère attendu et le propriétaire du nettoyage. Décidez si l'exécution est une vérification de composant, une tâche complète ou un échantillon de compatibilité. Cela évite qu'une assertion clavier étroite soit signalée comme un audit de l'ensemble du produit et donne aux évaluateurs une raison claire d'ajouter des vérifications manuelles.
Transformez une exigence d'accessibilité en un contrat observable
Écrivez le résultat utilisateur avant de choisir un localisateur. « Un utilisateur du clavier peut ouvrir les filtres, choisir une valeur et comprendre que la liste a changé » est un contrat. « Cliquez sur le bouton de filtre et attendez deux secondes » est un détail d'implémentation. Un test utile nomme l'état de départ, la séquence d'action, le propriétaire du focus attendu, le résultat visible ou annoncé et les preuves limitées conservées en cas d'échec d'une étape.
Séparez les observations du navigateur de la signification de l'application. Un bouton peut exposer un nom accessible alors que sa demande de serveur est rejetée. Une région d'état peut recevoir du texte tandis qu'une fichier d'attente de lecteur d'écran le présente plus tard ou pas du tout. Affirmez les faits du navigateur que vous possédez, puis faites une assertion d'application distincte pour le résultat visible par l'utilisateur. Cette séparation permet au propriétaire d'une page de corriger la sémantique sans impliquer que le test a inspecté les données de service privé.
Préférez un trajet par épreuve. Un test de connexion ne doit pas également vérifier une boîte de dialogue de paramètres et une exportation de fichier, car un échec de focus lors de la première étape masquerait les contrats ultérieurs. Donnez à chaque parcours une entrée synthétique, un propriétaire et un chemin de nettoyage. Gardez le résultat court : étiquette du scénario, versions du navigateur et du framework, nom du contrat ayant échoué et une capture d'écran ou une référence de trace autorisée. Ne sérialisez jamais de jetons, de texte d'une page complète ou d'une session privée simplement parce que le pilote le peut.
Vérifiez les noms, les rôles et les états sans surapprentissage
Les localisateurs accessibles identifiés ce qu'une personne peut identifier. Un rôle avec un nom accessible, une étiquette associée à un contrôle de formulaire ou un identifiant de test stable peut rendre le test lisible. Une classe a généré ou un chemin CSS profond en dit peu sur l'interaction et une tendance à se briser lors d'un travail de mise en page inoffensif. Lorsqu'un contrôle n'a intentionnellement aucun texte visible, documentez son nom accessible et testez le nom dans le cadre du contrat de composant.
Les noms et les descriptions ne sont pas interchangeables. Une boîte de dialogue a besoin d'un nom qui identifie son objectif ; une description peut ajouter du contexte. Un champ obligatoire doit exposer son état requis, et un champ non valide doit exposer une relation d'erreur qui pointe vers un texte utile. Testez la transition d'état, pas seulement le balisage initial. Un formulaire peut afficher aria-invalid="true" tout en laissant l'ancien message d'erreur dans le DOM, ce qui est un résultat déroutant à la fois pour l'automatisation et la technologie d'assistance.
Évitez d'affirmer des attributs ARIA accidentels lorsque le HTML natif fournit déjà le comportement. Un bouton, une étiquette, un titre, une liste et un lien natifs comportent une sémantique et un comportement du clavier bien défini. ARIA peut décrire un widget personnalisé, mais le propriétaire du widget doit implémenter son modèle d'interaction. Une vérification automatisée qui ne voit qu'un role="button" ne peut pas confirmer que Space et Enter l'activent tous les deux, que le focus reste visible ou qu'un état désactivé empêche une activation accidentelle.
Exercer la concentration sur le clavier comme chemin de première classe
La couverture du clavier doit suivre la tâche, et non une séquence aléatoire de pressions sur les tabulations. Commencez par un point de mise au point connu, parcourez les commandes significatives, activez une action et enregistrez la prochaine étape de la mise au point. Un modal doit déplacer le focus vers son contenu, empêcher le focus de s'échapper lorsqu'il est ouvert et revenir au focus sur un déclenchement sensible lorsqu'il est fermé. Un lien de saut doit devenir visible une fois mis au point et se déplacer vers le point de repère prévu.
Recherchez un indicateur de mise au point visible sans exiger une couleur ou une valeur de pixel exacte. Le contrat est qu'un utilisateur peut identifier le contrôle ciblé par rapport au thème approuvé. Une capture d'écran peut prendre en charge une révision, mais elle ne constitue pas une preuve universelle du contraste sur tous les écrans. Utilisez CSS et les assertions de style élaborées uniquement pour les propriétés qui possèdent le composant et laissez un jugement visuel nuancé à un examen humain qui inclut un contraste et un zoom élevé.
Testez les alternatives de clavier pour les widgets personnalisés. Un menu, une zone de liste déroulante, une liste de tabulations, une arborescence ou une boîte de dialogue possède un ensemble documenté de clés et de changements d'état. Testez les clés prises en charge, l’état sélectionné ou développé et la cible de focus suivante. Incluez Escape ou le chemin d’annulation documenté. N'appuyez pas sur des touches arbitraires jusqu'à ce que quelque chose change ; cela transforme un contrat déterministe en enquête et peut rendre un échec difficile à classer.
Un test du clavier devrait également couvrir le chemin bloqué. Si un champ obligatoire est vide, soumettez avec le clavier et vérifiez que l'erreur est visible, associée au champ et accessible dans un ordre logique. Si une boîte de dialogue d'autorisation est refusée, vérifiez que la page propose une alternative utilisable. Un test qui ne couvre que le chemin heureux peut laisser les utilisateurs de clavier bloqués exactement là où l'application doit expliquer un problème.
Vérifier les annonces et le contenu dynamique
Les interfaces dynamiques nécessitent une stratégie d'annonce. Un message de statut poli peut utiliser une région en direct ; une interruption urgente peut nécessiter une politique différente. Le test peut affirmer que la région existe, le rôle ou la politesse prévu et reçoit le texte du tribunal attendu après l'action. Il ne faut pas prétendre que chaque lecteur d'écran, paramètre vocal ou fichier d'attente du système d'exploitation présente le message de la même manière.
Maintenez la stabilité des assertions de région active. Attendez le changement d'état nommé, puis lisez une fois le texte accessible de la région. N'interrogez pas en déclenchant l'action à plusieurs reprises et n'acceptez aucune chaîne non vide comme succès. Si l'application met intentionnellement à jour la même région plusieurs fois, affirmez le message final pertinent pour l'utilisateur et enregistrez la transition qui y a conduit. Un délai d'attente doit identifier l'annonce manquante et ne pas simplement indiquer que la page était lente.
Les états de chargement et d’erreur méritent un traitement égal. Un bouton à lui seul peut ne pas expliquer la progression à un utilisateur non visuel, tandis qu'un bouton désactivé sans raison peut ressembler à un contrôle cassé. Testez la relation entre l'état occupé, le texte d'état et le contenu éventuel. Lorsqu'une requête échoue, vérifiez que l'erreur est annoncée ou placée là où l'utilisateur la rencontre, et que les nouvelles tentatives ou les actions alternatives sont accessibles au clavier.
N'utilisez pas l'automatisation pour récolter des arbres d'accessibilité à partir de sites non liés ou de sessions d'utilisateurs réels. Dans un appareil contrôlé, un instant d'accessibilité peut aider à comparer un composant avant et après une modification. Conservez uniquement les nœuds nécessaires pour expliquer l'assertion, expurger le contenu utilisateur et appliquer la même politique de conservation que les captures d'écran et les traces. L'instantané est la preuve d'une observation d'un navigateur, et non l'enregistrement d'une personne ou un score d'accessibilité universelle.
Rendre les montages et les courses parallèles inclusifs
Un appareil d'accessibilité possède plus qu'un contexte de navigateur. Il possède la fenêtre d'affichage initiale, le paramètre de zoom ou de taille du texte, la préférence de mouvement réduit le cas échéant, les paramètres régionaux, le compte synthétique et le répertoire d'artefacts. Déclarez quelles valeurs sont fixes pour le scénario et lesquelles varient dans une matrice séparée. Un travailleur ne doit jamais hériter de l’état de focus, du stockage, du chemin de téléchargement ou du nom de fichier de capture d’écran d’un autre travailleur.
Utilisez un contexte propre pour chaque parcours indépendant lorsque les cookies, les autorisations ou les préférences conservent le résultat. Un contexte isolé de l'état géré par le navigateur, mais il ne s'agit pas d'un bac à sable du système d'exploitation et il ne supprime pas un enregistrement de serveur. Si une application stocke une préférence à distance, demandez au propriétaire de l'application l'opération de réinitialisation prise en charge. L'appareil peut signaler ce que le navigateur a observé avant et après cette opération.
Les travailleurs parallèles doivent utiliser des enregistrements synthétiques et des chemins de sortie privés. Si deux travailleurs modifient un enregistrement, un contexte propre ne peut pas empêcher un cours au service. Préférez les enregistrements indépendants ou sérialisez la mutation spécifique. Une nouvelle tentative est une nouvelle tentative : fermez l'ancien contexte lorsque son état est incertain, créez un nouveau contexte détenu et signalez que la première action a peut-être atteint l'application. Ne cachez jamais une éventuelle soumission en double derrière une attente plus longue.
Incluez un cas d'échec intentionnel dans la suite de luminaires. Retenez un point de repère, retardez une mise à jour de statut ou renvoyez une erreur de validation documentée à partir de la page synthétique. Le résultat attendu est un échec limité nommant le contrat manquant suivi d'un nettoyage déterministe. Cela vérifie les harnais de test, et non un service de production, et conserve les preuves d'accessibilité proportionnellement à la question posée.
Separate tool support from conformance claims
Playwright et Selenium peuvent piloter la saisie au clavier, inspecter les noms accessibles et attendre un état visible ou sémantique. Leurs API différentes et la prise en charge par le navigateur des fonctionnalités liées à l'accessibilité peuvent varier selon la version. enregistrez le framework, le pilote, le navigateur, le système d'exploitation et les préférences pertinentes avec le résultat. Une exécution passée sur un tuple est une preuve de ce tuple ; ce n’est pas une promesse que chaque navigateur et technologie d’assistance se comporte de manière identique.
Les moteurs de règles automatisés peuvent détecter les noms manquants, les identifiants en double, les risques de contraste et certains problèmes structurels. Utilisez-les comme une aide à la révision, et non comme un substitut à l'exploration du clavier, au zoom, à la redistribution, aux vérifications du lecteur d'écran ou à la recherche d'utilisateurs spécifiques à un domaine. Un rapport de règle doit identifier le nœud et la règle, tandis que le test de parcours doit expliquer si l'utilisateur peut terminer la tâche. Séparez les échecs des deux outils afin qu’un avertissement de règle ne soit pas interprété à tort comme un échec commercial.
Lorsqu'un navigateur expose un instant d'accessibilité ou un rôle calculé, comparez uniquement les champs stables et pertinents pour l'utilisateur. Les formats instantanés peuvent changer entre les versions du framework. Préférez une assertion telle que « le bouton Enregistrer est nommé Enregistrer le profil et est activé après une entrée valide » plutôt qu'une comparaison d'arborescence octet par octet. Stockez une petite différence ou une référence d'élément et examinez intentionnellement les modifications plus importantes lorsque la sémantique d'un composant est repensée.
La spécification W3C WebDriver définit les limites de l'automatisation, tandis que les WCAG traitent les résultats qui impliquent des personnes et du contenu. Aucune des deux sources n'indique qu'un produit, un profil ou un pilote d'automatisation particulier peut certifier la conformité. Formulez votre rapport en conséquence : répertoriez les parcours testés, les environnements, les pannes référencées et les vérifications manuelles encore nécessaires.
Capacité et limitations de BotBrowser
BotBrowser fournit des BrowserContexts isolés avec des cookies, un stockage et un état de session séparés, ce qui aide les équipes à répéter les parcours d'accessibilité autorisés à partir de points de départ connus côté navigateur. BotBrowser ne remplace pas les assertions d'accessibilité de Playwright ou Selenium, la politique du lecteur d'écran ou du clavier, la sémantique de l'application, la révision WCAG ou le nettoyage côté serveur. Il ne peut pas garantir qu'une application cible expose un nom accessible correct, qu'une technologie d'assistance prononce une mise à jour de région en direct ou qu'une session et un enregistrement à distance sont invalidés. Le propriétaire de l'appareil choisit toujours le cadre, crée et ferme les contextes, contrôle les données synthétiques et obtient des preuves en dehors des limites du navigateur auprès du propriétaire de l'application.
Conservez la capacité et les limitations ensemble dans les rapports. Enregistrez l'objectif du contexte, la version du navigateur, les entrées de préférences, le contrat de voyage, le résultat observé et les vérifications manuelles restantes. Ne décrivez pas un profil isolé comme une preuve d'accessibilité ou comme un moyen de contourner les contrôles d'une application. Un état local propre rend un test reproductible ; cela ne change pas les responsabilités de la page, du service ou de la technologie d'assistance.
Examiner les échecs et maintenir la suite de tests
Classez un échec avant de modifier un localisateur ou un délai d'attente. Un nom accessible manquant est un défaut de composant. Un piège de focus qui ne se libère jamais peut être un défaut du cycle de vie du widget. Une annonce manquante peut être un problème d’état de page ou d’intégration de technologie d’assistance. Une déconnexion du conducteur est une preuve d’infrastructure. Un rejet du serveur est un résultat d’application. Le test du navigateur doit conserver le premier contrat manquant et acheminer l'action suivante vers le propriétaire qui peut le modifier.
Passez en revue les chemins négatifs après chaque changement de composant. Testez un formulaire vide, une valeur rejetée, une autorisation refusée, une réponse lente, une boîte de dialogue fermée et une navigation interrompue où ces états font partie du parcours. Vérifiez que chaque erreur a une explication lisible et une action suivante accessible. Conservez la même limite de preuve pour la réussite et l'échec afin qu'un échec ne collecte pas souvent davantage de contenu de page privée.
Avant la fusion, exécutez un parcours clavier dans un contexte propre, un parcours sensible aux préférences le cas échéant et un échec de démontage forcé. Confirmez que le focus revient à un propriétaire intentionnel, que les artefacts sont spécifiques au travailleur et que le nettoyage s'exécute après des erreurs d'assertion et de configuration. Revérifiez le navigateur et le tuple du framework lorsque les versions changent. Un test stable n’échoue jamais ; c'est celui dont l'échec identifie un contrat destiné à l'utilisateur et ne laisse aucun état susceptible de fausser l'exécution suivante.
L'automatisation de l'accessibilité fonctionne mieux en tant que pratique à plusieurs niveaux : les localisateurs sémantiques protègent la signification des composants, les parcours au clavier protègent l'achèvement des tâches, les annonces et les états d'erreur protègent la communication et l'examen humain protège les expériences que le code ne peut pas modéliser. Gardez chaque couche explicite, délimitée et honnête sur ce qu'elle observe. Cette discipline fournit aux équipes produit des preuves de régression utiles sans transformer une fonctionnalité de navigateur en une garantie de conformité non prise en charge.
Les contrôles d'accessibilité deviennent plus faciles à maintenir lorsque chaque résultat mentionne le voyage, l'environnement, le propriétaire et l'incertitude restante. Conservez un bref historique des versions testées du navigateur et du framework, notez si un examen humain a couvert le zoom ou un lecteur d'écran, et revisitez le contrat lorsqu'un composant change. Cet enregistrement aide les clients à comparer les versions, à hiérarchiser les correctifs et à éviter de considérer une seule passe automatisée comme une promesse universelle.
Sources
Voir aussi le cycle de vie de BrowserContext et la validation des interactions du navigateur.
BotBrowser fournit des BrowserContexts isolés pour répéter des parcours autorisés avec des cookies et un stockage séparé. Il ne remplace pas les assertions Playwright ou Selenium, l’examen WCAG, le lecteur d’écran ni le nettoyage côté serveur.
Articles Connexes
Faites passer BotBrowser de la recherche à la production
Utilisez ces guides pour comprendre le modèle, puis passez à la validation multi-plateforme, aux contextes isolés et au déploiement navigateur prêt pour l'échelle.