espresso之Views获取
来源:互联网 发布:淘宝背景图片素材大全 编辑:程序博客网 时间:2024/06/05 05:57
espresso 目前尚不能处理多个View , 不论是 onData 还是其他 , 都只能操作唯一匹配的View . 如果多个view被匹配 , 将抛出 AmbiguousViewMatcherException
这个异常 , 那么我们想循环遍历操作一组同类的views时 将变得不太现实 .
举个例子有一波 Text
相同的View , 我想全部点击一遍 , 一个个的通过复杂定位去点击 , 显然不太现实 .
那么是自己动手实现的时候了 , 此文在此抛砖引玉了 , 若有更好的方法 , 烦请告知哈 . 之前翻看源码后 , 用反射将 ViewInteraction
对象的属性全拿出来重组 , 再通过 ViewHandle
来 getTargetViews()
, 然而这种效率是很低的 .
Talk is cheep :
public class ViewsFinder { private List<View> views = new ArrayList<>(); private boolean has_more_views; private final String TAG = this.getClass().getSimpleName(); private Matcher<View> thisMatcher(Matcher<View> matcher){ return new TypeSafeMatcher<View>() { @Override public void describeTo(Description description) { description.appendText("this is a view finder ."); } @Override protected boolean matchesSafely(View view) { if(matcher.matches(view)){ views.add(view); return true; } return false; } }; } private void hasViews(Matcher<View> matcher){ try { //下面的nothing() , 是一个空的 ViewAction onView(thisMatcher(matcher)).perform(nothing()); has_more_views = true; } catch (AmbiguousViewMatcherException e) { has_more_views = true; } catch (Exception ne){ Log.e(TAG, "hasViews: ", ne); has_more_views = false; } } public List<View> getViews(Matcher<View> matcher) { this.hasViews(matcher); if(has_more_views) return views; else { Log.w(TAG, "getViews: 没有匹配的view" ); return null; } }}
初步使用 :
ViewsFinder viewsFinder = new ViewsFinder(); List<View> recycler = viewsFinder.getViews(withResourceName("recycler"));
在调用 getViews
方法时将会执行 nothing()
这个空的 ViewAction , 这样不会对元素进行具体的操作 , Matcher
总是在 perform 执行的时候才去取 View , 并一个个的进行匹配 . 这时 , 匹配到一个就views.add(view)
这样放进list中去了 .
Views 列表是有了 , 那么接下来的操作 就可以for
循环了 . 啥 ? 光个view 怎么用 ? 自定义个Matcher
就搞定了嘛 .
1 0
- espresso之Views获取
- espresso之异常捕获
- espresso之自定义Matcher
- espresso之自由swipe
- Espresso之 list测试
- Espresso
- (4.5.5.9)Espresso之UiAutomator2与Espresso的结合
- (4.5.5.10)Espresso之Robotium与Espresso的结合
- views中获取表单
- Django 之 Views
- espresso之判断EditText是否为password
- (4.5.5.7)Espresso之Intent测试
- Android UI测试之Espresso使用
- Espresso 自动化测试(三)-获取文本内容
- iPad开发之Split Views
- Android测试系列之Instrumented Unit Test-Espresso
- Android 单元测试之Espresso - Google官方UI测试框架
- Google I/O 2016 笔记之Espresso 进阶
- iOS 获得当前页面正在显示的页面是哪一个Viewcontroller
- 页面显示乱码问题
- yii layout关掉的问题
- PHP面向对象编程
- 关于如何阅读Hadoop源代码
- espresso之Views获取
- SSL1760商店选址问题
- 数论 BSGS 模板
- JAVA 读取Oracle-clob类型
- POJ 1930 Dead Fraction 已翻译
- SART表的parse
- 使用jstack分析cpu消耗过高的问题
- 测试:第一篇博客
- Docker删除大量停止的container