Scrivere Test con 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

Scrivere test di accessibilità utilizzando i matcher Hamcrest con Axe DevTools for Web per Java

Not for use with personal data

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à.