Вопрос

Я пытаюсь прочитать значение из моего представления пользовательского интерфейса.Это метод, который я использую для поиска нужной строки.Это возвращает только 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());
  }
}

Конечно, если вы делаете это часто (чего не следует), вы можете сделать это лучше, вынеся все это в отдельный класс.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top