用于嵌套 RecyclerView 的 Espresso 匹配器
Espresso Matcher for Nested RecyclerView
所以这是我的层次结构的细分:
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。谢谢。
试试这个
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
的 child
注:
.check()
接受一个 ViewAssertion
,这意味着 view
与你给 onView()
方法的 ViewMatcher
匹配只是由 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
调用
我能够使用上面提供的@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 --> 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。谢谢。
试试这个
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
,这意味着 view
与你给 onView()
方法的 ViewMatcher
匹配只是由 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
调用
我能够使用上面提供的@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
匹配器来指定我试图验证的视图的多个特征。