Espersso 个人使用领悟简介(如果espresso 搞不定可以用hook 方案)

427 阅读2分钟

Espresso 是谷歌官方发布的一款android ui 自动化的工具,相对于uiautomator :

1.他不支持跨app 操作ui。

2.他的反应速度快一些。

3.除了常规的操作,他的优势是可以获取view的对象,直接调用view方法,或者验证view 的属性;一些私有的属性,还可以配合反射拿取。

4.开发者还可以在业务代码中嵌入Espresso等待的代码,例如:espresso 点击——>业务代码接口请求(业务代码中嵌入了等待)——>接口有结果,ui 改变(业务代码释放等待)——>espresso 验证(这里因为业务代码中有等待和释放,无需在测试代码中写入sleep,就可以等待到有结果时立即反应)。

5.espresso 封装了原生控件的一些工具方法:webView 、listView、RecyclerView、textView等。

6.espresso 可以获取Intent ,对于一些页面跳转、返回结果的意图也可以操作和验证。

对于项目,我个人倾向于espresso 的原因,就是以上第 3 点,下面对第 3 点做个简单的吹B,后面的文档会详细介绍espresso 的扩展使用,也会列出在项目中实际的代码 :

第3点说,我们可以获取view 对象,更细一点的说法是:

1.可以在查找控件时获取view 的对象。(一开始是获取所有界面上加载的view,每一个view,都会经过查找的方法,我们可以根据view的属性进行匹配查找,这一点我觉得找控件方面更有优势,正所谓:view在手,天下我有)

2.可以在验证控件时获取view 的对象。(查找的view 会经过验证的方法,可以验证控件、状态、颜色、背景url、tag 小红点等属性)

3.可以在操作控件时获取view 的对象。(同上,view 的方法都可以被我们调用,例如:视频的paly 等)

不足:

如果界面上有一个view 在反复刷新,占用ui 线程,会导致espresso 卡住60s无法进行下面的操作而报错(gif 图片、相机等)。

我通常的解决方法是,采用hook view 的方法,换成静态图,或者想其他办法让界面停下来;

最后还有一手:hook view 的对象,直接得到view 的对象,不用espresso 而使用view 对象直接操作,推荐epic(可以自行百度)。