2013-10-25 4 views
6

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

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 и точно следую настройкам.

ответ

7

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

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

См стартового руководства для получения более подробной информации: https://google.github.io/android-testing-support-library/docs/espresso/index.html

+3

Но представление присутствует в иерархии, а управление работает быстрее, чем просматриваемые представления? –

0

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

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

+4

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

0

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