(注意:本文基于UI Automator测试框架版本为2.2.0)
前言
UI Automator测试框架最常使用UiObject与UiObject2,这两个类产生的对象,都表示符合指定条件的控件,当没有找到控件时,会触发UiDevice中所有注册的UiWatcher对象,我们可以在UiWatcher的实现类中,编写没有找到控件时的处理逻辑,比如没有找到某个控件,可能因为弹出的系统对话框挡住我们需要查找的控件,此时就可以在UiWatcher的实现类中,编写关闭这关闭系统弹窗、或者关闭某个业务弹窗的业务逻辑代码。
UiObject、UiObject2触发UiWatcher代码的时机是不同的,先剧透一下它们各自触发UiWatcher代码的时机
1、UiObject执行操作控件的方法时,才会触发UiWatcher的代码。比如调用UiObject的click()方法时,可以触发UiWatcher的代码,而使用UiDevice的findObject(UiSelector)去查找控件时,并不会导致UiWatcher代码的触发
2、UiObject2,则是UiDevice的findObject(BySelector)方法获取时就会触发UiWatcher的代码,即执行查找控件时,即会触发触发UiWatcher的代码
接下来我们先分析UiObject触发UiWatcher的代码,然后再分析UiObject2触发UiWatcher的代码!
UiObject触发UiWatcher的逻辑分析
1、使用UiDevice的findObject(UiSelector)方法不会触发UiWatcher的代码
public UiObject findObject(UiSelector selector) {
return new UiObject(this, selector);
}
UiDevice的findObject()方法只返回一个UiObject对象,并没有可以触发UiW

本文深入解析UIAutomator测试框架中UiObject与UiObject2触发UiWatcher的机制。UiObject在执行具体动作时触发,而UiObject2在查找控件时即触发,两者均用于处理未找到控件的情况。
最低0.47元/天 解锁文章
4919

被折叠的 条评论
为什么被折叠?



