Espresso 自动化测试(十二) -recyclerView 以及 viewPager的使用

来源:互联网 发布:旅游大数据应用 编辑:程序博客网 时间:2024/06/06 13:09

这段时间一直在使用espresso 进行Android 自动化测试,说句实在话,真是不实际用一下有很多东西都不会明白吧。下来列举两个遇到的问题以及解决的方法吧

界面存在一个viewpager,viewpager中的内容是两个Recyclerview并且他们的resourceId都是一致的,

这里写图片描述

这个时候,如果了解espresso的大概都能知道如果我简单的通过onView=(withId(recyclerviewId))的话,测试过程中就会抛出如下的异常

AmbiguousViewMatcherException:This matcher matches multiple views in the hierarchy

那么这个问题要如何解决呢,其实也挺简单的。因为我们简单对比下两个recyclerView就会发现问题了,一个是VISIBLE,另一个则是INVISIBLE。所以我们可以通过下面的代码来进行确定当前界面的RecyclerView.

onView(allOf(withId(recyclerViewId), isDisplayed()))

通过当前可见的来指定出对应的元素了。

解决完上一个问题,又出来一个新的问题了。有一个操作需要滑动到下一个RecyclerView界面,进行某个按钮的点击。代码如下:

 Commons.viewPagerSwipLeft(R.id.edit_performance_avatars_viewPager);    Commons.clickRecyclerViewElementByPos(R.id.fragment_avatars_recyclerView, position);

我做了一个简单的封装,上面的步骤应该看名字就能知道做了一个向左滑动的操作,再来点击Recyclerview的某一个位置的按钮。可是就这么一个简单的操作问题就来了。每次运行到点击的时候又报了跟上面一样的错误。

AmbiguousViewMatcherException:This matcher matches multiple views in the hierarchy

我再三的检查了代码,没问题啊,但是通过看log发现两个Recyclerview竟然当前的状态都是VISIBILE。这个也太奇怪了。
通过再三的分析,发现调试的时候就可以运行成功,正式运行就失败。最后终于发现原来是我的向左操作太快了,导致上一个滑动界面都未更新完,点击就出问题了,所以我们在滑动的后面增加一个延时。增加sleep的方法需要实现IdingResource。具体可以查看

Espresso自动化测试(十一) - IdlingResource

0 0
原创粉丝点击