zoukankan      html  css  js  c++  java
  • uiautomator-----UiWatcher监听器

    一、UiWatcher类说明

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

    2、UiWatcher使用场景

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

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

      3)测试过程中闹钟响了

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

     3、中断监听检查条件

      public boolean checkForCondition();   

    二、UiWatcher监听器操作相关API

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

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

    三、注册监听器示例代码

    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 说明
    boolean hasAnyWatcherTriggered() 检查是否有监听器触发过
    boolean hasWatcherTriggered(String watcgerName) 检查某个特定的监听器是否触发过

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

    注意一:

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

     

     

  • 相关阅读:
    linux命令学习
    linux sar命令详解
    消息中间件设计
    google三驾马车
    Apache ZooKeeper 服务启动源码解释
    ubuntu16 ccls neovim coc.nvim ccls langserver安装
    ubuntu 字体安装 —— 以nerd font为例
    neovim
    vim youcompleteme conda 虚拟环境
    sublime 插件管理
  • 原文地址:https://www.cnblogs.com/WXBai/p/6030276.html
Copyright © 2011-2022 走看看