Encontrando uma corda com Espresso
-
21-12-2019 - |
Pergunta
Estou tentando ler um valor da minha visualização da IU.Este é o método que uso para encontrar a string que preciso.Isso só retorna o textView
id, e não o conteúdo.
public static String getSpeedIndex(){
return onView(allOf(withId(R.id.slider_index),
isDescendantOfA(withId(R.id.speed_number_column))))
.toString();
}
Como posso retornar a string que preciso?
Solução
Conforme mencionado nos comentários, não tornamos esta ação um cidadão de primeira classe da API Espresso para encorajar os autores dos testes a serem explícitos com ações e asserções e desencorajar a lógica condicional nos testes.Com isso em mente, encorajo você a escrever uma falsificação para o seu servidor, para que possa controlar a entrada do teste (e evitar instabilidade) e evitar lógica condicional.
No entanto, se for absolutamente necessário obter o valor, você pode fazer algo assim:
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());
}
}
Claro, se você faz muito isso (o que não deveria), você pode torná-lo mais agradável colocando tudo isso em uma classe separada.