Android Espresso Recycle使用和一些坑

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"))));

目前就这些,还有其他坑以后再补上

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,589评论 25 709
  • Instrumentation介绍 Instrumentation是个什么东西? Instrumentation测...
    打不死的小强qz阅读 7,866评论 2 39
  • 熟男经过自己的努力学习!终于考取了ISG侍 酒师职称。那有小朋友会问 酿酒师,品酒师,侍酒师有什么区别? 以下文章...
    张锦全阅读 367评论 0 0
  • 一本好的书,是精神食粮。 读这本书有种深入的感觉,走进去再也不想出来,出来之后就很难进去,是,文字太美,美到抒情连...
    大强书斋阅读 427评论 0 0
  • 思绪万千引心动 一心求静惹痴狂 纵有一处清净地 菩提树下难成佛 世间万物皆灵性 娑婆世界种因果 红尘俗世道不破 不...
    牧雨阅读 446评论 0 1