九、UiWatcher API 详细介绍

来源:互联网 发布:警方提醒 防网络诈骗 编辑:程序博客网 时间:2024/05/16 12:37

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

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

1.UiWatcher类说明

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

测试过程中来了个电话

测试过程中收到个短信

测试过程中闹钟响了
……

2.中断监听检查条件

API:

说明:

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

 

例如:


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

二、监听器操作及检查

1.相关API

返回值

API

说明

voidregisterWatcher(String name,UiWatcher watcher)注册一个监听器,当UiSelector无法匹配到对象的时候,触发监听器voidremoveWatcher(String name)取消之前注册的指定监听器voidresetWatcherTriggers()重置已触发过的UiWatcher,重置后相当于没运行过voidrunWatchers()强制运行所有的监听器booleanhasAnyWatcherTriggered()检查是否有监听器触发过booleanhasWatcherTriggered(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();    }}

0 0
原创粉丝点击