Поиск строки с помощью Espresso
-
21-12-2019 - |
Вопрос
Я пытаюсь прочитать значение из моего представления пользовательского интерфейса.Это метод, который я использую для поиска нужной строки.Это возвращает только textView
идентификатор, а не содержимое.
public static String getSpeedIndex(){
return onView(allOf(withId(R.id.slider_index),
isDescendantOfA(withId(R.id.speed_number_column))))
.toString();
}
Как я могу вернуть нужную мне строку?
Решение
Как упоминалось в комментариях, мы не сделали это действие первоклассным элементом API Espresso, чтобы побудить авторов тестов быть явными в действиях и утверждениях и препятствовать использованию условной логики в тестах.Имея это в виду, я советую вам подумать о написании подделки для вашего сервера, чтобы вы могли контролировать тестовый ввод (и избегать нестабильности) и избегать условной логики.
Однако, если вам абсолютно необходимо получить значение, вы можете сделать что-то вроде этого:
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());
}
}
Конечно, если вы делаете это часто (чего не следует), вы можете сделать это лучше, вынеся все это в отдельный класс.