6.UiWatcher API 详细介绍

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了6.UiWatcher API 详细介绍相关的知识,希望对你有一定的参考价值。

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();
    }
}

以上是关于6.UiWatcher API 详细介绍的主要内容,如果未能解决你的问题,请参考以下文章

7.Configurator API 详细介绍

Python 类学习的一些Tips

4.UiCollection API 详细介绍

1.UiDevice API 详细介绍

Java9 进程API详细介绍

HTML5全屏(Fullscreen)API详细介绍