Выбор элемента из раскрывающегося списка в Espresso

Я пытаюсь написать тест Espresso, который будет переходить к поиску, набирать 2 буквы, чтобы получить добавочный поиск, и нажимать на 2-й элемент в списке.

Результаты отображаются в адаптере.

Первую часть я, конечно, делаю хорошо, но когда нужно кликнуть по пункту в списке, возникает проблема.

Я уже пробовал что-то вроде

onData(anything()).inAdapterView(withId(R.id.searchContainer)).atPosition(1).perform(click())

а также

onData(withChild(withText("Some Search"))).atPosition(1).perform(click())

(где Some Search — полный текст результата)

а также

onData(withId(android.R.id.text1)).atPosition(1).perform(click())

(где text1 — идентификатор поля результата)

    @Test
    fun searchForSandwich() {

        onView(withId(R.id.textSearch)).perform(typeText("ha"))

        onData(withChild(withText("Ham Sandwich"))).atPosition(1).perform(click())

Он должен щелкнуть результат и открыть новый экран/активность, и я сделаю там свое утверждение.

В настоящее время я получаю эту ошибку:

Caused by: java.lang.RuntimeException: Action will not be performed because the target view does not match one or more of the following constraints:
(is assignable from class: class android.widget.AdapterView and is displayed on the screen to the user)
Target view: "ce{id=-1, visibility=GONE, width=0, height=0, has-focus=false, has-focusable=false, has-window-focus=true, is-clickable=true, is-enabled=true, is-focused=false, is-focusable=false, is-layout-requested=true, is-selected=false, layout-params=android.widget.RelativeLayout$LayoutParams@4d102dd, tag=null, root-is-layout-requested=false, has-input-connection=false, x=0.0, y=0.0, child-count=0}"

Любые предложения, это сводит меня с ума... Спасибо :)


person somefun    schedule 23.05.2019    source источник
comment
Я также пробовал что-то вроде: ``` onData(allOf(is(instanceOf(String::class.java)), is(бутерброд с ветчиной))).perform(click()) ``` И это не сработало, что странно, потому что это точный жестко закодированный результат...   -  person somefun    schedule 23.05.2019


Ответы (1)


Мне нужно увидеть представление, чтобы убедиться, но в 99% случаев вам не нужно использовать onData, и вы можете просто использовать onView(withText(containsString(yourSearchFilter))).perform(click()).

Также, вероятно, существует withSubstring(text), который соответствует withText(containsString(text))

person Prethia    schedule 27.05.2019
comment
К сожалению нет. androidx.test.espresso.NoMatchingViewException: в иерархии не найдено ни одного представления, соответствующего: с текстом: строка, содержащая УСЛОВИЕ ПОИСКА. Если целевое представление не является частью иерархии представлений, вам может потребоваться использовать Espresso.onData, чтобы загрузить его из одного из следующие адаптеры: com.google.maps.... - person somefun; 28.05.2019