Écrire des tests Hamcrest

This page is not available in the language you requested. You have been redirected to the English version of the page.
Link to this page copied to clipboard

Écrire des tests d'accessibilité en utilisant les matchers Hamcrest avec Axe DevTools pour Web pour Java

Not for use with personal data

Prérequis

Pour écrire des tests d'accessibilité et produire des résultats, vous devez déjà avoir créé un fichier de test avec Axe DevTools et votre choix de Selenium WebDriver pré-importé et pré-initialisé. Si vous ne l'avez pas encore fait, lisez ce guide pour savoir comment procéder.

Un ensemble de matchers a été fourni pour les tests d'accessibilité via hamcrest en utilisant Selenium WebDriver. Ces matchers peuvent être utilisés dans un cadre de test unitaire ou dans des étapes personnalisées de Cucumber.

Choisir une méthode de balayage

Comme vu dans les instructions d'importation, il existe deux méthodes de balayage d'accessibilité. La première, isAxeClean, lancera une exception et arrêtera les tests si des violations sont trouvées. La seconde, isAuditedForAccessibility, n'arrêtera pas les tests et ne lancera pas d'exception quelle que soit le niveau d'accessibilité de la page balayée.

Rédaction de tests

Pour les exemples restants, la méthode isAxeClean est montrée pour des raisons de brièveté, mais les deux méthodes fonctionnent de manière interchangeable. Avec vos objets WebDriver et AxeDriver instanciés et initialisés, créer un balayage est aussi simple que d'ajouter ces deux lignes de code à une méthode de test. Remplacez $URL par l'URL souhaitée de la page que vous souhaitez balayer.

webDriver.get("$URL");
assertThat(axedriver, isAxeClean());

Lors des tests sur plusieurs pages, vous pouvez répéter le processus de récupération et de scan sans avoir à créer de nouvelles instances des pilotes. Pour analyser différents états d'une page, vous pouvez manipuler la page en utilisant l'API WebDriver, puis lancer un nouveau scan.

Références supplémentaires

Plusieurs méthodes de chaînage sont disponibles pour modifier la façon dont la page est scannée. Ces méthodes incluent des clauses d'exclusion/inclusion ou des portées et des modifications des normes d'accessibilité, des règles d'accessibilité et des ensembles de règles d'accessibilité. Pour plus de concision, toutes les méthodes de chaînage sont couplées avec isAxeClean(), mais elles sont interchangeables avec isAuditedForAccessibility().

Normes d'accessibilité

Deque propose une méthode de chaîne, selon, qui peut spécifier directement quelles normes de test d'accessibilité sont utilisées par un balayage.

Nom de la balise Norme d'accessibilité
wcag2a WCAG 2.0 Niveau A
wcag2aa WCAG 2.0 Niveau AA
wcag2aaa WCAG 2.0 Niveau AAA
wcag21a WCAG 2.1 Niveau A
wcag21aa WCAG 2.1 Niveau AA
wcag21aaa WCAG 2.1 Niveau AAA
wcag22a WCAG 2.2 Niveau A
wcag22aa WCAG 2.2 Niveau AA
wcag22aaa WCAG 2.2 Niveau AAA
section508 Section 508
EN-301-549 EN 301 549
RGAAv4 Version RGAA 4
TTv5 Trusted Tester v5
meilleure-pratique Bonnes pratiques approuvées par Deque

Si vous ne savez pas quelle norme est faite pour vous, lisez la documentation axe-core pour savoir quelles règles sont associées à quelle norme, ou contactez-nous par l'intermédiaire de votre représentant Deque ou de notre service d'assistance. Pour une liste complète des règles appliquées à chaque norme, consultez cette page sur Descriptions des Règles

Pour utiliser une norme unique, il suffit d'ajouter la méthode de chaîne selon et de passer votre norme souhaitée

assertThat(axedriver, isAxeClean().accordingTo("wcag2a"));

Pour analyser selon deux normes de test ou plus, transmettez-les toutes en un seul appel. Appeler accordingTo une seconde fois remplace les normes du premier appel au lieu de les ajouter.

assertThat(axedriver, isAxeClean().accordingTo("wcag2a", "section508"));

Délimitation

Deque propose deux méthodes chaînées pour aider à délimiter les scans. La méthode within() modifie le scan pour ne scanner que la page dans les limites du sélecteur qui lui est passé. La méthode excluding() fonctionne à l'inverse. Elle modifie le scan pour ignorer le contenu à l'intérieur du sélecteur qui lui est passé. Les exemples ci-dessous montrent tous la méthode within(), mais la méthode excluding() fonctionne de manière identique.

De manière simple, l'assertion est modifiée avec un seul sélecteur

assertThat(axedriver, isAxeClean().within("#selector1")); 

Les sélecteurs composés sont également possibles. Dans l'exemple ci-dessous, seuls les éléments avec le sélecteur 2 à l'intérieur du sélecteur 1 sont analysés

assertThat(axedriver, isAxeClean().within("#selector1 .selector2"));

Il existe trois manières d'effectuer une sélection multiple, ou de sélectionner plusieurs portées à tester. Dans tous ces exemples, les éléments sont à l'intérieur du sélecteur 1 et sélecteur 2.

assertThat(axedriver, isAxeClean().within("#selector1, .selector2"));
assertThat(axedriver, isAxeClean().within("#selector1", ".selector2"));
assertThat(axedriver, isAxeClean().within("#selector1").within(".selector2"));

Pour délimiter à l'intérieur d'un IFrame, un sélecteur d'IFrame doit être déclaré. La portée à analyser à l'intérieur de l'IFrame est passée en tant que paramètre supplémentaire.

assertThat(axedriver, isAxeClean().within(new IFrameSelector("#frame1", "#selector1")));

La délimitation à l'intérieur de plusieurs IFrames fonctionne de la même manière que la sélection multiple standard. Il suffit de créer deux sélecteurs d'IFrame ou plus séparés par des virgules.

assertThat(axedriver, isAxeClean().within(new IFrameSelector("#frame1", "selector1"), 
        new IFrameSelector("#frame2", "#selector2")));

Il est également possible de délimiter à l'intérieur d'IFrames imbriqués. Cet exemple montre une analyse de l'intérieur du sélecteur 1 d'un IFrame qui se trouve à l'intérieur d'un deuxième IFrame.

assertThat(axedriver, isAxeClean().within(
    new IFrameSelector("#frame1",
    new IFrameSelector("#frame2", "#selector1"))));

Enfin, il est possible de définir plusieurs portées au sein d'une page ainsi qu'au sein d'une IFrame. Pour que cela fonctionne, un objet sélecteur d'éléments est nécessaire.

assertThat(axedriver, isAxeClean().within(
    new ElementSelector("#selector1"),
    new ElementSelector("#selector2"),
    new IFrameSelector("#frame", "selector3")));

Sélection des règles

L'API offre également la possibilité de modifier les règles utilisées dans une analyse. Il existe trois façons de modifier les règles utilisées : vérifier des règles supplémentaires en dehors de l'ensemble de règles standard pour l'analyse, ne pas vérifier les règles de l'ensemble de règles standard pour l'analyse, et vérifier uniquement celles qui sont spécifiquement définies.

Pour une liste complète des balises de règles valides que vous pouvez utiliser avec ces méthodes et ce qu'elles testent, lisez la documentation sur les règles

Pour vérifier des règles supplémentaires, utilisez la méthode checking. Pour tester une seule règle supplémentaire, il suffit de passer l'étiquette de la règle dans la méthode checking

assertThat(axedriver, isAxeClean().checking("label"));

Pour vérifier plusieurs règles supplémentaires, transmettez-les toutes en un seul appel. Appeler checking une seconde fois remplace les règles du premier appel au lieu de les ajouter.

assertThat(axedriver, isAxeClean().checking("label", "tabindex"));

La méthode checking peut également être enchaînée avec une méthode de sélection de règles.

assertThat(axedriver, isAxeClean().accordingTo("wcag2a").checking("tabindex"));

Il est également possible d'omettre des règles d'une analyse. Cela est possible grâce à la méthode skipping. Elle fonctionne de manière identique à la méthode checking sauf qu'elle exclut des règles au lieu de les ajouter.

assertThat(axedriver, isAxeClean().skipping("label"));

Pour omettre plusieurs règles, transmettez-les toutes en un seul appel. Comme avec checking, un deuxième appel à skipping remplace les règles du premier.

assertThat(axedriver, isAxeClean().skipping("label", "tabindex"));

Enfin, elle peut également être utilisée avec une méthode de sélection de règles.

assertThat(axedriver, isAxeClean().accordingTo("wcag2a").skipping("label"));

checking et skipping définissent la même option, donc seul le dernier des deux appels dans une chaîne prend effet. Ne les combinez pas dans la même analyse.

La dernière méthode est utilisée lorsque seules des règles spécifiques sont souhaitées. La méthode de vérification seule modifie l'analyse pour vérifier uniquement les règles explicitement passées. checkingOnly et accordingTo définissent la même option, donc seul le dernier des deux prend effet. Pour vérifier seulement une règle :

assertThat(axedriver, isAxeClean().checkingOnly("label"));

Pour vérifier plusieurs règles, transmettez-les toutes en un seul appel. Un deuxième appel à checkingOnly remplace les règles du premier.

assertThat(axedriver, isAxeClean().checkingOnly("label", "tabindex"));

Pour une liste complète des balises de règles valides que vous pouvez utiliser avec ces méthodes et ce qu'elles testent, lisez le documentation sur les règles.

Ignorer les violations

Il est possible de configurer l'analyse pour ignorer des instances spécifiques de violations. Pour ce faire, la méthode d'ignorance est utilisée. Elle fonctionne en passant le target de l'élément que vous souhaitez ignorer, tel qu'il apparaît dans les résultats, associé à la règle qu'il viole. La cible est écrite de la façon dont Java imprime une liste, avec le sélecteur entre crochets, tel que "[.sidebar]". Un appel à ignoring par règle suffit, car une correspondance supprime l'entrée entière de la règle. Ne l'appelez pas deux fois pour la même règle : si les deux cibles correspondent à des éléments en échec, l'analyse renvoie une IllegalStateException.

assertThat(axedriver, isAxeClean()
    .ignoring("[.sidebar]", "color-contrast")
    .ignoring("[#branded-content]", "image-alt"));

Si la cible correspond à un élément qui échoue la règle, l'entrée entière de la règle est supprimée des violations, y compris les échecs sur d'autres éléments. Voir ignoring(String, String) dans la référence API.

Service d'utilisation

Obtenez des informations sur les tendances d'utilisation de Axe DevTools au sein de votre organisation

Par défaut, le service d'utilisation est activé et l'URL par défaut est https://usage.deque.com. Définissez la variable d'environnement AXE_TRACK_USAGE sur false pour le désactiver. Si vos événements d'utilisation n'atteignent pas Deque, définissez explicitement la variable d'environnement AXE_METRICS_URL.

Variables d'environnement

Ces variables d'environnement vous permettent de configurer le service d'utilisation et de modifier les propriétés des événements rapportés.

Nom Type Peut remplacer Description
AXE_DISTINCT_ID Chaîne de caractères — Un identifiant UUID qui reste le même pour l'utilisateur connecté (sauf s'il est régénéré). En Ruby, cette variable est nommée DEQUE_DISTINCT_ID.
AXE_INCLUDE_TEST_RESULTS Booléen — Définir sur true pour inclure les résultats complets de axe-core dans l'objet testResults de chaque événement (la valeur par défaut est false). Pris en charge uniquement par la CLI et les API Node.js.
AXE_METRICS_URL Chaîne de caractères — L'URL du point de terminaison de l'utilisation REST (la valeur par défaut est https://usage.deque.com)
AXE_TRACK_USAGE Booléen — Définir sur false pour désactiver le rapport de service d'utilisation. Le rapport est activé par défaut.
AXE_ACTOR Chaîne de caractères — Définissez sur human ou automation pour remplacer si les événements enregistrent une personne ou un pipeline automatisé comme exécutant les tests. Par défaut, automation est détecté à partir des variables d'environnement CI courantes. Pris en charge uniquement par le CLI, les API Node.js et l'API Ruby.
AXE_APPLICATION Chaîne de caractères faux L'application qui a été utilisée pour vérifier les erreurs d'accessibilité
AXE_DEV_INSTANCE Booléen vrai Indique si cet événement provient d'actions d'un développeur logiciel. Utile pour marquer et supprimer ensuite les événements enregistrés pendant le développement ou les tests.
AXE_DEPARTMENT Chaîne de caractères vrai Le département de l'utilisateur au sein de l'organisation
AXE_KEYCLOAK_ID Chaîne de caractères faux L'ID Keycloak de l'utilisateur
AXE_LOGGED_IN Booléen faux Enregistre si l'utilisateur est connecté à l'application en test
AXE_ORGANIZATION Chaîne de caractères vrai L'organisation de l'utilisateur. Pour que votre utilisation apparaisse dans Axe Reports, définissez ceci sur l'ID de votre organisation (contactez Deque pour l'obtenir).
AXE_SESSION_ID Chaîne de caractères faux Un UUID identifiant la session de l'utilisateur
AXE_TEAMS Chaîne de caractères faux Les équipes exécutant les tests, sous la forme d'un tableau JSON d'objets { "id": "...", "name": "..." } ou du chemin vers un fichier JSON en contenant un. Une valeur passée à l'option --set-teams du CLI, à la méthode setTeams d'une API Node.js, ou à la clause for_teams ou la propriété de configuration teams de l'API Ruby a priorité. Pris en charge uniquement par le CLI, les API Node.js et l'API Ruby.
AXE_USER_ID Chaîne de caractères faux L'identité d'un utilisateur spécifique, telle qu'une adresse e-mail, un nom ou un identifiant de connexion. Axe Reports compte les utilisateurs uniques à partir de cette valeur.
AXE_USER_JOB_ROLE Chaîne de caractères faux Le rôle professionnel de l'utilisateur
AXE_USER_STATUS Chaîne de caractères faux Informations de statut que vous souhaitez associer à l'utilisateur

Étapes suivantes

Pour une utilisation plus poussée de vos résultats d'analyse Axe DevTools, comme le reporting, consultez la documentation du package Axe DevTools Java Selenium

Dépannage

Si vous rencontrez des problèmes lors de la configuration de vos tests d'accessibilité, contactez directement votre représentant Deque, contactez-nous via notre service d'assistance ou envoyez-nous un e-mail. Nous serons heureux de vous aider à lancer vos efforts de tests d'accessibilité.