2015-07-15 9 views
19

ich diesen Code habe in meinem Espresso TestAndroid Espresso Check ausgewählte Spinner Text

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

    onData(hasToString(startsWith("CCD"))) 
      .perform(click()); 

    onView(withId(R.id.src)) 
      .check(matches(withText(containsString("CCD")))); 

Was ich versuche zu tun, ist das Element in den Spinner und überprüfen klicken, wenn es in der Tat in den Spinner ausgewählt ist.

Aber ich bin immer diese Fehlermeldung:

android.support.test.espresso.base.DefaultFailureHandler$AssertionFailedWithCauseError: 'with text: a string containing "CCD"' doesn't match the selected view. Expected: with text: a string containing "CCD" Got: "AppCompatSpinner{id=2131558533, res-name=src, visibility=VISIBLE, width=528, height=163, has-focus=false, has-focusable=true, has-window-focus=true, is-clickable=true, is-enabled=true, is-focused=false, is-focusable=true, 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}"

+0

In Test spresso Dokumentation zeigen, dass sie eine Lösung mit einem Punkt im Innern des Spinners aus seiner Indexposition ist, ich denke, wählen der richtige Weg ... URL: https://github.com/vgrec/EspressoExamples/blob/master/app/src/androidTest/java/com/vgrec/espressoexamples/SpinnerSelectionTest.java –

Antwort

47

ersetzen withText() mit withSpinnerText()

onView(withId(spinnerId)).perform(click()); 
onData(allOf(is(instanceOf(String.class)), is(selectionText))).perform(click()); 
onView(withId(spinnerId)).check(matches(withSpinnerText(containsString(selectionText)))); 

Referenz: https://code.google.com/p/android-test-kit/issues/detail?id=85

+0

Was ist die AuswahlText hier ?? –

+0

Das ist ein String - der Spinnertext, der für den Benutzer sichtbar ist. – Jonas

2

Für kundenspezifische Adapter i yo einen benutzerdefinierten Matcher erstellen hatte:

onView(withId(R.id.spinner)).perform(click()); 
onData(allOf(is(instanceOf(YourCustomClass.class)), withMyValue("Open"))).perform(click()); 


public static <T> Matcher<T> withMyValue(final String name) { 
    return new BaseMatcher<T>() { 
     @Override 
     public boolean matches(Object item) { 
      return item.toString().equals(name); 
     } 

     @Override 
     public void describeTo(Description description) { 

     } 
    }; 
} 

Dann müssen Sie toString() -Methode für Ihre benutzerdefinierte Klasse überschreiben.

+0

YouCustomClass ist die Adapterklasse und Element ist ein Element aus dem Adapter? –

2

Wirklich einfache Lösung, die für mich gearbeitet ..... ohne CustomSpinner Für Matcher mit

onView(withId(R.id.custom_spinner)).perform(click()); 
onData(anything()).atPosition(1).perform(click()); 
onView(withId(R.id.custom_spinner)).check(matches(withSpinnerText(containsString("yourstring")))); 
Verwandte Themen