1

So habe ich vor kurzem begonnen, mit Espresso in einem meiner bestehenden Android-Projekte herumzuspielen.Espresso AutoCompleteTextView klicken

Alles ging ziemlich anständig, bis ich AutoCompleteTextView in meinem Programm fand. Ich verstehe nicht, wie man das erste Ding in der Autocomplete-Liste richtig anklickt. Ich bin mir eigentlich gar nicht sicher, welches ich verwenden soll, onView() oder onData() in diesem Fall.

Antwort

1

Also habe ich es endlich, dank dieser vorherigen Frage: Testing autocomplete textview using espresso tool

Ill Post nur meine Version davon für Menschen, die in verwenden könnte es Zukunft.

onData(instanceOf("Whatever your arrayadapter contains".class)).inRoot(RootMatchers.withDecorView(not(is(mActivityRule.getActivity().getWindow().getDecorView())))).perform(ViewActions.click()); 
-2

können Sie diese Bibliothek Beispiel überprüfen: Library

+0

Ich sehe nicht, wie das mit Espresso etwas zu tun hat – user3050720

3

Ich denke, ich fand ein bisschen eine sauberere Methode als die angenommene Antwort!

onData(equalTo("ITEM")).inRoot(RootMatchers.isPlatformPopup()).perform(click());

Die Aufteilung:

  • onData(x) Dies wird die Ansicht finden, das Datenobjekt Rendering unten x in dem Dropdown entsprechen. Die Daten werden von der an die AutoCompleteTextView zur Verfügung gestellt, so kann es ein Objekt von jedem Typ sein, der Adaptor bietet, es wird wahrscheinlich kein View sein. Sie sollten die Standard-Hamcrest-Kern-Matcher dafür verwenden (equalTo, instanceOf, etc ...) anstatt (withText, withId, etc ...). Es könnte ein Schmerz sein zu versuchen, herauszufinden, welches Objekt das ist und wie man es anpasst, aber es gibt keinen besseren Weg: mit vielen Gegenständen in deinem Adapter werden einige der Ansichten noch nicht einmal in der Hierarchie sein, so kann onView nicht funktionieren! onData wird sicherstellen, dass die Ansichten geladen werden, die Ihren Daten entsprechen. Kasse here (das, was onData Returns) und here (das die passenden Daten lädt)
  • inRoot(RootMatchers.isPlatformPopup()) So stellt sich das Drop-Down-Menü auf ein anderes Fenster als das Standardfenster Ihre Aktivität in läuft. Also müssen wir angeben, ist, dass wir wollen suche dieses Fenster. Die akzeptierte Antwort verwendet RootMatchers.withDecorView(not(is(mActivityRule.getActivity().getWindow().getDecorView()))), die zu jedem Fenster passt, das nicht das Standardfenster ist.

Anyways HTH jemand anderes.