Scrivere Test con Hamcrest
Scrivere test di accessibilità utilizzando i matcher Hamcrest con Axe DevTools for Web per Java
Utilizzo dei Matcher Hamcrest con Axe DevTools
Prerequisiti
Per scrivere test di accessibilità e produrre risultati, è necessario aver già creato un file di test con Axe DevTools e importato e inizializzato a priori il tuo Selenium WebDriver preferito. Se non l'hai fatto ancora, leggi questa guida su come procedere.
È stato fornito un insieme di matcher per i test di accessibilità attraverso hamcrest utilizzando Selenium WebDriver. Questi matcher possono essere usati in un framework di test unitario o in passaggi cucumber personalizzati.
Scelta di un metodo di scansione
Come visto nelle dichiarazioni di importazione, ci sono due metodi di scansione dell'accessibilità. Il primo, isAxeClean, genererà un'eccezione e fermerà i test se vengono trovate delle violazioni. Il secondo, isAuditedForAccessibility, non fermerà i test né genererà un'eccezione indipendentemente dal livello di accessibilità della pagina scansionata.
Scrivere Test
Per i restanti esempi, il metodo isAxeClean è mostrato per brevità, ma entrambi i metodi funzionano in modo intercambiabile. Con i tuoi oggetti WebDriver e AxeDriver istanziati e inizializzati, creare una scansione è semplice come aggiungere queste due righe di codice a un metodo di test. Sostituisci $URL con l'URL desiderato della pagina che desideri scansionare.
webDriver.get("$URL");
assertThat(axedriver, isAxeClean());Quando si testano più pagine, è possibile ripetere il processo di get e scan senza dover creare nuove istanze dei driver. Per scansionare diversi stati di una pagina, puoi manipolare la pagina utilizzando l'API del webdriver e quindi eseguire una nuova scansione.
Riferimento Aggiuntivo
Sono disponibili diversi metodi di concatenazione per modificare il modo in cui la pagina viene scansionata. Questi metodi includono clausole di esclusione/inclusione o delimitazione e modifiche degli standard di accessibilità, delle regole di accessibilità e dei set delle regole di accessibilità. Per brevità, tutti i metodi di concatenazione sono abbinati a isAxeClean(), ma sono intercambiabili con isAuditedForAccessibility().
Standard di Accessibilità
Deque offre un metodo di concatenazione, secondo cui, che può specificare direttamente quali standard di test di accessibilità sono utilizzati da una scansione.
| Nome Tag | Standard di Accessibilità |
|---|---|
| wcag2a | WCAG 2.0 Livello A |
| wcag2aa | WCAG 2.0 Livello AA |
| wcag2aaa | WCAG 2.0 Livello AAA |
| wcag21a | WCAG 2.1 Livello A |
| wcag21aa | WCAG 2.1 Livello AA |
| wcag21aaa | WCAG 2.0 Livello AAA |
| wcag22a | WCAG 2.2 Livello A |
| wcag22aa | WCAG 2.2 Livello AA |
| wcag22aaa | WCAG 2.2 Livello AAA |
| section508 | Sezione 508 |
| EN-301-549 | EN 301 549 |
| RGAAv4 | Versione RGAA 4 |
| TTv5 | Tester Fidato v5 |
| miglior-pratica | Migliori pratiche approvate da Deque |
Se non sei sicuro di quale standard sia adatto a te, leggi la documentazione di axe-core su quali regole sono associate a quale standard, o contattaci tramite il tuo rappresentante Deque o il nostro help desk. Per un elenco completo di quali regole si applicano a ciascun standard, visualizza questa pagina su Descrizioni delle Regole
Per utilizzare un singolo standard, aggiungi semplicemente il metodo di concatenazione secondo e passa lo standard desiderato
assertThat(axedriver, isAxeClean().accordingTo("wcag2a"));Oltre a utilizzare un singolo standard di test, ci sono due modi per scansionare contro due o più standard di test. Entrambi funzionano in modo identico.
assertThat(axedriver, isAxeClean().accordingTo("wcag2a", "section508"));
assertThat(axedriver, isAxeClean().accordingTo("wcag2a").accordingTo("section508"));Scoping
Deque offre due metodi concatenati per assistere nella definizione dell'ambito delle scansioni. Il metodo within() modifica la scansione affinché riguardi solo la parte della pagina all'interno dei limiti del selettore passato. Il metodo excluding() funziona all'inverso. Esso modifica la scansione ignorando il contenuto all'interno del selettore passato. Gli esempi sottostanti mostrano tutti il metodo within(), ma il metodo excluding() funziona nello stesso modo.
In modo molto semplice, l'asserzione viene modificata con un selettore
assertThat(axedriver, isAxeClean().within("#selector1")); Sono anche possibili selettori composti. Nell'esempio sottostante, vengono scansionati solo gli elementi del selettore 2 all'interno del selettore 1
assertThat(axedriver, isAxeClean().within("#selector1 .selector2"));Esistono tre modi per effettuare una selezione multipla, o selezionare più ambiti da testare. In tutti questi esempi, gli elementi all'interno del selettore 1 e selettore 2.
assertThat(axedriver, isAxeClean().within("#selector1, .selector2"));
assertThat(axedriver, isAxeClean().within("#selector1", ".selector2"));
assertThat(axedriver, isAxeClean().within("#selector1").within(".selector2"));Per definire un ambito all'interno di un IFrame, è necessario dichiarare un selettore di IFrame. L'ambito da scansionare all'interno dell'IFrame viene passato come parametro aggiuntivo.
assertThat(axedriver, isAxeClean().within(new IFrameSelector("#frame1", "#selector1")));Definire l'ambito all'interno di più IFrame funziona allo stesso modo della selezione multipla standard. Basta creare due o più selettori di IFrame separati da virgole.
assertThat(axedriver, isAxeClean().within(new IFrameSelector("#frame1", "selector1"),
new IFrameSelector("#frame2", "#selector2")));È anche possibile definire l'ambito all'interno di IFrame annidati. Questo esempio mostra come definire l'ambito di una scansione all'interno del selettore 1 di un IFrame che si trova all'interno di un secondo IFrame.
assertThat(axedriver, isAxeClean().within(
new IFrameSelector("#frame1",
new IFrameSelector("#frame2", "#selector1"))));Infine, è possibile impostare più ambiti sia all'interno di una pagina che di un IFrame. Per far funzionare ciò, è necessario un oggetto selettore di elementi.
assertThat(axedriver, isAxeClean().within(
new ElementSelector("#selector1"),
new ElementSelector("#selector2"),
new IFrameSelector("#frame", "selector3")));Selezione delle regole
L'API offre anche la possibilità di modificare quali regole vengono utilizzate in una scansione. Ci sono tre modi per modificare le regole utilizzate: verificare regole aggiuntive al di fuori del set di regole standard per la scansione, non verificare regole all'interno del set di regole standard per la scansione, e verificare solo quelle regole specificate esplicitamente.
Per un elenco completo dei tag di regola validi che puoi usare con questi metodi e per cosa testano, leggi la documentazione sulle regole
Per controllare regole aggiuntive, utilizza il metodo checking. Per testare una singola regola aggiuntiva, basta passare l'etichetta della regola nel metodo checking
assertThat(axedriver, isAxeClean().checking("label"));Simile agli altri metodi concatenati, più regole aggiuntive possono essere controllate con il metodo checking in due modi:
assertThat(axedriver, isAxeClean().checking("label", "tabindex"));
assertThat(axedriver, isAxeClean().checking("label").checking("tabindex"));Il metodo checking può essere concatenato anche con un metodo di selezione delle regole.
assertThat(axedriver, isAxeClean().accordingTo("wcag2a").checking("tabindex"));L'opzione esiste anche per omettere regole da una scansione. Questo è possibile attraverso il metodo skipping. Funziona in modo identico al metodo checking, eccetto che omette le regole invece di aggiungerle.
assertThat(axedriver, isAxeClean().skipping("label"));Può essere usato anche per omettere più regole.
assertThat(axedriver, isAxeClean().skipping("label", "tabindex"));
assertThat(axedriver, isAxeClean().skipping("label").skipping("tabindex));Infine, può essere usato anche con un metodo di selezione delle regole.
assertThat(axedriver, isAxeClean().accordingTo("wcag2a").skipping("#label"));L'ultimo metodo viene utilizzato quando si desiderano solo regole specifiche. Il metodo checking only modifica la scansione per controllare solo quelle regole esplicitamente passate. Inoltre, questo metodo non si concatena con il metodo di selezione degli standard di accessibilità. Per controllare solo una singola regola:
assertThat(axedriver, isAxeClean().checkingOnly("label"));Questo metodo può essere utilizzato anche per controllare più regole in due modi.
assertThat(axedriver, isAxeClean().checkingOnly("label", "tabindex"));
assertThat(axedriver, isAxeClean().checkingOnly("label").checkingOnly("tabindex"));Per un elenco completo dei tag di regola validi che puoi usare con questi metodi e per cosa testano, leggi la documentazione sulle regole.
Ignorare le violazioni
È possibile configurare la scansione per ignorare casi specifici di violazioni. Per fare ciò, viene utilizzato il metodo ignoring. Funziona passando i selettori degli elementi che vuoi ignorare come array, insieme alla regola che violano.
assertThat(axedriver, isAxeClean().ignoring("[\".sidebar\", \"#branded-content\"]", "color-contrast"));Servizio di utilizzo
Ottieni informazioni sulle tendenze di utilizzo di Axe DevTools all'interno della tua organizzazione
Per impostazione predefinita, il servizio di utilizzo è abilitato e l'URL predefinito è https://usage.deque.com. Imposta la variabile d'ambiente AXE_TRACK_USAGE su false per disabilitarlo. Se gli eventi di utilizzo non raggiungono Deque, imposta esplicitamente la variabile d'ambiente AXE_METRICS_URL.
Variabili d'ambiente
Queste variabili d'ambiente ti consentono di configurare il servizio di utilizzo e modificare le proprietà degli eventi segnalati.
| Nome | Tipo | Può Sovrascrivere | Descrizione |
|---|---|---|---|
AXE_DISTINCT_ID |
Stringa | — | Un identificatore UUID che rimane lo stesso per l'utente connesso (a meno che non venga rigenerato). In Ruby, questa variabile è denominata DEQUE_DISTINCT_ID. |
AXE_INCLUDE_TEST_RESULTS |
Booleano | — | Imposta su true per includere i risultati completi di axe-core nell'oggetto testResults di ogni evento (predefinito è false). Supportato solo dalla CLI e dalle API di Node.js. |
AXE_METRICS_URL |
Stringa | — | L'URL dell'endpoint di utilizzo REST (predefinito è https://usage.deque.com) |
AXE_TRACK_USAGE |
Booleano | — | Imposta su false per disabilitare il servizio di reporting sull'utilizzo. Il reporting è abilitato per impostazione predefinita. |
AXE_APPLICATION |
Stringa | falso | L'applicazione utilizzata per controllare gli errori di accessibilità |
AXE_DEV_INSTANCE |
Booleano | vero | Indica se questo evento è dovuto ad azioni di uno sviluppatore software. Utile per marcare e successivamente rimuovere eventi registrati durante lo sviluppo o i test. |
AXE_DEPARTMENT |
Stringa | vero | Il dipartimento utente all'interno dell'organizzazione |
AXE_KEYCLOAK_ID |
Stringa | falso | L'ID Keycloak dell'utente |
AXE_LOGGED_IN |
Booleano | falso | Registra se l'utente è connesso all'applicazione in test |
AXE_ORGANIZATION |
Stringa | vero | L'organizzazione dell'utente. Per fare sì che il tuo utilizzo appaia nei Rapporti Axe, imposta questo valore sull'ID della tua organizzazione (contatta Deque per ottenerlo). |
AXE_SESSION_ID |
Stringa | falso | Un UUID che identifica la sessione dell'utente |
AXE_USER_ID |
Stringa | falso | L'identità di un utente specifico come un indirizzo email, un nome o un ID di accesso. I Rapporti Axe contano gli utenti unici a partire da questo valore. |
AXE_USER_JOB_ROLE |
Stringa | falso | Il ruolo lavorativo dell'utente |
AXE_USER_STATUS |
Stringa | falso | Informazioni sullo stato che si desidera associare all'utente |
Prossimi passi
Per un utilizzo ulteriore dei risultati della tua scansione con Axe DevTools, come la reportistica, consulta la documentazione del pacchetto Axe DevTools Java Selenium
Risoluzione dei problemi
Se riscontri problemi con la configurazione del tuo test di accessibilità, contatta direttamente il tuo rappresentante Deque, raggiungici tramite il nostro servizio di supporto, o inviaci un'e-mail. Siamo felici di aiutarti a far decollare i tuoi sforzi di test di accessibilità.
