Android Espresso NoMatchingViewException при проверке

Я пробую новую библиотеку тестирования Android Espresso. Когда я пытаюсь:

onView(withId(R.id.gettingStarted))

Тест проходит нормально. Но когда я пытаюсь:

onView(withId(R.id.gettingStarted)).check(matches(isDisplayed()));

Я получаю .NoMatchingViewException: No views in hierarchy found matching: with id: is <2131296645>

Кто-нибудь видел что-нибудь подобное раньше? Мой первоначальный рефлекс заключается в том, что это просто ошибка, потому что Espresso есть только в версии 1.0. Я использую Android Studio и точно следую инструкциям по настройке.


person Zargoon    schedule 25.10.2013    source источник


Ответы (3)


Это ожидаемое поведение.

onView(withId(R.id.gettingStarted)) сам по себе ничего не делает. Когда вы вызываете метод execute, Espresso запускает средство сопоставления, предоставленное внутри метода onView, для текущей иерархии представлений — если соответствующее представление не найдено, генерируется исключение.

Дополнительные сведения см. в руководстве по началу работы: https://developer.android.com/training/testing/espresso/index.html

person ValeraZakharov    schedule 27.10.2013
comment
Но представление присутствует в иерархии, работает ли элемент управления быстрее загружаемых представлений? - person Kaveesh Kanwal; 28.11.2016
comment
данная ссылка битая - person Esir Kings; 17.05.2018
comment
URL-ссылка не найдена? - person MNFS; 15.03.2019
comment
в моем случае управление работает быстрее, чем загружаемые представления, есть идеи в этом случае? @KaveeshKanwal или кто-то еще? - person AppDeveloper; 20.09.2020

Есть много законных случаев, когда вы не можете определить R.id во время разработки теста. Например, конкретное представление может не иметь R.id или R.id не уникален. Это может сделать обычные инструментальные тесты хрупкими и сложными для написания, поскольку обычный способ доступа к представлению (с помощью findViewById()) не работает. Таким образом, вам может понадобиться получить доступ к закрытым членам Activity или Fragment, содержащих представление, или найти контейнер с известным R.id и перейти к его содержимому для конкретного представления.

Для получения дополнительной информации: https://code.google.com/p/android-test-kit/wiki/EspressoStartGuide

person CodeWarrior    schedule 25.10.2013
comment
Я не уверен, что это правильно. Я думаю, что вы имеете в виду AmbiguousException, но здесь он просто не может найти представление. Что так странно, так это то, что он, кажется, находит представление, но как только я делаю какое-то утверждение, он больше не может его найти. - person Zargoon; 25.10.2013

Это означает, что ни одно представление для этого идентификатора не найдено в полной иерархии дерева пользовательского интерфейса, независимо от того, является ли представление видимым или невидимым.

person Khushboo    schedule 04.12.2013