Android Espresso基本使用中讲了基本的使用方法,下面讲列表的使用
要对Recycle进行操作,先要修改bulid.gradle引入一些包
dependencies {
androidTestCompile('com.android.support.test.espresso:espresso-contrib:2.0') {
exclude group: 'com.android.support', module: 'appcompat'
exclude group: 'com.android.support', module: 'support-v4'
exclude module: 'recyclerview-v7'
}
}
下面看看怎么使用
onView(allOf(withId(R.id.recycleview),isDisplayed())).perform(RecyclerViewActions.actionOnItemAtPosition(0,click()));
前面与普通的View一样没区别,perform时,要引入RecyclerViewActions.class 这个类的方法对RecycleView进行操作,RecyclerViewActions.actionOnItemAtPosition根据其名字,可能你已经猜到,这个点击第0位置的item。
还有其他用法,如要找到RecycleView里面文字为Hello的item
onView(withId(R.id.recyclerView)) .perform(RecyclerViewActions.actionOnItem( hasDescendant(withText("Hello ")), click()));
下面说说遇到的一些坑
1.如果ViewPager结合RecycleView,而RecycleView的ID相同,如果直接使用
onView(allOf(withId(R.id.recycleview)));
去找这个RecycleView,那么会报AmbiguousViewMatcherException这个错,因为这个页面有多个相同的ID,解决方面也比较简单如下
onView(allOf(withId(R.id.recycleview),isDisplayed()));
加一个约束条件,要正在显示的即可。
2.如何模拟退出Activity的返回操作?
Espresso.pressBack();
3.是否可以判断这个View存不存在,返回一个boolen
老外解答如下:http://stackoverflow.com/questions/20807131/espresso-return-boolean-if-view-exists/20811193#20811193 Espresso不推荐在测试使用条件逻辑,找不到而不想直接报错只能try catch
try {
onView(withText("my button")).check(matches(isDisplayed()));
//view is displayed logic
} catch (NoMatchingViewException e) {
//view not displayed logic
}
4.有2个一样文字View,怎么只使用第一次找到的这个View
需要自定义一个Matcher使用如下
public static <T> Matcher<T> firstFindView(final Matcher<T> matcher) {
return new BaseMatcher<T>() {
boolean isFirst = true;
@Override
public boolean matches(final Object item) {
if (isFirst && matcher.matches(item)) {
isFirst = false;
return true;
}
return false;
}
@Override
public void describeTo(final Description description) {
description.appendText("should return first matching item");
}
};
}
然后这样使用:
onView(allOf(isDisplayed(),firstFindView(withText("Hello"))));
目前就这些,还有其他坑以后再补上