2015-01-21 15 views
20

Ho provato a utilizzare il framework di test Espresso e ho scritto un semplice test.Il test dell'espresso ha esito negativo dopo un clic e un blocco riusciti per 60 secondi

Niente di speciale lì, proprio questo codice:

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

test funziona bene su un dispositivo Nexus 5 e Genymotion con Android 5.0, ma non riesce a emulatore Android 4.x, 5.0, 2.3 Genymotion, 4.x e LG G2 con Android 4.x.

Su tutti questi dispositivi/emulatori/simulatori, il pulsante viene cliccato e la sua azione viene eseguita (passando a un'altra schermata nel mio caso). Il problema è che blocchi in perform su alcuni dispositivi. Questo termina con una bella eccezione dopo 60 secondi:

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

Si noti che non ci sono informazioni su quali condizioni non sono riuscite. Guardando il codice sorgente di Espresso, dovrebbe esserci un elenco di problemi separati da virgole.

Questo è il codice completo: TestCase.java.

e pieno 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 

risposta

13

E 'stato un errore nel mio codice app, dove SwipeRefreshLayout stesso animato a tempo indeterminato. A causa di a bug in this component, lo stato di aggiornamento non veniva nemmeno visualizzato.

+1

Grazie mille! Questo mi stava facendo impazzire; Avevo un'animazione in rotazione in un frammento precedente che non veniva mai cancellata, quindi l'app non era inattiva e i test dell'Espresso si sarebbero bloccati. Realmente una grande funzionalità ora mi rendo conto, in quanto costringe lo sviluppatore ad essere in ordine con animazioni e azioni sullo sfondo. – MattMatt

+0

Grazie mille !!! Nel mio caso, OffsetChangeListener di AppBarLayout ha chiamato costantemente dove personalizza l'AppBar con un'animazione – Rajeshwar

Problemi correlati