2015-01-21 4 views
20

Ich habe versucht, mit Espresso-Test-Framework und schrieb einen einfachen Test.Espresso-Test fehlgeschlagen nach erfolgreichem Klicken und Blockieren für 60 Sekunden

Nichts Besonderes, da nur dieser Code:

onView(withId(R.id.login_button_stub)).perform(click()); 

-Test läuft auf einem Nexus 5-Gerät und Genymotion mit Android 5.0, in Ordnung, aber nicht auf 4.x Android Emulator, 5.0, Genymotion 2.3, 4.x und LG G2 mit Android 4.x.

Auf allen diesen Geräten/Emulatoren/Simulatoren wird die Schaltfläche geklickt und ihre Aktion ausgeführt (in meinem Fall zu einem anderen Bildschirm). Das Problem ist, dass es bei einigen Geräten in perform blockiert. Dies endet mit einer schönen Ausnahme nach 60 Sekunden:

android.support.test.espresso.PerformException: Error performing 'single click' on view 'with id: com.vielengames.mock:id/login_button_stub'. 
    ... 
    Caused by: android.support.test.espresso.AppNotIdleException: Looped for 3544 iterations over 60 SECONDS. The following Idle Conditions failed . 
    ... 

Beachten Sie, dass es keine Informationen darüber gibt, welche Bedingungen fehlgeschlagen sind. Betrachtet man den Espresso-Quellcode, sollte eine durch Kommas getrennte Liste von Problemen vorhanden sein.

Hier ist der vollständige Code: .

und voll Stacktrace:

I/TestRunner﹕ android.support.test.espresso.PerformException: Error performing 'single click' on view 'with id: com.vielengames.mock:id/login_button_stub'. 
     at android.support.test.espresso.PerformException$Builder.build(PerformException.java:83) 
     at android.support.test.espresso.base.DefaultFailureHandler.getUserFriendlyError(DefaultFailureHandler.java:70) 
     at android.support.test.espresso.base.DefaultFailureHandler.handle(DefaultFailureHandler.java:53) 
     at android.support.test.espresso.ViewInteraction.runSynchronouslyOnUiThread(ViewInteraction.java:185) 
     at android.support.test.espresso.ViewInteraction.doPerform(ViewInteraction.java:115) 
     at android.support.test.espresso.ViewInteraction.perform(ViewInteraction.java:87) 
     at com.vielengames.ui.NotLoggedOnTestCase.testLoggedOnAfterLoginClick(NotLoggedOnTestCase.java:19) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:515) 
     at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:214) 
     at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:199) 
     at android.test.ActivityInstrumentationTestCase2.runTest(ActivityInstrumentationTestCase2.java:192) 
     at junit.framework.TestCase.runBare(TestCase.java:134) 
     at junit.framework.TestResult$1.protect(TestResult.java:115) 
     at junit.framework.TestResult.runProtected(TestResult.java:133) 
     at android.support.test.internal.runner.junit3.DelegatingTestResult.runProtected(DelegatingTestResult.java:90) 
     at junit.framework.TestResult.run(TestResult.java:118) 
     at android.support.test.internal.runner.junit3.AndroidTestResult.run(AndroidTestResult.java:49) 
     at junit.framework.TestCase.run(TestCase.java:124) 
     at android.support.test.internal.runner.junit3.NonLeakyTestSuite$NonLeakyTest.run(NonLeakyTestSuite.java:63) 
     at junit.framework.TestSuite.runTest(TestSuite.java:243) 
     at junit.framework.TestSuite.run(TestSuite.java:238) 
     at android.support.test.internal.runner.junit3.DelegatingTestSuite.run(DelegatingTestSuite.java:103) 
     at android.support.test.internal.runner.junit3.AndroidTestSuite.run(AndroidTestSuite.java:63) 
     at android.support.test.internal.runner.junit3.JUnit38ClassRunner.run(JUnit38ClassRunner.java:90) 
     at org.junit.runners.Suite.runChild(Suite.java:128) 
     at org.junit.runners.Suite.runChild(Suite.java:24) 
     at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) 
     at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) 
     at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) 
     at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) 
     at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) 
     at org.junit.runners.ParentRunner.run(ParentRunner.java:300) 
     at org.junit.runner.JUnitCore.run(JUnitCore.java:157) 
     at org.junit.runner.JUnitCore.run(JUnitCore.java:136) 
     at android.support.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:270) 
     at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1701) 
Caused by: android.support.test.espresso.AppNotIdleException: Looped for 3544 iterations over 60 SECONDS. The following Idle Conditions failed . 
     at android.support.test.espresso.IdlingPolicy.handleTimeout(IdlingPolicy.java:61) 
     at android.support.test.espresso.base.UiControllerImpl.loopUntil(UiControllerImpl.java:471) 
     at android.support.test.espresso.base.UiControllerImpl.loopUntil(UiControllerImpl.java:402) 
     at android.support.test.espresso.base.UiControllerImpl.injectMotionEvent(UiControllerImpl.java:226) 
     at android.support.test.espresso.action.MotionEvents.sendUp(MotionEvents.java:135) 
     at android.support.test.espresso.action.MotionEvents.sendUp(MotionEvents.java:118) 
     at android.support.test.espresso.action.Tap.sendSingleTap(Tap.java:135) 
     at android.support.test.espresso.action.Tap.access$100(Tap.java:35) 
     at android.support.test.espresso.action.Tap$1.sendTap(Tap.java:40) 
     at android.support.test.espresso.action.GeneralClickAction.perform(GeneralClickAction.java:98) 
     at android.support.test.espresso.ViewInteraction$1.run(ViewInteraction 

Antwort

13

Es war in meiner App-Code ein Bug, wo SwipeRefreshLayout sich auf unbestimmte Zeit animiert. Aufgrund von a bug in this component wurde der Aktualisierungsstatus nicht angezeigt.

+1

Vielen Dank! Das hat mich verrückt gemacht; Ich hatte eine sich drehende Animation, die in einem vorherigen Fragment lief, das nie gelöscht wurde, also war die App nicht im Leerlauf und der Espresso-Test würde hängen bleiben. Eigentlich ein großes Feature, jetzt erkenne ich, wie es den Entwickler zwingt, mit Animationen und Hintergrundaktionen ordentlich zu sein. – MattMatt

+0

Vielen Dank !!! In meinem Fall wird OffsetChangeListener von AppBarLayout ständig aufgerufen, wo es die AppBar mit einer Animation anpasst – Rajeshwar