UI pour plusieurs applications

Android prend en charge les tests d'interface utilisateur impliquant plusieurs applications. Considérons que notre application a la possibilité de passer de notre application à une application de messagerie pour envoyer un message, puis revient à notre application. Dans ce scénario, le cadre de test d'automate d'interface utilisateur nous aide à tester l'application. L'automate d'interface utilisateur peut être considéré comme un bon compagnon pour le cadre de test d'espresso. Nous pouvons exploiter l' option intending () dans le cadre de test espresso avant d'opter pour l' automate d'interface utilisateur .

Instruction de configuration

Android fournit un automate d'interface utilisateur en tant que plugin séparé. Il doit être configuré dans l' app / build.gradle comme spécifié ci-dessous,

dependencies {
   ...
   androidTestImplementation 'androidx.test.uiautomator:uiautomator:2.2.0'
}

Workflow pour l'écriture de cas de test

Laissez-nous comprendre comment écrire un cas de test basé sur UI Automator ,

  • Obtenez l' objet UiDevice en appelant la méthode getInstance () et en passant l' objet Instrumentation .

myDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
myDevice.pressHome();
  • Obtenez l' objet UiObject à l'aide de la méthode findObject () . Avant d'utiliser cette méthode, nous pouvons ouvrir l' application uiautomatorviewer pour inspecter les composants de l'interface utilisateur de l'application cible, car la compréhension de l'application cible nous permet d'écrire de meilleurs cas de test.

UiObject button = myDevice.findObject(new UiSelector()
   .text("Run")
   .className("android.widget.Button"));
  • Simulez l'interaction de l'utilisateur en appelant la méthode d'UiObject . Par exemple, setText () pour modifier un champ de texte et cliquez sur () pour déclencher un événement de clic sur un bouton.

if(button.exists() && button.isEnabled()) {
   button.click();
}
  • Enfin, nous vérifions si l'interface utilisateur reflète l'état attendu.