it-swarm.com.de

Espresso-Test deaktiviert die 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())));

}

Ich habe ein Problem beim Durchführen von Espresso-Tests mit einer Animation mit Animationen festgestellt. Ich weiß, dass Espresso keine Animationen verarbeiten kann. Ich habe es im Folgenden getan funktioniert nicht) - dann habe ich versucht, ein Flag in meinem Code einzufügen, zB. espresso_testing = true Wenn dies der Fall ist, überspringt mein Code den Aufruf aller startAnimation () - Funktionsaufrufe. ---> das funktioniert. Es besteht jedoch die Anforderung, dass ich beim Schreiben von Espresso-Testfällen keinen Code in meiner App ändern kann. Ein Testfall oben enthalten. 

Gibt es eine andere Möglichkeit, dies zu tun? Danke im Voraus.

13
kggoh

Stelle sicher, dass dein Plugin auf dem neuesten Stand ist:

buildscript {
  repositories {
    google()
    gradlePluginPortal()
  }

  dependencies {
    classpath 'com.Android.tools.build:gradle:3.3.0'
  }
}

Verwenden Sie das neue Flag in testOptions mit dem Namen 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

Sie können versuchen, Animationen auf Ihrem Gerät/Emulator manuell zu deaktivieren:

Um Flockigkeit zu vermeiden, empfehlen wir dringend, das System auszuschalten Animationen auf den virtuellen oder physischen Geräten, die zum Testen verwendet werden. Auf Deaktivieren Sie auf Ihrem Gerät unter Einstellungen> Entwickleroptionen die folgenden Optionen 3 Einstellungen:

Fensteranimationsskala Übergangsanimationsskala Animatordauer Rahmen

Source:https://developer.Android.com/training/testing/espresso/setup#set-up-environment

Sie können versuchen, adb über die Befehlszeile zu verwenden:

# 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

Sie können die TestButler von LinkedIn ausprobieren:

TestButler.verifyAnimationsDisabled(InstrumentationRegistry.getTargetContext());

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

Sie können versuchen, eine TestRule- und Gradle-Aufgabe für Ihre Espresso-Tests zu erstellen:

Source:https://product.reverb.com/disabling-animations-in-espresso-for-Android-testing-de17f7cf236f

45
Jared Burrows

Sie sollten zwar keinen Testcode im Produktionscode hinzufügen. Das Problem liegt hier in der Animation. Wenn Sie Animationen mit Handlers und Runnables ausführen, können Sie sie nicht mit den Entwickleroptionen deaktivieren. Ein üblicher Ort, an dem wir dies zum Animieren verwenden, ist in benutzerdefinierten Ansichten.

Stellen Sie jedoch auch in benutzerdefinierten Ansichten sicher, dass Sie entweder ValueAnimator, ObjectAnimator oder AnimatorSet verwenden, um Ihre Animation auszuführen. Nur dann können Sie Animationen deaktivieren, indem Sie Animator duration scale in den Entwickleroptionen deaktivieren.

Eine gute Referenz ist ProgressBar

1
Henry

Sie könnten einen Blick auf dieses Repo werfen.

Erstellen Sie das Projekt, laden Sie die generierte .apk-Datei herunter und folgen Sie den Anweisungen in diesem Projekt, um die Animationen zu deaktivieren. Anschließend sollten Sie ein reibungsloses Segeln durchführen. Sie können die gleiche .apk-Datei auch von vielen anderen Quellen herunterladen. Wenn Sie die .apk-Datei haben, geben Sie die folgenden Befehle ein:

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

Dadurch werden die Systemanimationen für Sie deaktiviert.

1
mark w.