2016-07-06 7 views
3

ich tue üblichen Test wie:Espresso Testausgänge in Timeout

runTestOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       some_button.performClick(); 
       onView(withId(R.id.some_other_button)).check(matches(isDisplayed())); 

      } 
     }); 
} 

Aber der Test endet nie. Nun, wenn ich onView Methode nehme und wenn ich es nach der runTestOnUiThread Anweisung, dann das Ergebnis ist das gleiche. Jemand hat eine Idee?

Antwort

2

Das ist nicht üblich, was Sie tun. Sie rufen onView() auf dem UI-Thread der zu testenden Anwendung auf, deshalb wird der Test nie beendet. Es ist eine alte Sackgasse.

Um den Test zu beenden, rufen Sie keine Espresso-Methoden in runTestOnUiThread. Und in UI-Tests sollten Sie nicht auf Buttons klicken, indem Sie entweder die performClick() Methode aufrufen. Verwenden Espresso dafür:

public void test_click(){ 
    // Click on the `some_button` 
    onView(withId(R.id.some_other)).perform(click()); 

    // Or click on view with the text 'OK` 
    onView(withText("OK")).perform(click()); 

    // Check that a view with R.id.some_other_button is displayed 
    onView(withId(R.id.some_other_button)).check(matches(isDisplayed())); 
} 

Die AppNotIdleException ausgelöst wird, wenn Espresso hat zu lange warten, bis der App frei wird. In Ihrem Fall macht die App etwas im Hintergrund mit AsyncTasks. Haben Sie einige Aufgaben ausgeführt?

zu reduzieren, Zeit bis zum Espresso ausfällt, können Sie seine Timeouts reduzieren:

@BeforeClass 
public static void beforeClass() { 
    IdlingPolicies.setMasterPolicyTimeout(10, TimeUnit.SECONDS); 
    IdlingPolicies.setIdlingResourceTimeout(10, TimeUnit.SECONDS); 
} 
+0

Ich weiß, dass aber, bekomme ich diese Meldung, wenn ich den 'Runnable' Anruf nicht verwenden, ich diesen' CalledFromWrongThreadException erhalten: Nur der ursprüngliche Thread, der eine Ansichtshierarchie erstellt hat, kann seine Ansichten berühren. Übrigens kommt mein 'Button' von diesem' alertDialog.getButton (DialogInterface.BUTTON_POSITIVE) '', so dass ich seine ID nicht kenne ... um '' aufzurufen perform (click()) '(aber ich google es gerade) – Newben

+0

' CalledFromWrongThreadException' wird ausgelöst, wenn Sie 'perfectionClick()' aus dem Test-Thread ausführen. Wenn Sie wirklich 'performClick()' ausführen wollen, müssen Sie 'runTestOnUiThread()' verwenden, aber 'onView()' daraus entfernen. – thaussma

+0

Ja, das ist genau was ich vor ein paar Minuten, aber ich bekomme diese 'android.support.test.espresso.PerformException: Fehler bei der Ausführung 'einzelner Klick' - bei Koordinaten: 581, 821 und Präzision: 16, 16 'auf' mit Text : ist in Ordnung"'. – Newben