Android
Test d'interface utilisateur inter-app avec UIAutomator
Recherche…
Syntaxe
- Instrumentation getInstrumentation ()
- UIDevice UiDevice.getInstance (Instrumentation d'instrumentation)
- booléen UIDevice.pressHome ()
- booléen UIDevice.pressBack ()
- booléen UIDevice.pressRecentApps ()
- annuler UIDevice.wakeUp ()
- booléen UIDevice.swipe (int startX, int startY, int endX, int endY, int étapes)
- booléen UIDevice.drag (int startX, int startY, int endX, int endY, int étapes)
- UIObject2 UIDevice.findObject (By.desc (String contentDesc))
- booléen UIObject2.click ()
Remarques
UIAutomator est particulièrement utile pour tester les user stories. Vous rencontrez des problèmes si les éléments de vue ne possèdent ni un identifiant de ressource unique ni un contenu-desc . Dans la plupart des cas, il existe un moyen de terminer le test de toute façon, ce qui prend beaucoup de temps. Si vous pouvez influencer le code de votre application, UIAutomator peut être votre outil de test.
Préparez votre projet et écrivez le premier test UIAutomator
Ajoutez les bibliothèques requises dans la section dépendances du build.gradle de votre module Android:
android {
...
defaultConfig {
...
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
}
dependencies {
...
androidTestCompile 'com.android.support.test:runner:0.5'
androidTestCompile 'com.android.support.test:rules:0.5'
androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2'
androidTestCompile 'com.android.support:support-annotations:23.4.0'
}
⚠ Notez bien entendu que les versions peuvent différer dans le même temps.
Après cette synchronisation avec les modifications.
Ajoutez ensuite une nouvelle classe Java dans le dossier androidTest:
public class InterAppTest extends InstrumentationTestCase {
private UiDevice device;
@Override
public void setUp() throws Exception {
device = UiDevice.getInstance(getInstrumentation());
}
public void testPressHome() throws Exception {
device.pressHome();
}
}
En faisant un clic droit sur l'onglet de la classe et sur "Exécuter" InterAppTest "exécute ce test.
Rédiger des tests plus complexes à l'aide de UIAutomatorViewer
Pour permettre l'écriture de tests d'interface utilisateur plus complexes, UIAutomatorViewer est nécessaire. L'outil situé dans / tools / fait une capture d'écran en plein écran incluant les dispositions des vues actuellement affichées. Voir la photo suivante pour avoir une idée de ce qui est montré:
Pour les tests de l'interface utilisateur, nous recherchons un identifiant de ressource , un contenu-desc ou quelque chose d'autre pour identifier une vue et l'utiliser dans nos tests.
Le uiautomatorviewer est exécuté via le terminal.
Si, par exemple, nous voulons maintenant cliquer sur le bouton des applications, puis ouvrir une application et la balayer, voici à quoi la méthode de test peut ressembler:
public void testOpenMyApp() throws Exception {
// wake up your device
device.wakeUp();
// switch to launcher (hide the previous application, if some is opened)
device.pressHome();
// enter applications menu (timeout=200ms)
device.wait(Until.hasObject(By.desc(("Apps"))), 200);
UiObject2 appsButton = device.findObject(By.desc(("Apps")));
assertNotNull(appsButton);
appsButton.click();
// enter some application (timeout=200ms)
device.wait(Until.hasObject(By.desc(("MyApplication"))), 200);
UiObject2 someAppIcon = device.findObject(By.desc(("MyApplication")));
assertNotNull(someAppIcon);
someAppIcon.click();
// do a swipe (steps=20 is 0.1 sec.)
device.swipe(200, 1200, 1300, 1200, 20);
assertTrue(isSomeConditionTrue)
}
Création d'une suite de tests de tests UIAutomator
La combinaison des tests UIAutomator à une suite de tests est rapide:
package de.androidtest.myapplication;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class)
@Suite.SuiteClasses({InterAppTest1.class, InterAppTest2.class})
public class AppTestSuite {}
Exécuter un test similaire à un seul test en cliquant à droite et exécutez la suite.