É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

Utilisation des Matchers Hamcrest avec Axe DevTools

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.

Écriture des 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 du test de plusieurs pages, vous pouvez répéter le processus de récupération et de balayage sans avoir besoin de créer de nouvelles instances des pilotes. Afin de balayer différents états d'une page, vous pouvez manipuler la page en utilisant l'API webdriver, puis lancer un nouveau balayage.

Référence supplémentaire

Plusieurs méthodes de chaînage sont disponibles pour modifier la façon dont la page est balayée. Ces méthodes comprennent des clauses d'exclusion/inclusion ou la limitation et les modifications des normes d'accessibilité, des règles d'accessibilité et des ensembles de règles d'accessibilité. Pour des raisons de brièveté, toutes les méthodes de chaîne sont couplées à 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.0 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"));

En plus d'utiliser une norme de test unique, il existe deux façons de balayer contre deux ou plusieurs normes de test. Les deux fonctionnent de manière identique.

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

Délimitation

Deque propose deux méthodes enchaînées pour aider à la délimitation des analyses. La méthode within() modifie l'analyse pour ne scanner que la page dans les limites du sélecteur passé en paramètre. La méthode excluding() fonctionne de manière opposée. Elle modifie l'analyse pour ignorer le contenu à l'intérieur du sélecteur passé en paramètre. 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 à l'intérieur d'une page ainsi qu'à l'intérieur d'un IFrame. Pour que cela fonctionne, un objet sélecteur d'élément est nécessaire.

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

Sélection de 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"));

Comme pour les autres méthodes enchaînées, plusieurs règles supplémentaires peuvent être vérifiées avec la méthode checking de deux manières :

assertThat(axedriver, isAxeClean().checking("label", "tabindex"));
assertThat(axedriver, isAxeClean().checking("label").checking("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"));

Elle peut également être utilisée pour omettre plusieurs règles.

assertThat(axedriver, isAxeClean().skipping("label", "tabindex"));
assertThat(axedriver, isAxeClean().skipping("label").skipping("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"));

La dernière méthode est utilisée lorsque seules des règles spécifiques sont souhaitées. La méthode checking only modifie l'analyse pour vérifier uniquement les règles explicitement passées en paramètre. De plus, cette méthode ne s’enchaînera pas avec la méthode de sélection des standards d'accessibilité. Pour vérifier une seule règle :

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

Cette méthode peut également être utilisée pour vérifier plusieurs règles de deux manières.

assertThat(axedriver, isAxeClean().checkingOnly("label", "tabindex"));
assertThat(axedriver, isAxeClean().checkingOnly("label").checkingOnly("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 la 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, on utilise la méthode ignoring. Elle fonctionne en passant le(s) sélecteur(s) des éléments que vous souhaitez ignorer sous forme de tableau, accompagné de la règle qu'ils violent.

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

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_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_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é.