美文网首页
Android Espresso Recycle使用和一些坑

Android Espresso Recycle使用和一些坑

作者: 挨踢小能手 | 来源:发表于2016-09-07 17:15 被阅读919次

    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 Espresso Recycle使用和一些坑

          本文链接:https://www.haomeiwen.com/subject/goijettx.html