浓缩咖啡:单击 ViewPager 内 ListView 中的第一项
Posted
技术标签:
【中文标题】浓缩咖啡:单击 ViewPager 内 ListView 中的第一项【英文标题】:Espresso: click first item in ListView inside a ViewPager 【发布时间】:2016-08-18 14:40:30 【问题描述】:是否可以在 ViewPager 中单击 ListView 的第一项?
我已经尝试让它像这样工作:
onData(anything()).inAdapterView(withId(R.id.myListView)).atPosition(0).perform(click());
.
但据我了解:Testing ViewPager with Espresso. How perfom action to a button of an Item? 您不能将 onData 用于 ViewPager。 另外,如果我运行测试,我会得到多个匹配项的 AmbiguousViewMatcherException。
android.support.test.espresso.AmbiguousViewMatcherException: 'with id: my.awesome.app:id/myListView' matches multiple views in the hierarchy.
Problem views are marked with '****MATCHES****' below.
如果我像这样onView(allOf(withId(R.id.myListView),isDisplayed())).perform(click());
运行测试,则永远不会单击第一项。
还有其他方法可以单击列表的第一项吗?
【问题讨论】:
你只是想选择第一个项目吗? 不,我想点击它 哦,我明白了,哈哈。 @PatrickSturm 【参考方案1】:试试这个:
onData(anything())
.inAdapterView(allOf(withId(R.id.myListView), isCompletelyDisplayed()))
.atPosition(0).perform(click());
由于您有 AmbiguousViewMatcherException,如果我没记错的话,这可能会匹配屏幕上显示的“myListView”。
【讨论】:
它成功了,运行一次......然后我又遇到了另一个错误:android.support.test.espresso.PerformException: Error performing 'load adapter data' on view '(with id: my.awesome.app:id/myListView and at least 100 percent of the view's area is displayed to the user.)'.
您是否在单击第一个元素之前滑动 ViewPager?如果是这样,添加一个 SystemClock.sleep(800);在此说明之前检查它是否有效。
然后,如果它工作,你可以使用这个空闲资源:github.com/Karumi/Rosie/blob/master/sample/src/androidTest/java/… 来避免睡眠,也应该工作。
好吧,这让我更困惑了。如果我使用这个组合,每次都会点击第一个项目:onView(allOf(withId(R.id.myListView), isDisplayed())).perform(click()); onData(anything()).inAdapterView(allOf(withId(R.id.myListView),isCompletelyDisplayed())).atPosition(0).perform(click());
。如果我改变位置,第一个项目仍然被点击。
这意味着列表视图只有在您之前单击它时才会完全显示。也尝试使用 isDisplayed() 而不是 isCompletelyDisplayed(),它会抛出 AmbiguousViewMatcherException 还是有效?以上是关于浓缩咖啡:单击 ViewPager 内 ListView 中的第一项的主要内容,如果未能解决你的问题,请参考以下文章