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.
- Espresso startActivity que depende de Intent
- Pruebas de Android: UIAutomator vs Espresso
- Cómo establecer una calificación específica en RatingBar en Espresso?
- Haciendo clic en un elemento de menú en la barra de acción con Espresso al usar onView (withId (...))
- Reduzca el Espresso
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?
- Espresso NestedScrollView
- Cómo utilizar el espresso para presionar un botón AlertDialog
- Error de prueba Espresso: AppNotIdleException
- Cómo escribir prueba funcional automatizada con Facebook SDK en la aplicación de Android?
- ¿Cómo hacer clic en un clickablespan utilizando espresso?
- El recurso de ralentí Espresso no funciona
- Lanzamiento de pruebas Espresso en varios emuladores
- Google Espresso java.lang.RuntimeException: No se pudo iniciar intención Intent {act = android.intent.action.MAIN
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"))));
- Intervalo relativo de Android RelativeLayout
- Debe pasar la dimensión de píxeles resuelta en lugar de id de recurso aquí: getResource (). GetDimession * (ViewGroup.LayoutParams.WRAP_CONTENT)