Automatiser les tests d'interface utilisateur sur Android

introduction

La bibliothèque de support de test d’Android comprend le Cadre d'interface utilisateur Automator, qui peut être utilisé pour effectuer des tests automatisés de boîte noire sur les applications Android. Introduit dans l'API de niveau 18, le cadre permet aux développeurs de simuler des actions de l'utilisateur sur les widgets constituant l'interface utilisateur d'une application..

Dans ce tutoriel, je vais vous montrer comment utiliser le framework pour créer et exécuter un test d'interface utilisateur de base pour l'application Calculator par défaut..

Conditions préalables

Pour suivre, il vous faut:

  • la dernière version d'Android Studio
  • un appareil ou un émulateur fonctionnant sous Android 4.3 ou supérieur
  • une compréhension de base de JUnit

1. Installer des dépendances

Pour utiliser le framework UI Automator dans votre projet, éditez le build.gradle déposer dans votre projet app répertoire, en ajoutant les dépendances suivantes:

androidTestCompile 'com.android.support.test: participant: 0.2' androidTestCompile 'com.android.support.test: règles: 0.2' androidTestCompile 'com.android.support.test.uiautomator: uiautomator-v18: 2.1.0'

le Synchroniser maintenant bouton devrait être sur l'écran maintenant. Lorsque vous cliquez dessus, vous devriez voir une erreur qui ressemble à ceci:

Clique le Installer le référentiel et synchroniser le projet lien pour installer le Dépôt de support Android.

Si vous utilisez le appcompat-v7 bibliothèque et sa version est 22.1.1, vous devez ajouter la dépendance suivante pour vous assurer que l'application et l'application de test utilisent la même version de com.android.support:support-annotations:

androidTestCompile 'com.android.support:support-annotations:22.1.1'

Ensuite, à cause d’un bogue dans Android Studio, vous devez exclure un fichier nommé LICENSE.txt en utilisant emballageOptions. Si vous ne le faites pas, l'erreur suivante surviendra lorsque vous essayez d'exécuter un test:

L'exécution a échoué pour la tâche ': app: packageDebugAndroidTest'. Fichiers en double copiés dans APK LICENSE.txt Fichier 1: ~ / .gradle / caches / modules-2 / files-2.1 / org.hamcrest / hamcrest-core / 1.1 / 860340562250678d1a344907ac75754e259cdb14 / hamcrest-core-1.1.jar Fichier 2: ~ / .gradle / caches / modules-2 / fichiers-2.1 / junit / junit-dep / 4.10 / 64417b3bafdecd366afa514bd5beeae6c1f85ece / junit-dep-4.10.jar

Ajoutez l'extrait suivant au bas de votre build.gradle fichier:

android packagingOptions exclu 'LICENSE.txt'

2. Créer une classe de test

Créer une nouvelle classe de test, CalculatriceTester, en créant un fichier nommé CalculatorTester.java à l'intérieur de androidTest annuaire. Pour créer un scénario de test UI Automator, votre classe doit être étendue InstrumentationTestCase.

presse Alt + Insert puis cliquez sur Méthode d'installation pour remplacer le installer méthode.

presse Alt + Insert encore et cliquez Méthode d'essai générer une nouvelle méthode de test. Nommez cette méthode testAjouter. le CalculatriceTester La classe devrait maintenant ressembler à ceci:

Classe publique CalculatorTester étend InstrumentationTestCase @Override public void setUp () lève une exception  public void testAdd () lève une Exception 

3. Inspecter l'interface utilisateur du lanceur

Connectez votre appareil Android à votre ordinateur et appuyez sur le bouton d'accueil de votre appareil pour accéder à l'écran d'accueil..

Retournez sur votre ordinateur et utilisez votre explorateur de fichiers ou votre terminal pour accéder au répertoire où vous avez installé le SDK Android. Ensuite, entrez le outils répertoire à l'intérieur et lancer uiautomatorviewer. Cela va lancer UI Automater Viewer. Vous devriez être présenté avec un écran qui ressemble à ceci:

Cliquez sur le bouton qui ressemble à un téléphone pour capturer une capture d'écran de votre appareil Android. Notez que la capture d'écran que vous venez de capturer est interactive. Cliquez sur l'icône Apps en bas. dans le Détail du nœud section à droite, vous pouvez maintenant voir divers détails de votre sélection comme indiqué ci-dessous.

Pour interagir avec les éléments à l'écran, la structure de test d'UI Automator doit être en mesure de les identifier de manière unique. Dans ce tutoriel, vous utiliserez soit le texte, la content-desc, ou la classe de l'élément pour l'identifier de manière unique.

Comme vous pouvez le constater, l’icône Applications n’a aucune texte, mais il a un content-desc. Notez sa valeur, car vous l'utiliserez à l'étape suivante..

Choisissez votre appareil Android et appuyez sur l'icône Applications pour accéder à l'écran affichant les applications installées sur l'appareil. Retournez à UI Automater Viewer et capturer une autre capture d'écran. Puisque vous allez écrire un test pour l'application Calculatrice, cliquez sur son icône pour voir ses détails..

Cette fois le content-desc est vide, mais le texte contient la valeur Calculatrice. Prenez note de cela aussi.

Si votre appareil Android exécute un lanceur différent ou une version différente d'Android, les écrans et les détails du nœud seront différents. Cela signifie également que vous devrez apporter quelques modifications à votre code pour correspondre au système d'exploitation..

4. Préparer l'environnement de test

Revenir à Android Studio pour ajouter du code à la installer méthode. Comme son nom l'indique, le installer Cette méthode doit être utilisée pour préparer votre environnement de test. En d’autres termes, c’est là que vous spécifiez ce qui doit être fait avant d’exécuter le test proprement dit..

Vous allez maintenant écrire du code pour simuler ce que vous avez fait sur votre appareil Android à l'étape précédente:

  1. Appuyez sur le bouton d'accueil pour accéder à l'écran d'accueil..
  2. Appuyez sur l'icône Apps pour afficher toutes les applications..
  3. Lancez l'application Calculatrice en appuyant sur son icône.

Dans votre classe, déclarez un champ de type UiDevice et nommez-le dispositif. Ce champ représente votre appareil Android et vous allez l'utiliser pour simuler une interaction de l'utilisateur..

dispositif privé UiDevice;

dans le installer méthode, initialiser dispositif en invoquant le UiDevice.getInstance méthode, en passant dans un Instrumentation exemple comme indiqué ci-dessous.

device = UiDevice.getInstance (getInstrumentation ());

Pour simuler en appuyant sur le bouton d'accueil de l'appareil, appelez le pressHome méthode.

device.pressHome ();

Ensuite, vous devez simuler un événement de clic sur l'icône Apps. Toutefois, vous ne pouvez pas le faire immédiatement, car le périphérique Android aura besoin d’un instant pour naviguer vers l’écran d’accueil. Essayer de cliquer sur l'icône Applications avant qu'elle ne soit visible à l'écran provoquera une exception d'exécution.

Pour attendre que quelque chose se passe, vous devez appeler le attendre méthode sur le UiDevice exemple. Pour attendre que l’icône Applications apparaisse à l’écran, utilisez le bouton Jusqu'à. méthode.

Pour identifier l'icône Apps, utilisez le bouton Par.desc méthode et passer la valeur applications à cela. Vous devez également spécifier la durée maximale de l'attente en millisecondes. Réglez-le sur 3000. Cela se traduit par le bloc de code suivant:

// Attendez que l'icône Apps apparaisse à l'écran device.wait (Until.hasObject (By.desc ("Apps")), 3000);

Pour obtenir une référence à l'icône Apps, utilisez le bouton findObject méthode. Une fois que vous avez une référence à l'icône Apps, appelez le Cliquez sur méthode pour simuler un clic.

UiObject2 appsButton = device.findObject (By.desc ("Apps")); appsButton.click ();

Comme auparavant, nous devons attendre un moment que l’icône de la calculatrice apparaisse à l’écran. Dans l’étape précédente, vous avez constaté que l’icône de la calculatrice peut être identifiée de manière unique par son icône. texte champ. Nous invoquons le Par.text méthode pour trouver l'icône, en passant Calculatrice.

// Attendez que l'icône de la calculatrice apparaisse à l'écran device.wait (Until.hasObject (By.text ("Calculator")), 3000);

Utilisez le findObject et Cliquez sur méthodes pour obtenir une référence à l'icône de la calculatrice et simulateur un clic.

UiObject2 calculatorApp = device.findObject (By.text ("Calculator")); calculatorApp.click ();

5. Inspectez l'interface utilisateur de la calculatrice

Lancez l'application Calculator sur votre appareil Android et utilisez UI Automater Viewer l'inspecter. Après avoir capturé une capture d'écran, cliquez sur les boutons pour voir comment vous pouvez les identifier de manière unique..

Pour ce cas de test, vous allez demander à la calculatrice de calculer la valeur de 9 + 9 = et vérifier si cela montre 18 comme résultat. Cela signifie que vous devez savoir comment identifier les boutons avec les étiquettes. 9, +, et =.

Voici ce que j'ai recueilli lors de l'inspection sur mon appareil:

  • Les boutons contenant les chiffres ont une correspondance texte valeurs.
  • Les boutons contenant le + et = les symboles ont la content-desc valeurs définies à plus et équivaut à respectivement.
  • Le résultat est affiché dans un Éditer le texte widget.

Notez que ces valeurs peuvent être différentes sur votre appareil si vous utilisez une version différente de l'application Calculatrice..

6. Créer le test

Dans les étapes précédentes, vous avez déjà appris que vous pouvez utiliser le findObject méthode avec soit Par.text ou Par.desc pour obtenir une référence à n’importe quel objet à l’écran. Vous savez aussi que vous devez utiliser le Cliquez sur méthode pour simuler un clic sur l'objet. Le code suivant utilise ces méthodes pour effectuer le calcul 9 + 9 =. Ajoutez-le à la testAjouter méthode du CalculatriceTester classe.

// Attend que les boutons de la calculatrice apparaissent à l'écran device.wait (Until.hasObject (By.text ("9")), 3000); // Sélectionnez le bouton pour 9 UiObject2 buttonNine = device.findObject (By.text ("9")); buttonNine.click (); // Sélectionnez le bouton pour + UiObject2 buttonPlus = device.findObject (By.desc ("plus")); buttonPlus.click (); // Appuyez à nouveau sur 9 pendant le calcul de 9 + 9 buttonNine.click (); // Sélectionnez le bouton pour = UiObject2 buttonEquals = device.findObject (By.desc ("equals")); buttonEquals.click ();

À ce stade, vous devez attendre le résultat. Cependant, vous ne pouvez pas utiliser Jusqu'à. ici parce que le Éditer le texte contenant le résultat est déjà à l'écran. Au lieu de cela, vous devez utiliser le waitForIdle méthode pour attendre la fin du calcul. Encore une fois, la durée maximale de l'attente peut être de 3000 ms.

device.waitForIdle (3000);

Obtenez une référence à la Éditer le texte objet en utilisant le findObject et Par.clazz méthodes. Une fois que vous avez la référence, appelez le getText méthode pour déterminer le résultat du calcul.

UiObject2 resultText = device.findObject (By.clazz ("android.widget.EditText")); String result = resultText.getText ();

Enfin, utilisez affirmer vrai pour vérifier que le résultat est égal à 18.

assertTrue (result.equals ("18"));

Votre test est maintenant terminé.

6. Lancer le test

Pour exécuter le test, dans la barre d’outils d’Android Studio, sélectionnez la classe. CalculatriceTester dans le menu déroulant et cliquez sur le bouton de lecture à sa droite.

Une fois la construction terminée, le test doit s'exécuter et se terminer avec succès. Pendant l'exécution du test, vous devriez pouvoir voir l'automatisation de l'interface utilisateur s'exécuter sur votre appareil Android..

Conclusion

Dans ce tutoriel, vous avez appris à utiliser le framework de test UI Automator et le UI Automater Viewer pour créer des tests d'interface utilisateur. Vous avez également constaté à quel point il est facile d’effectuer le test avec Android Studio. Même si nous avons testé une application assez simple, vous pouvez appliquer les concepts que vous avez appris ici pour tester presque toutes les applications Android..

.