web-dev-qa-db-fra.com

Les tests d'espresso désactivent l'animation

 enter image description here

@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.

13
kggoh

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
  }
}

Source:https://google.github.io/Android-gradle-dsl/current/com.Android.build.gradle.internal.dsl.TestOptions.html#com.Android.build.gradle. internal.dsl.TestOptions: animationsDisabled

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());

Source:https://github.com/linkedin/test-butler/blob/master/test-butler-demo/src/androidTest/Java/com/linked/Android/testbutler/demo/AnimationDisable Java # L26

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

45
Jared Burrows

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

1
Henry

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.

1
mark w.