2017-05-16 1 views
2

I`mAndroid Espresso: Fehler durchführen: PerformException

android.support.test.espresso.PerformException bekommen 'senden keyCode: 4, MetaState: 0 Schlüsselereignis' auf Sicht ‚Animationen oder Übergänge sind auf dem Zielgerät aktiviert.

Ich las Artikel mit demselben Fehler, aber fand keine Antwort.

Ich habe einfach android app und ich versuche, einfache Sache zu testen:

  1. laden RecyclerView
  2. Klicken Sie auf RecyclerView`s Artikel
  3. Öffnen Aktivität
  4. Drücken Sie die Taste innerhalb Aktivität
  5. Press zurück
  6. Wiederholen Sie von Teil 1.

-Code ist extrem einfach:

@Test 
public void getOver500Products() { 
    onView(withId(R.id.drawer_layout)).perform(DrawerActions.open()); 
    onView(withId(R.id.layout2)).perform(click()); 
    clickExactItem(2); 
    for (int i = 0; i< 501; i++) { 
     clickRandomItem(); 
     addedToCart(); 
     Espresso.pressBack(); 
    } 
} 

public void clickRandomItem() { 
    try { 
     int x = getRandomRecyclerPosition(R.id.list); 
     clickExactItem(x); 
    } catch (NoMatchingViewException e) { 
    } 
} 

public void clickExactItem(int position) { 
    onView(withId(R.id.list)) 
      .perform(RecyclerViewActions 
        .actionOnItemAtPosition(position, click())); 
} 

public boolean addedToCart() { 
    try { 
     onView(withId(R.id.product_add_in_cart)).perform(click()); 
    } catch (NoMatchingViewException e) { 
     return false; 
    } 
    return true; 
} 

Es wirft Ausnahme nach 10-50 Wiederholungen (zufällig) so grundsätzlich Code richtig ist.

EspressoTestDev.java:88 Linie, wo es abstürzt ist

Espresso.pressBack(); 

Genau nach dieser Zeile I`m Ausnahme bekommen.

Exception Stacktrace:

android.support.test.espresso.PerformException: Error performing 'send keyCode: 4, metaState: 0 key event' on view 'Animations or transitions are enabled on the target device. 

is a root view.'. 
at android.support.test.espresso.PerformException$Builder.build(PerformException.java:83) 
at android.support.test.espresso.base.DefaultFailureHandler.getUserFriendlyError(DefaultFailureHandler.java:80) 
at android.support.test.espresso.base.DefaultFailureHandler.handle(DefaultFailureHandler.java:56) 
at android.support.test.espresso.ViewInteraction.runSynchronouslyOnUiThread(ViewInteraction.java:184) 
at android.support.test.espresso.ViewInteraction.doPerform(ViewInteraction.java:115) 
at android.support.test.espresso.ViewInteraction.perform(ViewInteraction.java:87) 
at android.support.test.espresso.Espresso.pressBack(Espresso.java:189) 
at com.app.myapp.EspressoTestDev.getOver500Products(EspressoTestDev.java:88) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) 
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) 
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 
at android.support.test.internal.statement.UiThreadStatement.evaluate(UiThreadStatement.java:55) 
at android.support.test.rule.ActivityTestRule$ActivityStatement.evaluate(ActivityTestRule.java:270) 
at org.junit.rules.RunRules.evaluate(RunRules.java:20) 
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) 
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
at org.junit.runners.Suite.runChild(Suite.java:128) 
at org.junit.runners.Suite.runChild(Suite.java:27) 
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
at org.junit.runner.JUnitCore.run(JUnitCore.java:137) 
at org.junit.runner.JUnitCore.run(JUnitCore.java:115) 
at android.support.test.internal.runner.TestExecutor.execute(TestExecutor.java:59) 
at android.support.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:262) 
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1851) 
Caused by: java.lang.RuntimeException: Action will not be performed because the target view does not match one or more of the following constraints: 
is displayed on the screen to the user 
Target view: "PopupViewContainer{id=-1, visibility=VISIBLE, width=0, height=0, has-focus=false, has-focusable=false, has-window-focus=true, is-clickable=false, is-enabled=true, is-focused=false, is-focusable=false, is-layout-requested=false, is-selected=false, root-is-layout-requested=false, has-input-connection=false, x=0.0, y=0.0, child-count=1}" 
at android.support.test.espresso.ViewInteraction$1.run(ViewInteraction.java:138) 
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422) 
at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
at android.os.Handler.handleCallback(Handler.java:815) 
at android.os.Handler.dispatchMessage(Handler.java:104) 
at android.os.Looper.loop(Looper.java:194) 
at android.app.ActivityThread.main(ActivityThread.java:5549) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:964) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:759) 

Sieht aus wie es Problem mit PopupViewContainer gefunden, aber ich nicht sie verwenden, nicht darauf klicken, und ich habe keine Ahnung, wie kann es Auswirkungen auf Espresso.pressBack()

Was ich versucht:

  1. Hinzufügen getInstrumentation().waitForIdleSync(); vor und nach Espresso.pressBack()

  2. macht Verzögerung vorgeschlagen als here

Die Frage ist: wie kann ich vermeiden diese Fehler oder wie kann ich ignorieren und Wiederholungen in meinem Fall weitergehen?

Antwort

2

Animationen oder Übergänge sind auf dem Zielgerät aktiviert.

Espresso funktioniert nicht gut mit Animationen aufgrund der visuellen Statusverzögerungen, die sie einführen. Sie müssen Animationen auf Ihrem Gerät deaktivieren.Erstens, enable developer options:

  1. Öffnen Sie die Einstellungen App.
  2. Scrollen Sie nach unten und wählen Sie Über Telefon.
  3. Scrollen Sie nach unten und tippen Sie sieben Mal auf Build-Nummer.
  4. Kehren Sie zum vorherigen Bildschirm zurück, um Entwickleroptionen unten zu finden.

Access Developer Optionen von App Einstellungen und unter der Abschnitt Zeichnung, schalten alle folgenden Optionen Animation, Off:

  • Fenster Animation Skala
  • Transition Animation Skala
  • Animator Dauer Skala
+0

Wir ll genau der gleiche Fehler = (aber zumindest das funktioniert ein bisschen schneller – DEADMC

Verwandte Themen