Тестирование AutoCompleteTextView с помощью эспрессо

Я использую Espresso для тестирования приложения с несколькими AutoCompleteTextViews. Для одного конкретного теста появляется всплывающее окно автозаполнения, но я хочу просто проигнорировать его и перейти к следующему TextView. Как я могу это сделать? Мои идеи состоят в том, чтобы либо имитировать нажатие «Назад», либо имитировать нажатие во всплывающем окне.

Обновление:

Я пытаюсь щелкнуть всплывающее окно автозаполнения следующим образом:

onView(withId(R.id.brand_text))
        .perform(scrollTo(), typeText(card.getBrand()));
onData(allOf(is(instanceOf(String.class)), is(card.getBrand())))
        .inRoot(isPlatformPopup())
        .perform(click());
onView(withId(R.id.brand_text))
        .check(matches(withText(card.getBrand())));

Теперь проблема в том, что в некоторых случаях введенный текст не имеет совпадений с автозаполнением, поэтому всплывающее окно не появляется. Как условно выполнить щелчок в зависимости от того, соответствует ли представление?


person Code-Apprentice    schedule 08.02.2016    source источник


Ответы (1)


Мое решение состояло в том, чтобы добавить в мой тест объект UiDevice из UI Automator:

 UiDevice device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());

Затем я вызываю UiDevice.pressEnter(), чтобы перейти к следующему TextView.

device.pressEnter();

Возникшая проблема заключается в том, что это не работает, как ожидалось, из коробки. Я также добавил View.OnKeyListener к каждому AutoCompleteTextView для обработки события клавиши Enter. Сейчас я добавляю прослушиватель к каждому представлению и явно указываю, какие запросы представления фокусируются на событии клавиши Enter.

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    // ...

    brandText.setOnKeyListener(new View.OnKeyListener() { 
        @Override 
        public boolean onKey(View v, int keyCode, KeyEvent event) { 
            if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_ENTER) { 
                yearText.requestFocus(); 
                return true; 
            } 

            return false; 
        } 
    });

    //...
}

Это не идеально. В конце концов я планирую обобщить это, возможно, с помощью специального компонента, который наследуется от AutoCompleteTextView, который обрабатывает клавишу Enter, как я ожидаю. Он отправит фокус на «следующий» вид.

person Code-Apprentice    schedule 10.02.2016