Cómo probar los valores de TextInputLayout (sugerencia, error, etc.) usando Android Espresso?

Estoy intentando probar usar Espresso si mis vistas de TextInputLayout tienen indirecta específica. Había usado un código como el siguiente:

 Espresso.onView(ViewMatchers.withId(R.id.edit_text_email)) .check(ViewAssertions.matches( ViewMatchers.withHint(R.string.edit_text_email_hint))) 

Esto funciona bien para las vistas normales de EditText , no envuelto en TextInputLayout . Sin embargo, cuando se envuelve, ya no funciona.

He intentado utilizar la solución de Android Espresso – ¿Cómo comprobar la pista EditText? , Pero todavía no funciona.

También miré en: https://code.google.com/p/android/issues/detail?id=191261 que informó sobre el problema, dice que la solución es bastante fácil señalando el código actual withHint , pero puedo ' T conseguir que funcione.

¿Alguna idea para solucionar este problema?

Aquí está mi encuadernador personalizado:

 public static Matcher<View> hasTextInputLayoutHintText(final String expectedErrorText) { return new TypeSafeMatcher<View>() { @Override public boolean matchesSafely(View view) { if (!(view instanceof TextInputLayout)) { return false; } CharSequence error = ((TextInputLayout) view).getHint(); if (error == null) { return false; } String hint = error.toString(); return expectedErrorText.equals(hint); } @Override public void describeTo(Description description) { } }; } } 

Y aquí es cómo utilizar:

 @RunWith(AndroidJUnit4.class) public class MainActivityTest { @Rule public ActivityTestRule<MainActivity> mRule = new ActivityTestRule<>(MainActivity.class); @Test public void testMyApp() { onView(withId(R.id.textInputLayout)).check (matches(hasTextInputLayoutErrorText(mRule.getActivity().getString(R.string .app_name)))); } 

Si desea comprobar errorText de TextInputLayout , cambie esta línea:

  CharSequence error = ((TextInputLayout) view).getHint(); 

con

  CharSequence error = ((TextInputLayout) view).getError(); 

Espero que ayude

Solución más genérica que funcionaría con cualquier vista que tenga el método "getHint":

 public static Matcher<View> withCustomHint(final Matcher<String> stringMatcher) { return new BaseMatcher<View>() { @Override public void describeTo(Description description) { } @Override public boolean matches(Object item) { try { Method method = item.getClass().getMethod("getHint"); return stringMatcher.matches(method.invoke(item)); } catch (NoSuchMethodException e) { } catch (InvocationTargetException e) { } catch (IllegalAccessException e) { } return false; } }; } 

Uso:

 onView(withId(R.id.SomeLayout)).check(matches(withCustomHint(is("SomeString")))); 
  • Prueba Espresso NestedScrollView - "Error al ejecutar 'desplazamiento a' en vista 'con id:"
  • Cómo probar con Espresso un PendingIntent generado por TaskStackBuilder
  • Cómo probar el gesto de desplazamiento del buscapersonas en Android con Espresso 2.2
  • Prueba Espresso en un módulo separado
  • ¿Cómo podemos usar espresso para probar una actividad de configuración de Android con un PreferenceFragment?
  • Valor de archivo de cadena de lectura Espresso
  • Android Espresso: longClick () no funciona y se comporta como click ()
  • Prueba de RxJava2 usando Espresso y obtener una excepción de puntero nulo cuando suscribeOn
  • Android Espresso testing 'No se puede resolver el símbolo' InstrumentationRegistry ''
  • Uso de Espresso para hacer clic en la vista dentro del elemento RecyclerView
  • GetActivity () causa RuntimeException: No se pudo iniciar intención Intent act = android.intent.action.MAIN
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.