tutorial test support studio book app android android-espresso

test - Android Espresso verifica el texto del spinner seleccionado



test ui android (3)

Para el adaptador personalizado tuve que crear un emparejador personalizado:

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) { } }; }

Luego debes anular el método toString () en tu clase personalizada.

Tengo este código en mi prueba de espresso

onView(withId(R.id.src)) .perform(click()); onData(hasToString(startsWith("CCD"))) .perform(click()); onView(withId(R.id.src)) .check(matches(withText(containsString("CCD"))));

Lo que estoy tratando de hacer es hacer clic en el elemento en el Spinner y verificar si está seleccionado en el Spinner .

Pero estoy recibiendo este error:

android.support.test.espresso.base.DefaultFailureHandler $ AssertionFailedWithCauseError: ''con texto: una cadena que contiene "CCD"'' no coincide con la vista seleccionada. Se esperaba: con texto: una cadena que contenía "CCD". Se obtuvo: "AppCompatSpinner {id = 2131558533, res-name = src, visibilidad = VISIBLE, width = 528, height = 163, has-focus = false, has-focusable = true, has-window-focus = true, is-clickable = true, is-enabled = true, is-focus = false, is-focusable = true, is-layout-request = false, is-selected = false, root-is- layout-request = false, has-input-connection = false, x = 0.0, y = 0.0, child-count = 1} "


Reemplazar con withText() con withSpinnerText()

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

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


Una solución realmente simple que funcionó para mí ... sin usar el emparejador Para CustomSpinner

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"))));