@Test
public void test3_PaySuccessful(){
init();
ViewInteraction amountEditText = onView(
allOf(withId(R.id.et_amount), isDisplayed()));
amountEditText.perform(replaceText("SGD 0.010"), closeSoftKeyboard());
//, withText("Proceed")
ViewInteraction appCompatButton = onView(
allOf(withId(R.id.btn_confirm), isDisplayed()));
appCompatButton.perform(click());
//, withText("Pay")
ViewInteraction appCompatButton2 = onView(
allOf(withId(R.id.btn_confirm), isDisplayed()));
appCompatButton2.perform(click());
//dialog
ViewInteraction appCompatButton3 = onView(
allOf(withId(R.id.confirm_button), withText("Confirm"), isDisplayed()));
appCompatButton3.perform(click());
//have to disable animation in order to pass this.
intended(CoreMatchers.allOf(hasComponent(PaymentSelectionActivity2.class.getName())));
}
J'ai rencontré un problème lors du test Espresso avec une vue impliquant une animation. Je sais qu'Espresso ne peut pas traiter l'animation. ne fonctionne pas) - alors j'ai essayé d'ajouter un drapeau dans mon code par exemple. espresso_testing = true. Si true, mon code ignorera l'appel de tous les appels de la fonction startAnimation (). ---> ça marche. Cependant, il est impératif que je ne puisse pas modifier le code de mon application lors de l'écriture d'un scénario de test d'espresso. Inclus un cas de test ci-dessus.
Y a-t-un autre moyen de faire ça? Merci d'avance.
Assurez-vous de garder votre plugin à jour:
buildscript {
repositories {
google()
gradlePluginPortal()
}
dependencies {
classpath 'com.Android.tools.build:gradle:3.3.0'
}
}
Utilisez le nouveau drapeau dans testOptions
appelé animationsDisabled
:
Android {
...
testOptions {
animationsDisabled = true
}
}
Vous pouvez essayer de désactiver manuellement les animations sur votre périphérique/émulateur:
Pour éviter les pellicules, nous vous recommandons vivement de désactiver le système animations sur les périphériques virtuels ou physiques utilisés pour les tests. Sur votre appareil, sous Paramètres> Options du développeur, désactivez ce qui suit 3 réglages:
Échelle d'animation de fenêtre Échelle d'animation de transition Durée de l'animateur échelle
Source:https://developer.Android.com/training/testing/espresso/setup#set-up-environment
Vous pouvez essayer d'utiliser adb
via la ligne de commande:
# Turn off animations
adb Shell settings put global window_animation_scale 0 &
adb Shell settings put global transition_animation_scale 0 &
adb Shell settings put global animator_duration_scale 0 &
Source:https://github.com/jaredsburrows/Android-gif-example/blob/master/.travis.yml#L34
Vous pouvez essayer la variable TestButler
de LinkedIn:
TestButler.verifyAnimationsDisabled(InstrumentationRegistry.getTargetContext());
Vous pouvez essayer de créer une tâche TestRule
et Gradle
pour vos tests d'espresso:
Source:https://product.reverb.com/disabling-animations-in-espresso-for-Android-testing-de17f7cf236f
Certes, vous ne devriez pas ajouter de code de test dans le code de production. Le problème ici réside dans l'animation. Si vous réalisez des animations à l'aide de Handlers
et Runnables
, vous ne pouvez pas les désactiver à l'aide des options de développement. Un endroit commun où nous utilisons cela pour animer est dans les vues personnalisées.
Mais même dans les vues personnalisées, veillez à utiliser soit ValueAnimator
, ObjectAnimator
ou AnimatorSet
pour effectuer votre animation. Vous pourrez alors désactiver les animations en désactivant Animator duration scale
dans les options du développeur.
Une bonne référence est la ProgressBar
.
Vous pouvez jeter un oeil à ce repo
Générez le projet et téléchargez le fichier .apk généré, puis suivez les instructions mentionnées dans ce projet pour désactiver les animations. Vous devriez ensuite pouvoir naviguer en douceur. Vous pouvez également télécharger le même fichier .apk à partir de nombreuses autres sources . Une fois que vous avez le fichier .apk, exécutez les commandes suivantes:
adb install -r Android_emulator_hacks.apk
adb Shell pm grant no.finn.Android_emulator_hacks Android.permission.SET_ANIMATION_SCALE
adb Shell am start -n no.finn.Android_emulator_hacks/no.finn.Android_emulator_hacks.HackActivity
Cela permettra de désactiver les animations du système pour vous.