Scrivi i test Hamcrest
Uso di Hamcrest Matchers con axe DevTools
Prerequisiti
Per scrivere test di accessibilità e produrre risultati, è necessario aver già creato un file di test con axe DevTools e il Selenium WebDriver preimportato e preinizializzato. Se non lo hai ancora fatto, leggi questa guida per sapere come farlo.
È stato fornito un set di corrispondenze per i test di accessibilità tramite hamcrest utilizzando Selenium WebDriver. Queste corrispondenze possono essere utilizzate in un framework di test unitari o in passaggi Cucumber personalizzati.
Scelta di un metodo di scansione
Come si vede dalle istruzioni di importazione, sono disponibili due metodi di scansione dell'accessibilità. Il primo, isAxeClean, genererà un'eccezione e interromperà i test se vengono rilevate delle violazioni. Il secondo, isAuditedForAccessibility, non interromperà i test né genererà un'eccezione, indipendentemente dal livello di accessibilità della pagina scansionata.
Scrittura di test
Negli esempi rimanenti, per brevità viene mostrato il metodo isAxeClean, ma entrambi i metodi funzionano in modo intercambiabile. Una volta istanziati e inizializzati gli oggetti WebDriver e AxeDriver, creare una scansione è semplice quanto aggiungere queste due righe di codice a un metodo di test. Sostituisci $URL con l'URL desiderato della pagina che vuoi scansionare.
webDriver.get("$URL");
assertThat(axedriver, isAxeClean());
Quando si testano più pagine, è possibile ripetere il processo di acquisizione e scansione senza dover creare nuove istanze dei driver. Per analizzare diversi stati di una pagina, è possibile manipolare la pagina utilizzando l'API Webdriver e quindi eseguire una nuova scansione.
Riferimento aggiuntivo
Sono disponibili diversi metodi di concatenamento per modificare il modo in cui la pagina viene scansionata. Questi metodi includono clausole di esclusione/inclusione o definizione dell'ambito e modifiche degli standard di accessibilità, delle regole di accessibilità e dei set di regole di accessibilità. Per brevità, tutti i metodi a catena sono associati a isAxeClean(), ma sono intercambiabili con isAuditedForAccessibility().
Standard di accessibilità
Deque offre un metodo a catena, secondo il quale può specificare direttamente quali standard di test di accessibilità vengono utilizzati da una scansione.
Nome del 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 |
TTv5 | Trusted Tester v5 |
best-practice | Le migliori pratiche approvate da Deque |
Se non sei sicuro di quale standard sia adatto a te, leggi la documentazione di axe-core per sapere quali regole sono associate a quale standard, oppure contattaci tramite il tuo rappresentante Deque o il nostro help desk. Per un elenco completo delle regole applicabili a ciascun standard, consultare questa pagina su Descrizioni delle regole
Per utilizzare un singolo standard, basta aggiungere il metodo della catena corrispondente e passare lo standard desiderato
assertThat(axedriver, isAxeClean().accordingTo("wcag2a"));
Oltre all'utilizzo di uno standard di test, esistono due modi per effettuare la scansione rispetto a due o più standard di test. Entrambi funzionano in modo identico.
assertThat(axedriver, isAxeClean().accordingTo("wcag2a", "section508"));
assertThat(axedriver, isAxeClean().accordingTo("wcag2a").accordingTo("section508"));
Ambito di applicazione
Deque offre due metodi incatenati per facilitare la definizione dell'ambito delle scansioni. Il metodo within() modifica la scansione in modo che analizzi solo la pagina compresa nei limiti del selettore passato. Il metodo escludendo() funziona al contrario. Modifica la scansione per ignorare il contenuto all'interno del selettore che gli è stato passato. Gli esempi seguenti mostrano tutti il metodo within(), ma il metodo escludendo() funziona in modo identico.
Più semplicemente, l'asserzione viene modificata con un selettore
assertThat(axedriver, isAxeClean().within("#selector1"));
Sono possibili anche selettori composti. Nell'esempio seguente, vengono scansionati solo gli elementi con selettore 2 all'interno del selettore 1
assertThat(axedriver, isAxeClean().within("#selector1 .selector2"));
Esistono tre modi per effettuare una selezione multipla, ovvero selezionare più ambiti in cui effettuare il test. 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 l'ambito all'interno di un IFrame, è necessario dichiarare un selettore IFrame. L'ambito da scansionare all'interno dell'IFrame viene passato come parametro aggiuntivo.
assertThat(axedriver, isAxeClean().within(new IFrameSelector("#frame1", "#selector1")));
L'ambito all'interno di più IFrame funziona allo stesso modo della selezione multipla standard. Basta creare due o più selettori 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 nidificati. 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 all'interno di un IFrame. Affinché ciò funzioni, è 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 le regole utilizzate in una scansione. Esistono tre modi per modificare le regole utilizzate. Questi includono il controllo di regole aggiuntive al di fuori del set di regole standard, l'omissione del controllo delle regole all'interno del set standard e il controllo solo delle regole specificate esplicitamente.
Per un elenco completo dei tag di regole validi che puoi utilizzare con questi metodi e per cosa testano, leggi la documentazione sulle regole
Per verificare ulteriori regole, usa il metodo di controllo. Per testare una singola regola aggiuntiva, basta passare l'etichetta della regola al metodo di controllo
assertThat(axedriver, isAxeClean().checking("label"));
Similmente agli altri metodi a catena, puoi verificare più regole aggiuntive con il metodo di controllo in due modi:
assertThat(axedriver, isAxeClean().checking("label", "tabindex"));
assertThat(axedriver, isAxeClean().checking("label").checking("tabindex"));
Il metodo di controllo può essere concatenato anche con un metodo di selezione delle regole.
assertThat(axedriver, isAxeClean().accordingTo("wcag2a").checking("tabindex"));
Anche esiste l'opzione di omettere regole da una scansione. Ciò è possibile tramite il metodo di salto. Funziona in modo identico al metodo di controllo, con la differenza che esclude le regole anziché aggiungerle.
assertThat(axedriver, isAxeClean().skipping("label"));
Può essere utilizzato anche per omettere più regole.
assertThat(axedriver, isAxeClean().skipping("label", "tabindex"));
assertThat(axedriver, isAxeClean().skipping("label").skipping("tabindex));
Infine, può essere utilizzato anche con un metodo per la selezione delle regole.
assertThat(axedriver, isAxeClean().accordingTo("wcag2a").skipping("#label"));
L'ultimo metodo viene utilizzato quando si desiderano solo regole specifiche. Il metodo di verifica solo modifica la scansione per controllare solo le regole esplicitamente passate. Inoltre, questo metodo non può concatenare con il metodo di selezione degli standard di accessibilità. Per controllare solo una 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 regole validi che puoi utilizzare con questi metodi e per i test che eseguono, leggi la documentazione sulle regole.
Ignorare le violazioni
È possibile configurare la scansione in modo da ignorare specifici casi di violazione. Per fare ciò si utilizza il metodo per ignorare. Funziona passando i selettori degli elementi che si desidera ignorare come un 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 è disabilitato e l'URL predefinito è https://usage.deque.com
.
Variabili ambientali
Questo metodo consente agli utenti di modificare valori specifici del servizio di utilizzo tramite variabili di ambiente
Variabile d'ambiente | Tipo | Descrizione |
---|---|---|
AXE_IS_LOGGED_IN | Booleano | Se l'utente ha effettuato l'accesso all'app in fase di test |
AXE_KEYCLOAK_ID | String | L'ID keycloak dell'utente loggato |
AXE_USER_ID | String | Il nome dell'utente che esegue il test |
AXE_SESSIONE_ID | String | Descrizione della sessione di test |
AXE_STATO_UTENTE | String | Lo stato dell'utente |
AXE_RUOLO_LAVORO_UTENTE | String | Il titolo/ruolo dell'individuo che esegue il test |
AXE_DISTINTO_ID | String | ID univoco di un singolo utente |
AXE_ISTANZA_IS_DEV | Booleano | Se l'app in fase di test si trova in un'istanza di sviluppo |
AXE_ORGANIZATION | String | L'organizzazione dell'utente - gestione dei dati su scala aziendale |
AXE_APPLICATION | String | Il nome dell'applicazione in fase di test |
AXE_METRICS_URL | String | L'URL a cui vengono inviati i dati di utilizzo |
AXE_TRACCIA_USO | Booleano | Se i dati di utilizzo vengono acquisiti o meno |
Prossimi passi
Per un ulteriore utilizzo dei risultati della scansione di axe DevTools, come la creazione di report, consultare la documentazione del pacchetto Java Selenium di axe DevTools
Risoluzione dei problemi
Se riscontri problemi durante la configurazione dei test di accessibilità, contatta direttamente il tuo rappresentante Deque, contattaci tramite il nostro support desk oppure inviaci un'e-mail. Saremo lieti di aiutarti a far partire i tuoi sforzi di test di accessibilità.