É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
Not for use with personal data

Utilisation de Hamcrest Matchers avec axe DevTools

Prérequis

Afin d'écrire des tests d'accessibilité et de produire des résultats, vous devez avoir déjà 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 tests unitaires ou dans des étapes de Cucumber personnalisées.

Choisir une méthode de numérisation

Comme indiqué dans les instructions d’importation, il existe deux méthodes d’analyse d’accessibilité. Le premier, isAxeClean, lèvera une exception et arrêtera les tests si des violations sont détectées. Le deuxième, isAuditedForAccessibility, n'arrêtera pas les tests ni ne lèvera d'exception quel que soit le niveau d'accessibilité de la page analysée.

Rédaction de tests

Pour les exemples restants, la méthode isAxeClean est présentée par souci de concision, mais les deux méthodes fonctionnent de manière interchangeable. Avec vos objets WebDriver et AxeDriver instanciés et initialisés, créer une analyse 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 analyser.

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

Lorsque vous testez plusieurs pages, vous pouvez répéter le processus de get et scan sans avoir à créer de nouvelles instances des pilotes. Afin d'analyser différents états d'une page, vous pouvez manipuler la page à l'aide de l'API Webdriver, puis exécuter une nouvelle analyse.

Références supplémentaires

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

Normes d'accessibilité

Deque propose une méthode en chaîne qui permet de spécifier directement les normes de test d'accessibilité utilisées par une analyse.

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
TTv5 Trusted Tester v5
best-practice Bonnes pratiques endossées par Deque

Si vous n'êtes pas sûr de la norme qui vous convient, lisez la documentation d'axe-core pour savoir quelles règles sont associées à quelle norme, ou contactez-nous via votre représentant Deque ou notre service d'assistance. Pour une liste complète des règles applicables à chaque norme, consultez cette page sur Descriptions des règles

Pour utiliser une seule norme, ajoutez simplement la méthode de chaînage correspondante et transmettez la norme souhaitée

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

En plus d'utiliser une norme de test, il existe deux façons d'effectuer une analyse par rapport à 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"));

Portée

Deque propose deux méthodes enchaînées pour aider à la définition de la portée des analyses. La méthode within() modifie l'analyse pour analyser uniquement la page dans les limites du sélecteur qui lui est passé. La méthode excluding() fonctionne dans le sens inverse. Il modifie l'analyse pour ignorer le contenu du sélecteur qui lui est transmis. Les exemples ci-dessous montrent tous la méthode within(), mais la méthode excluding() fonctionne de manière identique.

Plus simplement, l'assertion est modifiée avec un sélecteur

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

Des sélecteurs composés sont également possibles. Dans l'exemple ci-dessous, seuls les éléments avec le sélecteur 2 au sein des éléments du sélecteur 1 sont analysés

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

Il existe trois façons d'effectuer une sélection multiple ou de sélectionner plusieurs étendues à tester. Dans tous ces exemples, les éléments au sein du sélecteur 1 et du sélecteur 2.

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

Afin de définir une portée dans un IFrame, un sélecteur IFrame doit être déclaré. La portée à analyser dans l'IFrame est transmise en tant que paramètre supplémentaire.

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

Le ciblage dans plusieurs IFrames fonctionne de la même manière que la sélection multiple standard. Créez simplement deux ou plusieurs sélecteurs IFrame séparés par des virgules.

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

Il est également possible de cibler au sein d'IFrames imbriquées. Cet exemple montre le ciblage d'une analyse dans le 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 cibler plusieurs zones au sein d'une page ainsi qu'au sein d'un IFrame. Pour que cela fonctionne, un objet sélecteur d’élément est requis.

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. Il s'agit de vérifier des règles supplémentaires en dehors de l'ensemble de règles standard pour l'analyse. Il ne faut pas vérifier les règles dans l'ensemble de règles standard pour l'analyse. On doit vérifier uniquement les règles explicitement spécifiées.

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 de vérification. Pour tester une seule règle supplémentaire, passez simplement l'étiquette de la règle dans la méthode de vérification

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

Similairement aux autres méthodes de chaîne, plusieurs règles supplémentaires peuvent être vérifiées avec la méthode de vérification de deux manières :

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

La méthode de vérification peut également être chaînée avec une méthode de sélection de règle.

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

L'option existe également pour omettre des règles d'un balayage. Ceci est possible grâce à la méthode ignorant. Son fonctionnement est identique à la méthode de vérification, sauf qu'il laisse de côté les règles au lieu de les ajouter.

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

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

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

Enfin, il peut également être utilisé 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 de vérification seulement modifie l'analyse pour vérifier uniquement les règles qui lui sont explicitement transmises. De plus, cette méthode ne sera pas chaînée à la méthode de sélection des normes 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 cas spécifiques de violations. Pour ce faire, la méthode d'ignorance est utilisée. Cela fonctionne en passant les sélecteurs des éléments que vous souhaitez ignorer sous forme de tableau, couplés à la règle qu'ils violent.

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

Service d'utilisation

Approfondissez votre compréhension des tendances d'utilisation d'axe DevTools au sein de votre organisation

Par défaut, le service d'utilisation est désactivé et l'URL par défaut est https://usage.deque.com.

Variables d'environnement

Cette méthode permet aux utilisateurs de modifier des valeurs spécifiques du service d'utilisation via des variables d'environnement

Variable d'environnement Type Description
AXE_IS_LOGGED_IN Booléen Si l'utilisateur est connecté à l'application testée
AXE_KEYCLOAK_ID Chaîne L'identifiant keycloak de l'utilisateur connecté
AXE_USER_ID Chaîne Le nom de l'utilisateur qui exécute le test
AXE_SESSION_ID Chaîne Description de la séance de test
AXE_STATUT_UTILISATEUR Chaîne Le statut de l'utilisateur
AXE_RÔLE_TRAVAIL_UTILISATEUR Chaîne Le titre/rôle de la personne effectuant le test
AXE_DISTINCT_ID Chaîne L'identifiant distinct d'un utilisateur individuel
AXE_EST_INSTANCE_DEV Booléen Si l'application testée est dans une instance de développement
AXE_ORGANISATION Chaîne L'organisation de l'utilisateur - organisant des données à l'échelle de l'entreprise
AXE_APPLICATION Chaîne Le nom de l'application testée
AXE_METRICS_URL Chaîne L'URL vers laquelle les données d'utilisation sont envoyées
AXE_TRACK_USAGE Booléen Si les données d'utilisation sont capturées ou non

Prochaines étapes

Pour une utilisation ultérieure des résultats de votre analyse axe DevTools, comme la création de rapports, 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 sommes heureux de vous aider à démarrer vos efforts de tests d'accessibilité.