Encontrar una cuerda con espresso
-
21-12-2019 - |
Pregunta
Estoy intentando leer un valor desde mi vista de interfaz de usuario.Este es el método que utilizo para encontrar la cadena que necesito.Esto sólo devuelve el textView
ID, y no el contenido.
public static String getSpeedIndex(){
return onView(allOf(withId(R.id.slider_index),
isDescendantOfA(withId(R.id.speed_number_column))))
.toString();
}
¿Cómo puedo devolver la cadena que necesito?
Solución
Como se mencionó en los comentarios, no hicimos esta acción un ciudadano de primera clase de la API de expreso para alentar a los autores de las pruebas que se explicitan con acciones y afirmaciones y desalentar la lógica condicional en las pruebas.Con eso en mente, le animo a que investigue un falso para su servidor, de modo que pueda controlar la entrada de prueba (y evitar la falla) y evitar la lógica condicional.
Sin embargo, si debe obtener el valor, puede hacer algo así:
final AtomicReference<String> textFromView = new AtomicReference<String>();
onView(<matcher for your view>).perform(new ViewAction() {
@Override
public Matcher<View> getConstraints() {
// TODO - at the very least, check that this is an instance of TextView
}
@Override
public String getDescription() {
return "get text from text view"
}
@Override
public void perform(UiController uiController, View view) {
textFromView.set(((TextView) view).getText());
}
}
Por supuesto, si lo haces mucho (lo que no debería), puedes hacerlo mejor al poner todo esto en una clase separada.