测试RecyclerView需要导入
androidTestImplementation 'androidx.test.espresso:espresso-contrib:3.2.0'
使用示例
//actionOnItemAtPosition的第一个参数是recycleview的item位置
//第二个参数是对应的动作
Espresso.onView(ViewMatchers.withId(R.id.recyclerView)).perform(
RecyclerViewActions.actionOnItemAtPosition<BaseViewHolder>(2
, ViewActions.click()))
测试RecyclerView的item的子view则需要自定义Matcher
import android.content.res.Resources;
import android.view.View;
import androidx.recyclerview.widget.RecyclerView;
import org.hamcrest.Description;
import org.hamcrest.Matcher;
import org.hamcrest.TypeSafeMatcher;
import java.util.Objects;
public class RecyclerViewMatcher {
private final int recyclerViewId;
public RecyclerViewMatcher(int recyclerViewId) {
this.recyclerViewId = recyclerViewId;
}
public Matcher<View> atPosition(final int position) {
return atPositionOnView(position, -1);
}
public Matcher<View> atPositionOnView(final int position, final int targetViewId) {
return new TypeSafeMatcher<View>() {
Resources resources = null;
View childView;
public void describeTo(Description description) {
String idDescription = Integer.toString(recyclerViewId);
if (this.resources != null) {
try {
idDescription = this.resources.getResourceName(recyclerViewId);
} catch (Resources.NotFoundException var4) {
idDescription = String.format("%s (resource name not found)", recyclerViewId);
}
}
description.appendText("with id: " + idDescription);
}
public boolean matchesSafely(View view) {
this.resources = view.getResources();
if (childView == null) {
RecyclerView recyclerView = view.getRootView().findViewById(recyclerViewId);
if (recyclerView != null && recyclerView.getId() == recyclerViewId) {
childView = Objects.requireNonNull(recyclerView.findViewHolderForAdapterPosition(position)).itemView;
} else {
return false;
}
}
if (targetViewId == -1) {
return view == childView;
} else {
View targetView = childView.findViewById(targetViewId);
return view == targetView;
}
}
};
}
}
使用示例
Espresso.onView(RecyclerViewMatcher(R.id.recyclerView).atPositionOnView(3,R.id.button))
.perform(ViewActions.click())
参考:
https://github.com/dannyroa/espresso-samples