Tests d'Accessibilité Android : Guide Pratique avec un Exemple Espresso
La conception d'applications mobiles inclusives est plus qu'une bonne pratique ; c'est une nécessité. Assurer que votre application est accessible à tous les utilisateurs, y compris ceux ayant des déficiences visuelles, auditives ou motrices, est crucial. Cet article vous guidera à travers les principes fondamentaux du test d'accessibilité sur Android, en utilisant un projet exemple basé sur le framework Espresso. À la fin de cette lecture, vous serez capable de configurer votre environnement de test, d'écrire des cas de test d'accessibilité de base, d'analyser les résultats et de corriger les problèmes courants.
Vue d'ensemble du projet de démonstration
L'application de démonstration, nommée AccessibilitySample, fait partie d'une collection d'exemples de tests Android. Elle illustre comment les bibliothèques de test officielles d'Android peuvent être utilisées pour automatiser la vérification des fonctionnalités d'accessibilité. Le code source de cet exemple est généralement trouvé dans un répertoire tel que ui/espresso/AccessibilitySample/ au sein d'un dépôt de projets de tests.
Structure de l'Application
Le projet suit une architecture Android standard et comprend les modules essentiels suivants :
- Le code source de l'application :
src/main/java/ - Les fichiers de test :
src/androidTest/java/ - Les définitions de mise en page :
src/main/res/layout/ - Les ressources de l'application :
src/main/res/values/
Configuration de l'Environnement
Prérequis de Développement
- Android Studio version 3.4 ou supérieure
- Outil de construction Gradle
- Android SDK API niveau 21 ou ultérieur
Procédure d'Importation du Projet
- Clonez le dépôt contenant les échantillons de tests, par exemple :
git clone https://un_depot_exemple/testing-samples.git - Dans Android Studio, sélectionnez "File | Open..." et naviguez vers le fichier
build.gradlede l'applicationAccessibilitySample, généralement situé dans[chemin_du_depot]/ui/espresso/AccessibilitySample/build.gradle. - Patientez pendant la synchronisation de Gradle, qui téléchargera automatiquement les dépendances requises.
Analyse de l'Interface Utilisateur
L'application AccessibilitySample présente une interface utilisateur élémentaire conçue pour démontrer des scénarios de test d'accessibilité fondamentaux. La mise en page principale est définie dans le fichier main_activity.xml et inclut les composants suivants :
- Un
TextViewpour afficher du texte. - Un
Buttonqui déclenche une action.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp"
tools:context=".MainActivity">
<TextView
android:id="@+id/displayMessage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="@string/welcome_text"
android:textAppearance="?android:attr/textAppearanceLarge" />
<Button
android:id="@+id/actionTriggerButton"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:onClick="performAction"
android:text="@string/button_label" />
</LinearLayout>
Les ressources de chaînes de caractères de l'application sont définies dans strings.xml, incluant le nom de l'application et le texte du bouton :
<resources>
<string name="app_name">Exemple Accessibilité Espresso</string>
<string name="welcome_text">Bienvenue sur Espresso!</string>
<string name="button_label">Lancer l'action</string>
<string name="action_button_description">Bouton pour déclencher une action, comme ouvrir un navigateur</string>
</resources>
Mise en œuvre des Tests d'Accessibilité
Principe des Tests
Le projet AccessibilitySample utilise la classe AccessibilityChecks de la bibliothèque AndroidX Test. Cette classe est capable de valider automatiquement les propriétés d'accessibilité des éléments d'interface utilisateur par rapport aux standards. Lorsque les vérificatiosn d'accessibilité sont activées, chaque opération Espresso déclenche une évaluation de la conformité de l'interface actuelle. Toute non-conformité détectée entraîne le lancement d'une expection, signalant un problème d'accessibilité.
Analyse du Code de Test
Le cas de test d'accessibilité est défini dans le fichier AccessibilityTests.java :
package com.example.android.testing.espresso.accessibility;
import androidx.test.ext.junit.rules.ActivityScenarioRule;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.LargeTest;
import androidx.test.espresso.accessibility.AccessibilityChecks;
import org.junit.BeforeClass;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import static androidx.test.espresso.Espresso.onView;
import static androidx.test.espresso.action.ViewActions.click;
import static androidx.test.espresso.matcher.ViewMatchers.withId;
@RunWith(AndroidJUnit4.class)
@LargeTest
public class AccessibilityTests {
@BeforeClass
public static void enableAccessibilityChecks() {
AccessibilityChecks.enable();
}
@Rule
public ActivityScenarioRule<MainActivity> activityScenarioRule =
new ActivityScenarioRule<>(MainActivity.class);
@Test
public void verifyMainScreenAccessibility() {
// Simule un clic sur le bouton pour tester l'interaction et l'état de l'interface
onView(withId(R.id.actionTriggerButton)).perform(click());
// À ce stade, AccessibilityChecks aura déjà vérifié l'UI après le clic
}
}
Le code ci-dessus met en œuvre les tests d'accessibilité comme suit :
- La méthode annotée
@BeforeClass,enableAccessibilityChecks(), initialise les vérifications d'accessibilité une seule fois avant l'exécution de tous les tests de la classe. - La règle
ActivityScenarioRulelanceMainActivityavant chaque test. - Le test
verifyMainScreenAccessibility()exécute une action de clic sur le bouton. - Le système effectue automatiquement des vérifications d'accessibilité sur les éléments de l'interface utilisateur pendant et après cette interaction.
Exécution des Tests et Analyse des Résultats
Lancement des Tests
Pour exécuter les tests d'accessibilité, naviguez vers le répertoire racine du projet de l'échantillon (par exemple, ui/espresso/AccessibilitySample) et utilisez la commande Gradle suivante :
./gradlew connectedAndroidTest
Problèmes d'Accessibilité Fréquents
AccessibilityChecks identifie et rapporte automatiquement divers problèmes d'accessibilité. Parmi les plus courants, on trouve :
- Descriptions de contenu manquantes : Des composants comme
ImageButtonouImageViewn'ont pas d'attributcontentDescription. - Contraste de texte insuffisant : Le rapport de contraste entre le texte et l'arrière-plan ne respecte pas les directives WCAG.
- Zones cliquables trop petites : Les éléments interactifs dont la taille est inférieure à 48x48dp.
- Ordre de lecture incohérent : L'ordre de focalisation des éléments n'est pas logique pour les lecteurs d'écran.
Exemple de Correction
Si les tests révèlent qu'un bouton n'a pas de description de contenu, vous pouvez le corriger en ajoutant l'attribut android:contentDescription dans son fichier de mise en page :
<Button
android:id="@+id/actionTriggerButton"
...
android:contentDescription="@string/action_button_description" />
Synthèse et Approfondissement
Grâce à cet exemple, nous avons exploré les méthodes de base pour tester l'accessibilité dans les applications Android. L'intégration des tests d'accessibilité est une phase essentielle du cycle de développement, non seulement pour élargir votre audience, mais aussi pour satisfaire les exigences de publication sur de nombreuses boutiques d'applications.
Ressources Complémentaires
- Documentation officielle : Consultez les guides de test d'accessibilité Android.
- Autres exemples : Explorez d'autres cas de test dans le projet
testing-samples. - Outils de test : Utilisez l'application Accessibility Scanner intégrée à Android Studio.
Il est recommandé aux développeurs d'adopter des habitudes de test d'accessibilité régulières et d'intégrer AccessibilityChecks dans leurs processus CI/CD. Cela garantira que chaque modification de code ne compromet pas l'accessibilité. Ensemble, contribuons à créer un écosystème d'applications Android véritablement inclusif.
Contribution au Projet
Si vous rencontrez des problèmes avec l'échantillon AccessibilitySample ou si vous avez des suggestions d'amélioration, n'hésitez pas à soumettre des Pull Requests au dépôt du projet. Les contributions de nouveaux scénarios de test d'accessibilité et de solutions sont également les bienvenues pour aider d'autres développeurs à maîtriser cette technologie.