Espresso提示Unresolved reference: atPosition 是否缺少Gradle依赖?
你没有缺少必要的Gradle依赖,atPosition 并非Espresso官方提供的内置API,是Android测试社区广泛使用的自定义工具方法,你需要自行将该方法添加到你的测试工具类中即可正常使用。
以下是两种语言的标准实现:
Kotlin 版本
fun atPosition(position: Int, itemMatcher: Matcher<View>): Matcher<View> { return object : TypeSafeMatcher<View>() { override fun matchesSafely(view: View): Boolean { val recyclerView = view as RecyclerView val viewHolder = recyclerView.findViewHolderForAdapterPosition(position) ?: return false return itemMatcher.matches(viewHolder.itemView) } override fun describeTo(description: Description) { description.appendText("has item at position $position: ") itemMatcher.describeTo(description) } } }
Java 版本
public static Matcher<View> atPosition(final int position, @NonNull final Matcher<View> itemMatcher) { return new TypeSafeMatcher<View>() { @Override public void describeTo(Description description) { description.appendText("has item at position " + position + ": "); itemMatcher.describeTo(description); } @Override protected boolean matchesSafely(View view) { if (!(view instanceof RecyclerView)) { return false; } RecyclerView recyclerView = (RecyclerView) view; RecyclerView.ViewHolder viewHolder = recyclerView.findViewHolderForAdapterPosition(position); return viewHolder != null && itemMatcher.matches(viewHolder.itemView); } }; }
注意事项
- 将上述方法放入你项目的公共测试工具类中,使用时直接导入对应方法即可正常调用
- 如果你的RecyclerView使用StaggeredGridLayoutManager等自定义布局管理器,可根据需求将
findViewHolderForAdapterPosition替换为findViewHolderForLayoutPosition适配场景
内容的提问来源于stack exchange,提问作者Casey Perkins
相关产品推荐
相关产品推荐

