gpt4 book ai didi

Android espresso 测试 - 测试 recyclerview 项目内的 View 是否可见

转载 作者:搜寻专家 更新时间:2023-11-01 09:19:04 32 4
gpt4 key购买 nike

我有一个 ID 为“rv_list”的 RecyclerView。单击任何 RecyclerView 项目时,每个项目内都有一个可见的 id 为“star”的 View 。

我想用 expresso 检查这个 -单击第一个 RecyclerView 项,检查 View R.id.star 是否可见。

我的代码是-

@Test
fun checkIfStarVisibleOnItemClick() {

onView(withId(R.id.rv_list))
.perform(RecyclerViewActions.actionOnItemAtPosition<RepositoriesAdapter.RepositoriesViewHolder>(0, click()))


onView(withId(R.id.star))
.check(matches(isDisplayed()))

}

我收到这个错误 -

id/star' matches multiple views in the hierarchy

最佳答案

检查带有 id 'star' 的项目是否在 'rv_list' RecyclerView 的第一个元素(位置 0)中可见的代码应该是:

onView(withRecyclerView(R.id.rv_list)
.atPositionOnView(0, R.id.star))
.check(matches(isDisplayed()));

这个方法是 espresso-contrig 的一部分。

更新

现在我声明这个方法:

fun nthChildOf(parentMatcher: Matcher<View?>, childPosition: Int): Matcher<View?>? {
return object : TypeSafeMatcher<View>() {
override fun describeTo(description: Description) {
description.appendText("with $childPosition child view of type parentMatcher")
}

override fun matchesSafely(view: View): Boolean {
if (view.parent !is ViewGroup) {
return parentMatcher.matches(view.parent)
}
val group = view.parent as ViewGroup
return parentMatcher.matches(view.parent) && group.getChildAt(childPosition) == view
}
}
}

并以这种方式使用它:

onView(allOf(
withId(R.id.star),
isDescendantOfA(
nthChildOf(withId(R.id.rv_list), 0))
)).check(matches(isDisplayed()))

关于Android espresso 测试 - 测试 recyclerview 项目内的 View 是否可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58259255/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com