UiWatcher类使用

  • UiWatcher类说明:

    • UiWatcher用于处理脚本执行过程中遇到非预想的步骤
  • UiWatcher使用场景
    * 测试过程可能还会有一个闹钟
    * 来了一条短信等突发事件
    * 出现非预想的步骤

  • 当在测试过程中发生突发事件,UiWatcher会处理异常,比如停止闹钟 继续完成测试用例

  • 中断监听检查条件:

    • public boolean checkForCondition();
    • 说明:
      • 在测试框架无法找到一个匹配时,使用uiselector测试框架自动调用此处理方法。在超时未找到匹配项时,框架调用checkforCondition()方法查找设备上的所有已注册的监听检查条件。可以使用此方法来处理中断问题保证测试用例正常运行
  • 例如:如果出现一个对话框,可以检查是否是运营商发来的服务信息而不是测试异常

  • 监听器必须写在所有用例之前,监听器在用例之前启动,启动之后,用例才能执行,执行过程中出现异常才能调用监听器,过程中有很多监听条件,考虑过程中各种可能的情况将其处理掉。

  • 监听器操作:

返回值API说明
voidregisterAwtcher(String name, UiWatcher watcher)注册一个监听器,当UiSelector无法匹配到对象的时候,触发监听器
voidremoveWatcher(String name)取消之前注册的指定监听器
voidresetWatcherTriggers()重置已触发过的UiWatcher,重置后相当于没运行过
voidrunWatchers()强制运行所有的监听器
  • 检查监听器
返回值API说明
booleanhanAnyWatcherTriggered()检查是否有监听器触发过
booleanhasWatcherTriggered(String watcherName)检查某个特定的监听器是否触发过

public class UiWatchers extends TestCase {
    public void testWatcher() throws UiObjectNotFoundException {
        //先要注册监听器
        UiDevice uiDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
        uiDevice.registerWatcher("phone", new UiWatcher() {
            @Override
            public boolean checkForCondition() {


                //挂断电话
                UiObject call = new UiObject(new UiSelector().text("来电"));
                UiObject view = new UiObject(new UiSelector().className("android.view.View"));
                if (call.exists()) {
                    System.out.println("触发监听器");
                    try {
                        view.swipeLeft(20);
                    } catch (UiObjectNotFoundException e) {
                        e.printStackTrace();
                    }
                    return true;
                }
                return false;
            }
        });
        uiDevice.registerWatcher("msm", new UiWatcher() {
            @Override
            public boolean checkForCondition() {
                System.out.println("短信监听器");
                //如果return false但是最后没有被触发,只是相当于过滤器的作用,如果没有短信的业务,他还是会调用一下进行匹配但是不会被触发
                return false;
            }
        });

        //执行用例步骤
        try {
            UiObject vol = new UiObject(new UiSelector().className("android.widget.LinearLayout").index(3)).getChild(new UiSelector().text("声音和通知"));
            UiObject back = new UiObject(new UiSelector().description("声音和通知:向上导航"));
            for(int i = 0;i<1;i++) {
                vol.clickAndWaitForNewWindow();
                back.clickAndWaitForNewWindow();
                if(i == 1){
                    uiDevice.removeWatcher("phone");
                }
            }
        } catch (UiObjectNotFoundException e) {
            e.printStackTrace();
        }
        System.out.println("短信监听器触发"+uiDevice.hasAnyWatcherTriggered());
        System.out.println("短信监听器触发"+uiDevice.hasWatcherTriggered("msm"));
    }
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wjxbless

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值