【问题标题】:Espresso Matcher for Nested RecyclerView用于嵌套 RecyclerView 的 Espresso Matcher
【发布时间】: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。谢谢。

【问题讨论】:

    标签: android android-recyclerview android-espresso ui-testing


    【解决方案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 匹配器来指定我试图验证的视图的多个特征。

    【讨论】:

    【解决方案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 希望你的笔记有用
    • 是的,感谢您的解释,这帮助我更好地专注于这个问题!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-03
    相关资源
    最近更新 更多