2017-05-03 3 views
5

enter image description heretest Espresso désactiver l'animation

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

} 

je rencontrais un problème à faire des tests Espresso avec une vue impliquant l'animation, je sais Espresso ne peut pas traiter avec l'animation, donc je l'ai fait ci-dessous. - désactiver mon périphérique de test L'animation de la fenêtre, l'animation de transition et l'échelle de durée d'animation sont toutes désactivées (cela ne fonctionne pas) - alors j'ai essayé d'ajouter un drapeau dans mon code, par exemple. espresso_testing = true. si vrai, mon code ignorera l'appel de toute fonction startAnimation(). ---> ceci fonctionne. Cependant, il est nécessaire que je ne puisse pas changer le code sur mon application pendant que j'écris un cas de test expresso. Inclus un cas de test ci-dessus.

Existe-t-il un autre moyen de le faire? Merci d'avance.

Répondre

0

Il est vrai que vous ne devez pas ajouter de code de test dans le code de production. Le problème ici réside dans l'animation. Si vous effectuez des animations en utilisant Handlers et Runnables, vous ne pouvez pas les désactiver à l'aide des options de développement. Un endroit commun où nous utilisons ceci pour animer est dans les vues personnalisées.

Mais même dans les vues personnalisées, assurez-vous d'utiliser ValueAnimator, ObjectAnimator ou AnimatorSet pour réaliser votre animation. Seulement alors, vous pouvez désactiver les animations en désactivant Animator duration scale dans les options de développement.

Une bonne référence est le ProgressBar.

+0

J'ai ajouté l'animation de mon appareil à la désactivation de la capture d'écran. Même avec ces paramètres, le test échoue toujours sur l'animation. – kggoh

15

Assurez-vous de garder votre plug-in mis à jour:

buildscript { 
    repositories { 
    maven { url "https://plugins.gradle.org/m2/" } 
    } 

    dependencies { 
    classpath "com.android.tools.build:gradle:2.3.1" 
    } 
} 

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

Un pas de plus serait de le faire via commandline:

# 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

+0

J'utilise un vrai appareil pour tester, est-ce que ce qui précède s'applique toujours? – kggoh

+0

@kggoh Vous pouvez essayer Android DSL 'animationsDisabled', le second peut ou ne peut pas fonctionner. Je l'utilise sur les émulateurs API 19. –

+0

animationsDisabled est une propriété inconnue et j'ai ajouté le buildscript que vous avez indiqué ci-dessus – kggoh

1

Vous pouvez jeter un oeil à ce repo

Générez le projet et télécharger le généré. fichier apk et suivez les instructions mentionnées dans ce projet pour désactiver les animations et vous devriez avoir une navigation en douceur après. Vous pouvez également télécharger le même fichier .apk à partir de nombreuses autres sources. Une fois que vous avez le fichier .apk puis utilisez 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 va prendre soin de désactiver les animations du système pour vous.