Testare l'accessibilità dell'app (visualizzazioni)

Concetti e implementazione di Jetpack Compose

Testare l'accessibilità ti consente di sperimentare la tua app dal punto di vista dell'utente e di trovare problemi di usabilità che potresti non notare. I test di accessibilità possono rivelare opportunità per rendere la tua app più potente e versatile per tutti gli utenti, inclusi quelli con disabilità.

Questo documento descrive i seguenti approcci:

  • Test con strumenti di analisi: utilizza gli strumenti per scoprire le opportunità di migliorare l'accessibilità della tua app.
  • Test automatici: attiva i test di accessibilità in Espresso e Robolectric.

Test con strumenti di analisi

Gli strumenti di analisi possono scoprire opportunità per migliorare l'accessibilità che potresti non notare con i test manuali.

Accessibility Scanner

L'app Accessibility Scanner analizza lo schermo e suggerisce modi per migliorare l'accessibilità della tua app. Accessibility Scanner utilizza l'Accessibility Test Framework e fornisce suggerimenti specifici dopo aver esaminato le etichette dei contenuti, gli elementi su cui è possibile fare clic, il contrasto e altro ancora.

L'Android Accessibility Test Framework è integrato in Android Studio per aiutarti a trovare problemi di accessibilità nei layout. Per avviare il riquadro, fai clic sul pulsante del report degli errori. Nell'editor del layout.

Demo di Accessibility Scanner Figura 1. Demo di Accessibility Scanner.

Per saperne di più, consulta le seguenti risorse:

UI Automator Viewer

Lo strumento uiautomatorviewer fornisce una comoda GUI per scansionare e analizzare i componenti dell'interfaccia utente attualmente visualizzati su un dispositivo Android. Puoi utilizzare UI Automator per esaminare la gerarchia dei layout e visualizzare le proprietà dei componenti dell'interfaccia utente visibili in primo piano sul dispositivo. Queste informazioni ti consentono di creare test più precisi, ad esempio creando un selettore dell'interfaccia utente che corrisponda a una proprietà visibile specifica. Lo strumento si trova nella directory tools dell'SDK Android.

Nei test di accessibilità, questo strumento è utile per eseguire il debug dei problemi riscontrati utilizzando altri metodi di test. Ad esempio, se i test manuali rivelano che una visualizzazione non ha il testo pronunciabile richiesto o che una visualizzazione riceve lo stato attivo quando non deve, puoi utilizzare lo strumento per individuare l'origine del problema.

Per saperne di più su UI Automator Viewer, consulta Scrivere test automatici con UI Automator.

Lint

Android Studio mostra gli avvisi lint per vari problemi di accessibilità e fornisce link ai punti pertinenti del codice sorgente. Nell'esempio seguente, a un'immagine manca un attributo contentDescription. La descrizione dei contenuti mancante genera il seguente messaggio:

[Accessibility] Missing 'contentDescription' attribute on image

La Figura 2 mostra un esempio di come viene visualizzato questo messaggio in Android Studio:

Un'immagine che mostra Android Studio che segnala una descrizione dei contenuti mancante in alcune immagini.
Figura 2. Messaggio in Android Studio che mostra l'attributo mancante contentDescription

Test automatici

La piattaforma Android supporta diversi framework di test, come Espresso, che ti consente di creare ed eseguire test automatici che valutano l'accessibilità della tua app.

Espresso

Espresso è una libreria di test Android progettata per rendere i test dell'interfaccia utente veloci e semplici. Ti consente di interagire con i componenti dell'interfaccia utente in fase di test nella tua app e di verificare che si verifichino determinati comportamenti o che vengano soddisfatte condizioni specifiche.

Per una panoramica video dei test di accessibilità con Espresso, guarda il seguente video dal minuto 31:54 al minuto 34:19: Inclusive design and testing: Making your app more accessible - Google I/O 2016.

Questa sezione descrive come eseguire i controlli di accessibilità utilizzando Espresso.

Attivare i controlli

Puoi attivare e configurare i test di accessibilità utilizzando la AccessibilityChecks classe:

Kotlin

import androidx.test.espresso.accessibility.AccessibilityChecks

@RunWith(AndroidJUnit4::class)
@LargeTest
class MyWelcomeWorkflowIntegrationTest {
    init {
        AccessibilityChecks.enable()
    }
}

Java

import androidx.test.espresso.accessibility.AccessibilityChecks;

@RunWith(AndroidJUnit4.class)
@LargeTest
public class MyWelcomeWorkflowIntegrationTest {
    @BeforeClass
    public void enableAccessibilityChecks() {
        AccessibilityChecks.enable();
    }
}

Per impostazione predefinita, i controlli vengono eseguiti quando esegui qualsiasi azione di visualizzazione definita in ViewActions. Ogni controllo include la visualizzazione su cui viene eseguita l'azione, nonché tutte le visualizzazioni discendenti. Puoi valutare l'intera gerarchia di oggetti View di una schermata durante ogni controllo passando true a setRunChecksFromRootView(), come mostrato nel seguente snippet di codice:

Kotlin

AccessibilityChecks.enable().setRunChecksFromRootView(true)

Java

AccessibilityChecks.enable().setRunChecksFromRootView(true);

Eliminare i sottoinsiemi di risultati

Dopo che Espresso esegue i controlli di accessibilità sulla tua app, potresti trovare diversi risultati per migliorare l'accessibilità della tua app che non puoi risolvere immediatamente. Per impedire che i test di Espresso continuino a non riuscire a causa di questi risultati, puoi ignorarli temporaneamente. L'Accessibility Test Framework (ATF) fornisce questa funzionalità utilizzando il setSuppressingResultMatcher() metodo, che indica a Espresso di eliminare tutti i risultati che soddisfano l'espressione del matcher specificata.

Quando apporti modifiche alla tua app che riguardano un aspetto dell'accessibilità, è utile che Espresso mostri i risultati per il maggior numero possibile di altri aspetti dell'accessibilità. Per questo motivo, è consigliabile eliminare solo opportunità di miglioramento specifiche e note.

Quando elimini temporaneamente i risultati dei test di accessibilità che prevedi di risolvere in un secondo momento, è importante non eliminare accidentalmente risultati simili. Per questo motivo, utilizza matcher con un ambito ristretto. Per farlo, scegli un matcher in modo che Espresso elimini un determinato risultato solo se soddisfa ciascuno dei seguenti controlli di accessibilità:

  1. Controlli di accessibilità di un determinato tipo, ad esempio quelli che verificano le dimensioni del touch target.
  2. Controlli di accessibilità che valutano un particolare elemento dell'interfaccia utente, ad esempio un pulsante.

L'ATF definisce diversi matcher per aiutarti a definire quali risultati mostrare nei test di Espresso. L'esempio seguente elimina i risultati dei controlli relativi al contrasto cromatico di un singolo elemento TextView. L'ID dell'elemento è countTV.

Kotlin

AccessibilityChecks.enable().apply {
        setSuppressingResultMatcher(
                allOf(
                    matchesCheck(TextContrastCheck::class.java),
                    matchesViews(withId(R.id.countTV))
                )
        )
}

Java

AccessibilityValidator myChecksValidator =
    AccessibilityChecks.enable()
        .setSuppressingResultMatcher(
            allOf(
                matchesCheck(TextContrastCheck.class),
                matchesViews(withId(R.id.countTV))));