Android Espresso在检查时出现NoMatchingViewException异常

9

我正在尝试使用新的Android测试库Espresso。当我尝试以下内容时:

onView(withId(R.id.gettingStarted))

测试运行正常。但是当我尝试:
onView(withId(R.id.gettingStarted)).check(matches(isDisplayed()));

我遇到了一个.NoMatchingViewException:未找到匹配的层次结构中的视图:id为<2131296645>

有人见过这样的情况吗?我的第一反应是这只是一个错误,因为Espresso版本仅为1.0。我正在使用Android Studio,并且完全按照设置说明进行了设置。

3个回答

11

这是预期行为。

onView(withId(R.id.gettingStarted))本身并没有做任何事情。当你调用perform方法时,Espresso会对当前视图层次结构运行在onView方法中提供的匹配器 - 如果找不到匹配的视图,则会抛出异常。

更多详情请查看起始指南:https://developer.android.com/training/testing/espresso/index.html


13
这个观点存在于层次结构中,控制器运行得比加载的视图快吗? - Kaveesh Kanwal
给定的链接已损坏。 - E_K
网址链接未找到? - MNFS
1
在我的情况下,控件运行得比加载的视图快,有什么想法吗?@KaveeshKanwal或其他人? - AppDeveloper

0

有很多合法的情况下,你无法在测试开发时确定R.id。例如,特定视图可能没有R.id或R.id不唯一。这会使正常的仪器测试变得脆弱和复杂,因为访问视图的正常方式(使用findViewById())无法工作。因此,您可能需要访问包含视图的Activity或Fragment的私有成员,或者找到一个已知R.id的容器,并导航到其特定视图的内容。

更多信息:https://code.google.com/p/android-test-kit/wiki/EspressoStartGuide


4
我不确定这是否正确。我认为你所指的是一个AmbiguousException,但在这里,它只是找不到该视图。很奇怪的是,它似乎能够找到这个视图,但一旦我进行某种断言,它就再也找不到了。 - Zargoon

0

这意味着在UI树的完整层次结构中找不到此ID的视图,无论该视图是可见还是不可见。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接