[英]Espresso get item of recyclerView to do an action
我正在嘗試檢查我的 recyclerView 項目的背景顏色,正在工作,但我不喜歡我這樣做的方式,因為我強制點擊獲取它,有沒有其他方法可以做到這一點表演?
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))))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.