1

Так что я недавно начал возиться с Espresso в одном из моих существующих проектов Android.Espresso AutoCompleteTextView click

Все прошло довольно прилично, пока я не нашел AutoCompleteTextView в своей программе. Кажется, я не понимаю, как правильно нажать первую вещь в списке автозаполнения. Я на самом деле даже не уверен, что использовать, onView() или onData() в этом случае.

ответ

1

Так я, наконец, понял это, благодаря этому предыдущий вопрос: Testing autocomplete textview using espresso tool

Ill просто опубликовать свою версию этого для людей, которые могли бы использовать его в будущее.

onData(instanceOf("Whatever your arrayadapter contains".class)).inRoot(RootMatchers.withDecorView(not(is(mActivityRule.getActivity().getWindow().getDecorView())))).perform(ViewActions.click()); 
-2

Вы можете проверить эту библиотеку пример: Library

+0

Я не вижу, как это имеет отношение к Espresso – user3050720

3

Я думаю, что нашел немного более чистый метод, чем принятый ответ!

onData(equalTo("ITEM")).inRoot(RootMatchers.isPlatformPopup()).perform(click());

Разбивка:

  • onData(x) Найдет вид визуализации объекта данных, соответствующий x в выпадающем списке. Данные предоставлены Adaptor, указанными в AutoCompleteTextView, поэтому он может быть объектом любого типа, который предоставляет Adaptor, вероятно, это не будет представление. Для этого вам понадобятся стандартные сокеты для ядра hamcrest (equalTo, instanceOf и т. Д.), А не (withText, withId и т. Д.). Это может быть боль, чтобы попытаться найти, какой объект это и как его сопоставить, но нет более аккуратного способа: с большим количеством элементов в вашем адаптере некоторые из представлений еще не будут в иерархии, так что onView не может работать! onData обязательно загрузит представления, соответствующие вашим данным. Оформить here (это какой onData возвращается) и here (это загружает данные соответствия)
  • inRoot(RootMatchers.isPlatformPopup()) Так получается, выпадающее меню на другое окно, чем окна по умолчанию вашей деятельность проходит в. Таким образом, мы должны указать, что мы хотим искать это окно. В принятом ответе используется RootMatchers.withDecorView(not(is(mActivityRule.getActivity().getWindow().getDecorView()))), который, похоже, соответствует любому окну, который не является стандартным.

Anyways HTH кто-то еще.