所以这是我的层次结构的细分:
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。感谢。
答案 0 :(得分:8)
我能够使用上面提供的解释@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
匹配器来指定我尝试验证的视图的多个特征。
答案 1 :(得分:3)
试试这个
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)
是否有身份R.id.info_field
.check()
接收ViewAssertion
,这意味着view
方法所提供的ViewMatcher
所匹配的onView()
仅由{{1}声明}}
所以当你这样做时
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()
匹配的内R.id.row_content
而不是onView()
声称匹配R.id.info_field
来电