2016-05-11 6 views
1

Ich habe eine Spinner mit 20 Elementen. Der folgende Code funktioniert, wenn die item auf dem Bildschirm angezeigt wird, wenn Benutzer auf den Spinner klicken.Auswahl eines Bildschirmelements in einem Spinner mit Espresso

onData(allOf(is(instanceOf(SpinnerItem.class)), is(item))).perform(click()); 

Für item das Scrollen erfordern, wird der Test die folgenden Ausnahme getroffen:

android.support.test.espresso.PerformException: Error performing 'single click - At Coordinates: 719, -243 and precision: 16, 16' on view ' displaying data matching: (is an instance of SpinnerItem and is <Text>) within adapter view matching: is assignable from class: class android.widget.AdapterView'. 
at android.support.test.espresso.PerformException$Builder.build(PerformException.java:83) 
... 

man deutlich sehen kann, dass die y-Position bei -243 und daher konnte es nicht durchführen die Klicken. Ich habe versucht, perform(scrollTo(), click()) hinzuzufügen, aber es beschweren sich die scrollTo funktioniert nicht mit onData.

Schätzen Sie für jede Hilfe. Vielen Dank!

Antwort

0

Ich habe auch einen großen Spinner und Scrolling funktioniert gut. Mein Code ist wie folgt zusammen:

onData(allOf(is(instanceOf(String.class)), containsString("5.1.3"))).perform(click()); 

Mit Espresso 2.2.2:

com.android.support.test.espresso:espresso-core:2.2.2 

Der einzige Unterschied ist, dass ich String in meinem Adapter anstelle von benutzerdefinierten Klasse. Vielleicht sollten Sie versuchen, von SpinnerItem zu String nur um zu sehen, wird dieser Fehler weg sein oder nicht?

Auch Problem kann in is(SpinnerItem) sein. Sie können versuchen, für Ihre SpinnerItems eigenen Matcher zu schreiben, wie folgt aus:

public static Matcher<Object> withContent(final String content) { 
    return new BoundedMatcher<Object, SpinnerItem>(SpinnerItem.class) { 
     @Override 
     public boolean matchesSafely(SpinnerItem myObj) { 
      return myObj.content == content; 
     } 

     @Override 
     public void describeTo(Description description) { 
      description.appendText("with content '" + content + "'"); 
     } 
    }; 
} 

und Verwendung:

onData(withContent("5.")).inAdapterView(withId(R.id.contents_theory_listview)).perform(click()); 

Dieses Beispiel: Angenommen, Sie in Ihren Artikel ein content Feld und Sie können für ihre Gleichheit überprüfen mit das Muster.

Ich hoffe, ich habe dir ein paar Ideen gegeben und sie werden dir helfen.