Testowanie ułatwień dostępu w aplikacji (widoki)

Pojęcia i implementacja w Jetpack Compose

Testowanie pod kątem ułatwień dostępu pozwala sprawdzić aplikację z perspektywy użytkownika i znaleźć problemy z użytecznością, które mogłyby Ci umknąć. Testowanie ułatwień dostępu może ujawnić możliwości zwiększenia funkcjonalności i wszechstronności aplikacji dla wszystkich użytkowników, w tym osób z niepełnosprawnościami.

W tym dokumencie opisujemy te podejścia:

  • Testowanie za pomocą narzędzi do analizy: używaj narzędzi, aby odkrywać możliwości poprawy ułatwień dostępu w aplikacji.
  • Testowanie automatyczne: włącz testowanie ułatwień dostępu w Espresso i Robolectric.

Testowanie za pomocą narzędzi do analizy

Narzędzia do analizy mogą ujawnić możliwości poprawy ułatwień dostępu, które mogłyby Ci umknąć podczas testowania ręcznego.

Accessibility Scanner

Aplikacja Accessibility Scanner skanuje ekran i sugeruje sposoby na poprawę ułatwień dostępu w aplikacji. Accessibility Scanner korzysta z Accessibility Test Framework i wyświetla konkretne sugestie po sprawdzeniu etykiet treści, elementów, które można kliknąć, kontrastu i innych elementów.

Android Accessibility Test Framework jest zintegrowany z Android Studio, aby pomóc Ci znaleźć problemy z ułatwieniami dostępu w układach. Aby otworzyć panel, kliknij przycisk raportu o błędach ! w Layout Editor.

Demonstracja aplikacji Accessibility Scanner Rysunek 1. Prezentacja aplikacji Accessibility Scanner.

Więcej informacji znajdziesz w tych materiałach:

UI Automator Viewer

Narzędzie uiautomatorviewer udostępnia wygodny interfejs GUI do skanowania i analizowania komponentów interfejsu wyświetlanych obecnie na urządzeniu z Androidem. Za pomocą UI Automator możesz sprawdzać hierarchię układu i wyświetlać właściwości komponentów interfejsu widocznych na pierwszym planie urządzenia. Te informacje pozwalają tworzyć bardziej szczegółowe testy, np. tworząc selektor interfejsu, który pasuje do określonej widocznej właściwości. Narzędzie znajduje się w katalogu tools pakietu Android SDK.

Podczas testowania ułatwień dostępu to narzędzie jest przydatne do debugowania problemów znalezionych za pomocą innych metod testowania. Jeśli na przykład testowanie ręczne wykaże, że widok nie ma wymaganego tekstu, który można odczytać, lub że widok otrzymuje fokus, gdy nie powinien, możesz użyć tego narzędzia, aby znaleźć źródło problemu.

Więcej informacji o UI Automator Viewer znajdziesz w artykule Pisanie testów automatycznych za pomocą UI Automator.

Lint

Android Studio wyświetla ostrzeżenia lint dotyczące różnych problemów z ułatwieniami dostępu i zawiera linki do odpowiednich miejsc w kodzie źródłowym. W tym przykładzie obraz nie ma atrybutu contentDescription. Brak opisu treści powoduje wyświetlenie tego komunikatu:

[Accessibility] Missing 'contentDescription' attribute on image

Rysunek 2 przedstawia przykład tego, jak ten komunikat pojawia się w Android Studio:

Obraz przedstawiający Android Studio zgłaszające brak opisu niektórych obrazów.
Rysunek 2. Komunikat w Android Studio informujący o braku contentDescription atrybutu.

Testowanie automatyczne

Platforma Android obsługuje kilka platform testowych, takich jak Espresso, która umożliwia tworzenie i uruchamianie testów automatycznych oceniających ułatwienia dostępu w aplikacji.

Espresso

Espresso to biblioteka testowa Androida, która ułatwia i przyspiesza testowanie interfejsu. Umożliwia ona interakcję z testowanymi komponentami interfejsu w aplikacji i sprawdzanie, czy występują określone zachowania lub czy są spełnione określone warunki.

Aby obejrzeć film z omówieniem testowania ułatwień dostępu za pomocą Espresso, obejrzyj ten film od 31:54 do 34:19: Inclusive design and testing: Making your app more accessible – Google I/O 2016.

W tej sekcji opisujemy, jak przeprowadzać sprawdzanie ułatwień dostępu za pomocą Espresso.

Włączanie sprawdzania

Testowanie ułatwień dostępu możesz włączyć i skonfigurować za pomocą klasy AccessibilityChecks:

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

Domyślnie sprawdzanie jest przeprowadzane, gdy wykonujesz dowolną czynność w widoku zdefiniowaną w ViewActions. Każde sprawdzenie obejmuje widok, w którym wykonywana jest czynność, oraz wszystkie widoki podrzędne. Podczas każdego sprawdzania możesz ocenić całą hierarchię widoków ekranu, przekazując wartość true do setRunChecksFromRootView(), jak pokazano w tym fragmencie kodu:

Kotlin

AccessibilityChecks.enable().setRunChecksFromRootView(true)

Java

AccessibilityChecks.enable().setRunChecksFromRootView(true);

Pomijanie podzbiorów wyników

Po uruchomieniu przez Espresso sprawdzania ułatwień dostępu w aplikacji możesz znaleźć kilka możliwości poprawy ułatwień dostępu, których nie możesz od razu wprowadzić. Aby testy Espresso nie kończyły się niepowodzeniem z powodu tych wyników, możesz je tymczasowo zignorować. Accessibility Test Framework (ATF) udostępnia tę funkcję za pomocą setSuppressingResultMatcher() metody, która instruuje Espresso, aby pomijało wszystkie wyniki spełniające dane wyrażenie dopasowujące.

Gdy wprowadzisz w aplikacji zmiany, które dotyczą jednego aspektu ułatwień dostępu, warto, aby Espresso wyświetlało wyniki dotyczące jak największej liczby innych aspektów ułatwień dostępu. Z tego powodu najlepiej jest pomijać tylko konkretne znane możliwości poprawy.

Gdy tymczasowo pomijasz wyniki testów ułatwień dostępu, które planujesz rozwiązać później, ważne jest, aby nie pominąć przypadkowo podobnych wyników. Z tego powodu używaj dopasowań o wąskim zakresie. Aby to zrobić, wybierz dopasowanie tak, aby Espresso pomijało dany wynik tylko wtedy, gdy spełnia on każde z tych sprawdzeń ułatwień dostępu:

  1. Sprawdzanie ułatwień dostępu określonego typu, np. sprawdzanie rozmiaru obszaru dotykowego.
  2. Sprawdzanie ułatwień dostępu, które oceniają konkretny element interfejsu, np. przycisk.

ATF definiuje kilka dopasowań które pomagają określić, które wyniki mają być wyświetlane w testach Espresso. Ten przykład pomija wyniki sprawdzeń, które dotyczą kontrastu kolorów pojedynczego elementu TextView. Identyfikator elementu to 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))));