Android之UiAutomator测试框架源码分析(第七篇:UiObject与UiObject2触发UiWatcher代码时机探究)

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

(注意:本文基于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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值