簡體   English   中英

Espresso 獲取 recyclerView 的項目以執行操作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM