博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
6.UiWatcher API 详细介绍
阅读量:4312 次
发布时间:2019-06-06

本文共 3839 字,大约阅读时间需要 12 分钟。

Tip:

1.监听器不是完能的,所以若用例需要设置监听器防止用例被打断,最好把延迟时间调高一点
2.UiDevice是不会触发监听功能的
3.监听器在方法体或者循环体中是程序还是会被打断的
4.监听器要在防止中断用例前执行

一、UiWatcher类介绍与中断监听检查条件

1.UiWatcher类说明

1)UiWatcher用于处理脚本执行过程中遇到的非想象的步骤

2)UiWatcher使用场景

测试过程中来了个电话

测试过程中收到个短信

测试过程中闹钟响了

……

2.中断监听检查条件

API:

说明:

public boolean checkForCondition(); 在测试框架无法找到一个匹配时,使用uiselector测试框架将自动调用此处理程序的方法。在超时找到匹配项时,框架调用checkForCondition()方法检查设备上的所有已注册的监听检查条件。

 

例如:

  • 如果出现一个对话框,您可以检查是否是运营商发来的服务信息而不是出现测试异常。

二、监听器操作及检查

1.相关API

返回值

API

说明

void registerWatcher(String name,UiWatcher watcher) 注册一个监听器,当UiSelector无法匹配到对象的时候,触发监听器
void removeWatcher(String name) 取消之前注册的指定监听器
void resetWatcherTriggers() 重置已触发过的UiWatcher,重置后相当于没运行过
void runWatchers() 强制运行所有的监听器
boolean hasAnyWatcherTriggered() 检查是否有监听器触发过
boolean hasWatcherTriggered(String watcherName) 检查某个特定监听器是否触发过

 

例如:
public void testDemo2() throws UiObjectNotFoundException{    //1.先注册监听器(registerWatcher(String name,UiWatcher watcher))    UiDevice.getInstance().registerWatcher("Phone", new UiWatcher(){        public boolean checkForCondition() {            //1.挂断电话            UiObject call=new UiObject(new UiSelector().text("来电"));            UiObject view=new UiObject(new UiSelector().className("android.view.View"));            if (call.exists()){                System.out.print("电话监听器被触发了");                              try{                    view.swipeLeft(20);                    return true;                } catch (UiObjectNotFoundException e){                    e.printStackTrace();                }            }            return false;        }    });    //1.再注册一个监听器    UiDevice.getInstance().registerWatcher("Massage", new UiWatcher(){          public boolean checkForCondition() {            System.out.print("短信监控被触发了");            return false;        }    });    //2.执行用例步骤    //使用index+classNmae定位父类+text定位子类最终定位到对象[声音按钮]    UiObject vol =new UiObject(new UiSelector()    .className("android.widget.LinearLayout").index(6))    .getChild(new UiSelector().text("声音"));    //获取下一级界面的返回按钮    UiObject Back=new UiObject(new UiSelector().description("声音:向上导航"));//      //使用for循环监听器不会起作用//      for(int i=0;i<10;i++){//          //输出循环次数://          System.out.println("当前循环"+(i+1)+"次;");//          //点击对象并等到新窗口出现//          vol.clickAndWaitForNewWindow();//          sleep(2000);//          //点击返回按钮//          Back.clickAndWaitForNewWindow();//          sleep(2000);//      }    //可以在下面五次操作过程中打入电话进行调试    //第一次点击对象并等到新窗口出现    vol.clickAndWaitForNewWindow();    sleep(2000);    //点击返回按钮    Back.clickAndWaitForNewWindow();    sleep(2000);    //第二次    vol.clickAndWaitForNewWindow();    sleep(2000);    Back.clickAndWaitForNewWindow();    sleep(2000);    //第三次    vol.clickAndWaitForNewWindow();    sleep(2000);    Back.clickAndWaitForNewWindow();    sleep(2000);    //第四次    vol.clickAndWaitForNewWindow();    sleep(2000);    Back.clickAndWaitForNewWindow();    sleep(2000);    //第五次    vol.clickAndWaitForNewWindow();    sleep(2000);    Back.clickAndWaitForNewWindow();    sleep(2000);    //在第五次返回后关闭指定监听器(removeWatcher(String name))这样以后就不会被触发了    UiDevice.getInstance().removeWatcher("Phone");    //然后再强制运行所有监控器    UiDevice.getInstance().runWatchers();    //第六次    vol.clickAndWaitForNewWindow();    sleep(2000);    Back.clickAndWaitForNewWindow();    sleep(2000);    //在第五次返回后检查并输出监听器是否被触发过    //检查是否有监听器被触发过    boolean B=UiDevice.getInstance().hasAnyWatcherTriggered();    //检测是否有特定监听器被触发过    boolean Phone1=UiDevice.getInstance().hasWatcherTriggered("Phone");    boolean Massage1=UiDevice.getInstance().hasWatcherTriggered("Massage");    System.out.println("是否有监听器被触发过"+B);    System.out.println("电话监听器是否被触发过"+Phone1);    System.out.println("短信监听器是否被触发过"+Massage1);    //逻辑判断然后进行重置和强制运行操作    if(B==true){        //重置被运行过的监听器        UiDevice.getInstance().resetWatcherTriggers();    }}

转载于:https://www.cnblogs.com/JianXu/p/5225049.html

你可能感兴趣的文章
ultraiso:usb-hdd+ v2
查看>>
WINDOWS symbols
查看>>
SQL Server 2008 镜像的监控 - Joe.TJ -
查看>>
SQL Server DBA 文章:116篇 --DBA_Huangzj
查看>>
数据库Mysql性能优化
查看>>
程序猿是如何解决SQLServer占CPU100%的--马非码
查看>>
Shell之sed用法 转滴
查看>>
百度ueditor 拖文件或world 里面复制粘贴图片到编辑中 上传到第三方问题
查看>>
python基础之函数参数、嵌套、返回值、对象、命名空间和作用域
查看>>
公式推导【ASRCF//CVPR2019】
查看>>
Python(4)_Python中的数据类型
查看>>
HTTP 响应头信息
查看>>
cocos2dx中的层CCLayer
查看>>
Windows XP硬盘安装Ubuntu 12.04双系统图文详解
查看>>
【资料】哈代&拉马努金相关,悼文,哈佛演讲,及各种杂七杂八资料整理
查看>>
Use weechat (IRC client) on OS X. MacBook Pro
查看>>
Luogu P3616 富金森林公园
查看>>
[Nowcoder] 六一儿童节(拼多多)
查看>>
centos6.7用yum安装redis解决办法及IP限制配置
查看>>
用DataReader 分页与几种传统的分页方法的比较
查看>>