用于嵌套 RecyclerView 的 Espresso Matcher

Posted

技术标签:

【中文标题】用于嵌套 RecyclerView 的 Espresso Matcher【英文标题】:Espresso Matcher for Nested RecyclerView 【发布时间】:2015-12-07 16:54:06 【问题描述】:

所以这是我的层次结构的细分:

RecyclerView --> LinearLayout --> RecyclerView --> FrameLayout -> FrameLayout 

截图如下:

我希望能够验证FrameLayout 是否显示文本。这是我迄今为止尝试过的:

onView(withRecyclerView(R.id.container_list).atPositionOnView(0, R.id.row_content))
                .check(matches(withRecyclerView(R.id.row_content).atPositionOnView(0, R.id.info_field)))
                .check(matches(isDisplayed()));

但它会导致AmbiguousViewMatcherException。关于如何验证嵌套视图的任何想法?应该提到我正在使用来自here 的 ViewMatcher。谢谢。

【问题讨论】:

【参考方案1】:

我能够使用上面提供的 @manidesto 解释进行验证,并进行了一些细微的更改。

onView(allOf(isDescendantOfA(withRecyclerView(R.id.container_list).atPosition(0)),
                isDescendantOfA(withRecyclerView(R.id.row_content).atPosition(0)),
                withId(R.id.info_field)))
                .check(matches(isDisplayed()));

主要改进是我使用allOf 匹配器来指定我试图验证的视图的多个特征。

【讨论】:

你将如何测试点击第二个 recyclerview 中的项目? 正如这里提到的***.com/questions/62750213/…,此代码仅适用于 atPosition 的 0 值。【参考方案2】:

试试这个

onView(withRecyclerView(R.id.container_list).atPositionOnView(0, R.id.row_content))
    .check(matches(withChild(withId(R.id.info_field))))

这只是检查View(R.id.row_content)是否有一个id为R.id.info_field的孩子

注意:

.check() 接受一个ViewAssertion,这意味着与ViewMatcher 匹配的viewonView() 方法仅由ViewAssertion 断言

所以当你这样做时

onView(withRecyclerView(R.id.container_list).atPositionOnView(0, R.id.row_content))
    .check(matches(withChild(withId(R.id.info_field))))
    .check(matches(isDisplayed()))

ViewMatcher - isDisplayed() 应用于在onView() 内匹配的R.id.row_content,而不是在.check() 调用中断言匹配的R.id.info_field

【讨论】:

由于check 方法内部的withChild,此新编辑不起作用。 对不起。我错过了matches() @adavis 希望你的笔记有用 是的,感谢您的解释,这帮助我更好地专注于这个问题!

以上是关于用于嵌套 RecyclerView 的 Espresso Matcher的主要内容,如果未能解决你的问题,请参考以下文章

在recyclerview的嵌套recyclerview中的嵌套列表中添加项目

Android中RecyclerView嵌套RecyclerView或嵌套ListView

RecyclerView嵌套RecyclerView问题

RecyclerView嵌套RecyclerView问题

Android RecyclerView嵌套RecyclerView

ScrollView嵌套Recyclerview显示不全问题