Barrierefreiheit der App testen (Ansichten)

Konzepte und Jetpack Compose-Implementierung

Wenn Sie Ihre App auf Barrierefreiheit testen, können Sie sie aus der Perspektive des Nutzers erleben und Usability-Probleme finden, die Ihnen sonst möglicherweise entgehen. Barrierefreiheitstests können Ihnen helfen, Ihre App für alle Nutzer, einschließlich derer mit Beeinträchtigungen, noch leistungsstärker und vielseitiger zu machen.

In diesem Dokument werden die folgenden Ansätze beschrieben:

  • Tests mit Analysetools: Mit diesen Tools können Sie Möglichkeiten zur Verbesserung der Barrierefreiheit Ihrer App finden.
  • Automatisierte Tests: Aktivieren Sie Barrierefreiheitstests in Espresso und Robolectric.

Tests mit Analysetools

Mit Analysetools können Sie Möglichkeiten zur Verbesserung der Barrierefreiheit finden, die Ihnen bei manuellen Tests möglicherweise entgehen.

Accessibility Scanner

Die Accessibility Scanner App scannt Ihren Bildschirm und schlägt Möglichkeiten zur Verbesserung der Barrierefreiheit Ihrer App vor. Accessibility Scanner verwendet das Accessibility Test Framework und gibt spezifische Empfehlungen, nachdem es sich Inhaltslabels, anklickbare Elemente, Kontrast und mehr angesehen hat.

Das Android Accessibility Test Framework ist in Android Studio integriert, damit Sie Barrierefreiheitsprobleme in Ihren Layouts finden können. Klicken Sie im Layout-Editor auf die Schaltfläche für den Fehlerbericht ! im Layout Editor.

Demo des Accessibility Scanners Abbildung 1 Demo des Accessibility Scanner

Weitere Informationen finden Sie in den folgenden Ressourcen:

UI Automator Viewer

Das Tool uiautomatorviewer bietet eine praktische grafische Benutzeroberfläche zum Scannen und Analysieren der UI-Komponenten, die derzeit auf einem Android-Gerät angezeigt werden. Mit UI Automator können Sie die Layout-Hierarchie prüfen und die Eigenschaften von UI-Komponenten ansehen, die im Vordergrund des Geräts sichtbar sind. Mit diesen Informationen können Sie detailliertere Tests erstellen, z. B. indem Sie einen UI-Selektor erstellen, der einer bestimmten sichtbaren Eigenschaft entspricht. Das Tool befindet sich im Verzeichnis tools des Android SDK.

Bei Barrierefreiheitstests ist dieses Tool nützlich, um Probleme zu beheben, die mit anderen Testmethoden gefunden wurden. Wenn beispielsweise bei manuellen Tests festgestellt wird, dass eine Ansicht nicht den erforderlichen vorlesbaren Text enthält oder dass eine Ansicht den Fokus erhält, obwohl dies nicht der Fall sein sollte, können Sie mit dem Tool die Ursache des Problems finden.

Weitere Informationen zum UI Automator Viewer finden Sie unter Automatisierte Tests mit UI Automator.

Lint

Android Studio zeigt Lint-Warnungen für verschiedene Barrierefreiheitsprobleme an und bietet Links zu den entsprechenden Stellen in Ihrem Quellcode. Im folgenden Beispiel fehlt einem Bild das Attribut contentDescription. Die fehlende Inhaltsbeschreibung führt zu folgender Meldung:

[Accessibility] Missing 'contentDescription' attribute on image

Abbildung 2 zeigt ein Beispiel dafür, wie diese Meldung in Android Studio angezeigt wird:

Ein Bild, auf dem in Android Studio für einige Bilder eine fehlende Inhaltsbeschreibung gemeldet wird.
Abbildung 2. Meldung in Android Studio, die das fehlende contentDescription Attribut anzeigt.

Automatisierte Tests

Die Android-Plattform unterstützt mehrere Testframeworks, z. B. Espresso, mit dem Sie automatisierte Tests erstellen und ausführen können, um die Barrierefreiheit Ihrer App zu bewerten.

Espresso

Espresso ist eine Android-Testbibliothek, mit der UI-Tests schnell und einfach durchgeführt werden können. Damit können Sie mit UI-Komponenten in Ihrer App interagieren und bestätigen, dass bestimmte Verhaltensweisen auftreten oder bestimmte Bedingungen erfüllt sind.

Eine Videoübersicht zu Barrierefreiheitstests mit Espresso finden Sie im folgenden Video von Minute 31:54 bis 34:19: Inclusive design and testing: Making your app more accessible - Google I/O 2016.

In diesem Abschnitt wird beschrieben, wie Sie Barrierefreiheitstests mit Espresso ausführen.

Tests aktivieren

Sie können Barrierefreiheitstests mit der AccessibilityChecks Klasse aktivieren und konfigurieren:

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();
    }
}

Standardmäßig werden die Tests ausgeführt, wenn Sie eine in ViewActions definierte Ansichtsaktion ausführen. Jeder Test umfasst die Ansicht, in der die Aktion ausgeführt wird, sowie alle untergeordneten Ansichten. Sie können die gesamte Ansichtshierarchie eines Bildschirms während jedes Tests auswerten, indem Sie true an setRunChecksFromRootView() übergeben, wie im folgenden Code-Snippet gezeigt:

Kotlin

AccessibilityChecks.enable().setRunChecksFromRootView(true)

Java

AccessibilityChecks.enable().setRunChecksFromRootView(true);

Teilmengen von Ergebnissen unterdrücken

Nachdem Espresso Barrierefreiheitstests für Ihre App ausgeführt hat, finden Sie möglicherweise mehrere Möglichkeiten zur Verbesserung der Barrierefreiheit Ihrer App, die Sie nicht sofort umsetzen können. Damit Espresso-Tests aufgrund dieser Ergebnisse nicht ständig fehlschlagen, können Sie sie vorübergehend ignorieren. Das Accessibility Test Framework (ATF) bietet diese Funktion mit der setSuppressingResultMatcher() Methode, mit der Espresso alle Ergebnisse unterdrückt, die dem angegebenen Matcher-Ausdruck entsprechen.

Wenn Sie Änderungen an Ihrer App vornehmen, die einen Aspekt der Barrierefreiheit betreffen, ist es von Vorteil, wenn Espresso Ergebnisse für möglichst viele andere Aspekte der Barrierefreiheit anzeigt. Aus diesem Grund sollten Sie nur bestimmte bekannte Möglichkeiten zur Verbesserung unterdrücken.

Wenn Sie Ergebnisse von Barrierefreiheitstests vorübergehend unterdrücken, die Sie später beheben möchten, ist es wichtig, ähnliche Ergebnisse nicht versehentlich zu unterdrücken. Verwenden Sie daher Matcher mit einem engen Bereich. Wählen Sie einen Matcher so aus, dass Espresso ein bestimmtes Ergebnis nur dann unterdrückt, wenn es alle der folgenden Barrierefreiheitstests erfüllt:

  1. Barrierefreiheitstests eines bestimmten Typs, z. B. Tests zur Größe des Berührungszielbereichs.
  2. Barrierefreiheitstests, die ein bestimmtes UI-Element auswerten, z. B. eine Schaltfläche.

Das ATF definiert mehrere Matcher mit denen Sie festlegen können, welche Ergebnisse in Ihren Espresso-Tests angezeigt werden sollen. Im folgenden Beispiel werden die Ergebnisse von Tests unterdrückt, die sich auf den Farbkontrast eines einzelnen TextView-Elements beziehen. Die ID des Elements ist 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))));