vendredi 25 septembre 2026

À propos

Contact

Tests

Tests d’accessibilité automatisés sur WordPress avec axe-core et Pa11y

Intégrer axe dans Playwright et Pa11y CI dans le pipeline, régler des seuils raisonnables et traiter les faux positifs sans désactiver les règles en bloc.

Par Clément Hadrot • 6 décembre 2022 • 3 min de lecture • Aucun commentaire
Tests d'accessibilité automatisés sur WordPress avec axe-core et Pa11y

Une refonte de thème avait remplacé un menu de navigation accessible au clavier par un composant JavaScript plus moderne visuellement, mais qui piégeait le focus dès qu’un visiteur au clavier y entrait, sans moyen d’en sortir autrement qu’en rechargeant la page. Aucun test fonctionnel classique n’aurait détecté ce problème, puisque la souris permettait de contourner le piège sans jamais s’en apercevoir. Intégrer axe-core dans les tests de bout en bout aurait signalé ce piège au clavier avant la mise en production.

Il faut poser une limite claire dès le départ : les outils automatisés d’accessibilité, aussi bons soient-ils, ne couvrent qu’une fraction des critères WCAG — l’ordre de grandeur généralement admis tourne autour d’un tiers. Contraste insuffisant, attribut alt manquant ou structure de titres incohérente se détectent bien automatiquement ; la pertinence d’un texte alternatif ou la cohérence logique d’un parcours au clavier demandent toujours un test humain.

Intégrer axe-core dans des tests Playwright

npm install --save-dev @axe-core/playwright

import { test, expect } from '@playwright/test';
import AxeBuilder from '@axe-core/playwright';

test('la page produit ne contient pas de violation critique', async ( { page } ) => {
    await page.goto( '/boutique/produit-exemple/' );

    const resultats = await new AxeBuilder( { page } ).analyze();

    const violationsCritiques = resultats.violations.filter(
        v => v.impact === 'critical' || v.impact === 'serious'
    );

    expect( violationsCritiques ).toEqual( [] );
});

Filtrer sur les niveaux d’impact critical et serious permet de bloquer réellement le pipeline sur les problèmes les plus graves, sans faire échouer chaque build sur des remarques mineures qui méritent une revue humaine plutôt qu’un blocage automatique.

Pa11y CI pour balayer plusieurs gabarits de page

Là où axe-core s’intègre bien à des tests ciblés, Pa11y CI est pensé pour auditer une liste de pages en une seule commande, ce qui convient bien à une vérification rapide de plusieurs gabarits :

npm install --save-dev pa11y-ci

// .pa11yci.json
{
  "defaults": {
    "standard": "WCAG2AA",
    "timeout": 10000
  },
  "urls": [
    "http://localhost:8080/",
    "http://localhost:8080/boutique/",
    "http://localhost:8080/contact/"
  ]
}
L'essentiel à retenir : axe-core détecte environ un tiers des critères WCAG automatisables ; Pa11y CI compare plusieurs pages en une seule commande ; Un faux positif documenté vaut mieux qu'une règle désactivée globalement
npx pa11y-ci

Traiter les faux positifs sans désactiver la règle globalement

Un cas fréquent : un widget tiers, comme un lecteur vidéo intégré, génère une alerte de contraste sur des éléments que le projet ne maîtrise pas. Le réflexe à éviter est de désactiver la règle de contraste pour tout le site. La bonne pratique consiste à ignorer précisément le sélecteur concerné :

{
  "urls": [
    {
      "url": "http://localhost:8080/contact/",
      "hideElements": ".lecteur-video-tiers"
    }
  ]
}
  • Documenter dans le fichier de configuration pourquoi chaque exception existe
  • Revoir périodiquement la liste des exceptions : un widget mis à jour peut avoir corrigé le problème entre-temps
  • Ne jamais désactiver une règle entière pour tout le site à cause d’un seul composant tiers

Notre verdict

axe-core et Pa11y CI attrapent efficacement une large part des régressions techniques d’accessibilité avant qu’elles n’atteignent la production, à condition de bien cibler les niveaux de sévérité et de documenter chaque exception. Ils ne remplacent en rien un audit manuel avec lecteur d’écran et navigation clavier complète, qui reste indispensable pour les critères que l’automatisation ne peut tout simplement pas juger.

Partager :

À propos de l'auteur

Clément Hadrot

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi