uiautomator-----UiWatcher监听器

一、UiWatcher类说明

1、Uiwatcher用于处理脚本执行过程中遇到非预想的步骤

2、UiWatcher使用场景

  1)测试过程中来了一个电话

  2)测试过程中来了一条短信

  3)测试过程中闹钟响了

  4)出现各种非预想的步骤

 3、中断监听检查条件

  public boolean checkForCondition();   

二、UiWatcher监听器操作相关API

在测试框架无法找到一个匹配时,使用UiSelector测试框架将自动调用此处理程序方法。在超时未找到匹配项时,框架调用checkForCondition()方法查找设备上的所有已注册的监听检查条件。可以使用此方法来处理中断问题保证测试用例正常运行。

返回值API说明
voidregisterWatcher(String name,Uiwatcher watcher)注册一个监听器,当Uiselector无法匹配到对象的时候,触发监听器
voidremoveWatcger(String name)取消之前注册的指定监听器
voidresetWatcherTriggers()充值已触发过的UiWatcher,重置后相当于没运行过
voidrunWatchers()强制运行所有的监听器

三、注册监听器示例代码

public void testDemo() throws IOException, UiObjectNotFoundException {
            
注册监听器
/
            
            UiDevice.getInstance().registerWatcher("phone",new UiWatcher(){
                @Override
                public boolean checkForCondition(){                                        
                //电话监听
                     UiObject call = new UiObject(new UiSelector().resourceId("com.android.incallui:id/unlock_answer_text").text("接听"));//由接听按钮判断为来电
                     UiObject call_reject = new UiObject(new UiSelector().resourceId("com.android.incallui:id/unlock_reject"));//挂断按钮
                     if(call.exists()){
                         System.out.println("电话监听器被触发啦!!!!");
                         try{
                             call_reject.click();
                             return true;
                         }catch(UiObjectNotFoundException e){
                            e.printStackTrace(); 
                         }
                     }
                    return false;
                }
            } );
            
    
监听器注册移除
/
UiDevice.getInstance().removeWatcher("phone");//移除之后,后面的测试过程中有电话拨进来,不会调用监听器        
            
            

/常规测试用例开始///
//  
}
注意:
  1)UiWatcher写在所有的用例之前,要在用例之前启动,启动之后后面的正常用例才能执行,执行过程中出现异常的时候调监听器
  2)问题:若测试用例运行较快,有时候不是完美的被打断的时候,监听器有时候也会失败,不会刚好监听到异常情况,这个时候可以把用例之间执行步骤停顿的时间加长,sleep(2000)之类
  3)如果循环体(方法体也是)被打断以后,就算监听器处理完异常也不可能再回到循环体里面,可以简单的复制代码循环,如果代码太长就算了。。。。
  4)UiDevice 是不会触发监听器的,比如我们按home键、菜单键调用到UiDevice的功能,他的顺序执行是不会调用到UiWatcher的。
 
四、检查监听器是否被触发
1.检查监听器API
返回值API说明
booleanhasAnyWatcherTriggered()检查是否有监听器触发过
booleanhasWatcherTriggered(String watcgerName)检查某个特定的监听器是否触发过

 
2.检查监听器示例代码
//检查监听器是否被触发过/
        ///
         System.out.println("是否有监听器触发过:" + UiDevice.getInstance().hasAnyWatcherTriggered());
         System.out.println("电话监听器是否被触发过:" + UiDevice.getInstance().hasWatcherTriggered("phone"));

注意一:

检查监听器代码卸载所有的正常测试用例代码之后,在测试完成之后,打印是否触发过监听器。

 

 

转载于:https://www.cnblogs.com/WXBai/p/6030276.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值