Trouver une Chaîne de caractères avec l'Espresso
-
21-12-2019 - |
Question
Je suis en train de lire une valeur à partir de mon INTERFACE utilisateur vue.C'est la méthode que j'utilise pour trouver la chaîne dont j'ai besoin.Cela renvoie uniquement l' textView
id, et non le contenu.
public static String getSpeedIndex(){
return onView(allOf(withId(R.id.slider_index),
isDescendantOfA(withId(R.id.speed_number_column))))
.toString();
}
Comment puis-je retourner la chaîne dont j'ai besoin?
La solution
Comme mentionné dans les commentaires, nous n'avons pas à faire de cette action une première classe de citoyen de l'Espresso API afin d'encourager d'essai des auteurs d'être explicite avec des actions et des assertions et de décourager la logique conditionnelle dans les tests.Avec cela à l'esprit, je vous encourage à regarder dans la rédaction d'un faux de votre serveur, de sorte que vous pouvez contrôler l'entrée de test (et éviter de feuilletage) et d'éviter la logique conditionnelle.
Toutefois, si vous devez absolument obtenir la valeur, vous pouvez faire quelque chose comme ceci:
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());
}
}
Bien sûr, si vous faites cela, beaucoup (qui ne convient pas), vous pouvez le rendre plus agréable en mettant tout cela dans une classe à part.