Strumenti

Pa11y

Strumento di test di accessibilità open source da riga di comando. Il compagno CI-friendly di axe-core CLI; pa11y-ci alimenta i flussi di lavoro notturni di regressione sull'accessibilità dell'intero sito nei principali programmi di accessibilità aziendali.

Pa11y è uno strumento di test automatizzato per l’accessibilità open source. Originariamente sviluppato presso il Nature Publishing Group e ora mantenuto da una community indipendente, Pa11y è lo strumento di riferimento per «i test di accessibilità in CI» nell’ultimo decennio.

Cosa fa Pa11y

Pa11y da riga di comando accetta un URL, esegue controlli di accessibilità sulla pagina renderizzata e restituisce un elenco di violazioni:

$ pa11y https://example.com
Welcome to Pa11y

> Running Pa11y on 1 URLs:
...

Error: This element does not have an attribute "alt".
   • Element: <img src="..." />
   • Code: HTML_CS.Principle1.Guideline1_1.1_1_1.H37
   • Selector: body > section:nth-child(2) > img

Pa11y viene eseguito in un browser headless (con Puppeteer o Playwright come motore sottostante), quindi vede il DOM renderizzato — non solo il sorgente HTML — il che significa che può sottoporre ad audit i contenuti generati da JavaScript così come li incontra un utente reale.

Runner supportati

Pa11y ha storicamente supportato due motori di regole:

  • HTML_CodeSniffer (il default; lo storico backbone di Pa11y).
  • axe-core (tramite pa11y --runner axe).

È possibile eseguirli entrambi contemporaneamente e unire i risultati — una modalità «tutto ciò che riesco a rilevare automaticamente». La maggior parte delle implementazioni moderne di Pa11y usa il runner axe-core in via esclusiva, perché axe-core dispone dello sviluppo di regole più attivo.

pa11y-ci — il flusso di lavoro multi-URL

Il caso d’uso principale è pa11y-ci, un wrapper che esegue Pa11y su molti URL contemporaneamente e restituisce il codice di stato appropriato per la CI:

$ pa11y-ci --sitemap https://example.com/sitemap.xml

È esattamente il flusso di lavoro che la maggior parte dei programmi di accessibilità adotta per le regressioni notturne: si alimenta la sitemap del sito in pa11y-ci con una pianificazione cron, si fa fallire la build se compaiono nuove violazioni, e si invia un avviso quando il conteggio delle violazioni aumenta.

La configurazione risiede in .pa11yci (o in un file JSON) e consente esclusioni per singolo URL, soglie di severità, dimensioni del viewport, azioni personalizzate (login, click-through) e altre forme di automazione.

Pa11y vs axe-core vs Lighthouse

Un modello mentale ragionevole:

  • axe-core è il motore di regole — la libreria di rilevamento sottostante. Lo si utilizza tramite un wrapper.
  • Lighthouse è un wrapper, ottimizzato per audit di qualità dell’intero sito (Prestazioni + Accessibilità + Best Practice + SEO).
  • Pa11y è un altro wrapper, ottimizzato per il blocco della CI focalizzato sull’accessibilità su molti URL su larga scala.
  • axe-core CLI è il terzo — axe nudo, senza il wrapper Pa11y, anch’esso adatto alla CI.

Per approfondimenti su singola pagina, Lighthouse è la scelta migliore. Per i test di regressione sull’intero sito con molti URL, Pa11y è il default pratico. Per i controlli PR che bloccano la build su un singolo URL, axe-core CLI o Lighthouse-CI funzionano entrambi correttamente.

Limitazioni

Pa11y eredita tutte le limitazioni degli strumenti automatizzati:

  • Dal 30 al 40% dei problemi WCAG è rilevabile automaticamente; il resto richiede il giudizio umano.
  • Non è in grado di testare la navigazione da tastiera, l’ordine di focus o il comportamento degli screen reader.
  • Viene eseguito in un browser headless, quindi non riesce a individuare i problemi che compaiono solo durante la reale interazione dell’utente (rage-click, abbandono del modulo, sovrapposizioni impreviste di modal).

Tuttavia, entro il tetto del rilevamento automatico, Pa11y è lo strumento operativamente più flessibile tra le principali opzioni — in particolare quando il perimetro dell’audit è «l’intero sito, ogni notte» anziché «questa specifica PR».