浓缩咖啡获取回收器的项目查看执行操作



我正在尝试检查我的回收器视图项目的背景颜色,正在工作,但我不喜欢我这样做的方式,因为我强迫点击来获取它,还有其他方法可以在不表演的情况下做到这一点吗?

Uiview.perform(
RecyclerViewActions.actionOnItemAtPosition<RecyclerView.ViewHolder>(
position,
click()
)
).apply {
withBackgroundColor(color)
}

withBackgroundColor 方法是:

private fun withBackgroundColor(@ColorInt color: Int): Matcher<RecyclerView.ViewHolder> {
return object :
BoundedMatcher<RecyclerView.ViewHolder, RecyclerView.ViewHolder>(
RecyclerView.ViewHolder::class.java
) {
override fun matchesSafely(item: RecyclerView.ViewHolder): Boolean {
return (item.itemView.background as ColorDrawable).color == color
}
override fun describeTo(description: Description) {
}
}
}

正如我所说,它有效,但我被迫点击以获取该项目......

我不认为你的Uiview.perform(...)电话正在检查背景颜色。如果我假设Uiview.perform(...)onView(...).perform(...)做同样的事情,并返回一个ViewHolder,那么后续apply将被"孤立"——除了单击该项目之外,它不会做任何其他事情,也许你看到测试的原因正在通过。

否则,您可以简单地创建自己的自定义RecyclerView匹配器以及您的ViewHolder

fun <VH : RecyclerView.ViewHolder> hasHolderItemAtPosition(position: Int, matcher: Matcher<VH>): Matcher<View> {
return object : BoundedMatcher<View, RecyclerView>(RecyclerView::class.java) {
override fun describeTo(description: Description) {
description.appendText("has holder item: ")
matcher.describeTo(description)
description.appendText(" at position: $position")
}
override fun matchesSafely(view: RecyclerView): Boolean {
return view.adapter?.let {
val type = it.getItemViewType(position)
val holder = it.createViewHolder(view, type)
it.onBindViewHolder(holder, position)
return matcher.matches(holder)
} ?: false
}
}
}

然后使用背景颜色执行检查:

onView(your_recycler_view)
.check(matches(hasHolderItemAtPosition(position, withBackgroundColor(color))))

最新更新