tutorial test support studio para dev androidtestimplementation android testing textview android-espresso

android - test - espresso dev



¿Cómo puedo probar con Espresso android.widget.TextView setError? (3)

Tengo password.setError(getResources().getString(R.string.incorrect_data)); Si configuro una contraseña inválida, muestro textView con el texto "Datos inválidos", necesito probarlo con Espresso, escribo:

onView(withText(R.string.incorrect_data)).check(matches(isDisplayed()));

Pero está mal, tengo:

android.support.test.espresso.NoMatchingViewException: No views in hierarchy found matching: with string from resource id: <2131493034>[incorrect_data] value: Invalid data! If the target view is not part of the view hierarchy, you may need to use Espresso.onData to load it from one of the following AdapterViews:android.widget.ListView{307b4f3a IFED.VC. ......ID -480,0-0,1022 #7f0a004c app:id/left_drawer}

Y si escribo: onView(withText("Invalid data!")).check(matches(isDisplayed()));

Yo tengo:

android.support.test.espresso.NoMatchingViewException: No views in hierarchy found matching: with text: is "Invalid data!" If the target view is not part of the view hierarchy, you may need to use Espresso.onData to load it from one of the following AdapterViews:android.widget.ListView{307b4f3a IFED.VC. ......ID -480,0-0,1022 #7f0a004c app:id/left_drawer}

Yo uso Espresso 2:

import static android.support.test.espresso.assertion.ViewAssertions.matches; import static android.support.test.espresso.matcher.ViewMatchers.withText; import static android.support.test.espresso.Espresso.onView;

Ayudame por favor.


Escribí un matcher personalizado para Espresso 1.x que compara el textColor de un TextView con un valor determinado. Tal vez podría adoptar esta solución para EditText.getError(...) para Espresso 2.x.

/** * Returns a matcher that matches {@link TextView}s based on text property value. Note: View''s * text property is never null. If you setText(null) it will still be "". Do not use null * matcher. * * @param integerMatcher {@link Matcher} of {@link String} with text to match */ public static Matcher<View> withCurrentTextColor(final Matcher<Integer> integerMatcher) { checkNotNull(integerMatcher); return new BoundedMatcher<View, TextView>(TextView.class) { @Override public void describeTo(Description description) { description.appendText("with text color: "); integerMatcher.describeTo(description); } @Override public boolean matchesSafely(TextView textView) { return integerMatcher.matches(textView.getCurrentTextColor()); } }; } /** * Returns a matcher that matches {@link TextView} based on it''s text property value. Note: * View''s Sugar for withTextColor(is("string")). */ public static Matcher<View> withCurrentTextColor(int color) { return withCurrentTextColor(is(color)); }

Y luego en tu caso de prueba:

onView(withId(R.id.text_warning_title)).check(matches(withCurrentTextColor(activity.getResources().getColor(R.color.black_light))));


me ayudó:

onView(withId(R.id.password)).check(matches(withError( getActivity().getString(R.string.incorrect_data)))); private static Matcher<View> withError(final String expected) { return new TypeSafeMatcher<View>() { @Override public boolean matchesSafely(View view) { if (!(view instanceof EditText)) { return false; } EditText editText = (EditText) view; return editText.getError().toString().equals(expected); } @Override public void describeTo(Description description) { } }; }


Espresso funciona en tres pasos 1: encontrar la vista 2: realizar una acción en la vista la acción que desencadenará el resultado que desea verificar 3: comprobar si la vista hace lo que hace. Verifique la acción o el resultado con algunas Afirmaciones proporcionadas

onView(withId(R.id.password_text)).perform(action); onView(withId(R.id.view_for_expected_outcome)).check(expected outcome)

Consulte https://google.github.io/android-testing-support-library/docs/index.html para obtener más información sobre Espresso.