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();
    }
}
时间: 2024-08-01 16:25:10

6.UiWatcher API 详细介绍的相关文章

7.Configurator API 详细介绍

一.Configurator类介绍与API解释 1.Configurator类介绍 1)用于设置脚本动过的默认延时 2)功能 a.可调节两个模拟动作间的默认时间间隔 b.可调节输入文本的输入时间间隔 c.可调节每次滚动的时间间隔 2.相关API 延时项 默认延时 功能描述 API 动作 3s 设置延时 setActionAckonwledgmentTimeout(long timeout) 获取默认延时 getActionAckonwledgmentTimeout() 键盘输入 0s 设置延时

4.UiCollection API 详细介绍

一.UiCollection类介绍 UiCollection类两大功能:从集合中查找对象:获取某种搜索条件组件的数量 1.UiCollection类说明 1)UiCollection是UiObject的子类,可以使用UiObject中的所有API 2)UiCollection代表元素条目组合 2.UiCollection功能说明 1)先按照一定的条件枚举出容器类界面所有符合条件的子元素 2)符合条件的元素中再次通过一定的条件最终定位需要的组件 3.UiCollection使用场景 1)一般使用容

【UiAutomator学习笔记】2. UiDevice API 详细介绍(1/2)

UiDevice类介绍 UiDevice功能 获取设备信息:屏幕的旋转方向,屏幕大小,分辨率,亮灭屏状态等 执行设备级的操作:强制设备横竖屏,按压屏幕,按键,坐标操作,滑动,拖拽,灭屏唤醒,截图 监听器功能,用于处理脚本被中断 UiDevice为单例模式,获取实例的方式有两种 UiDevice.getInstance().pressHome(); //推荐使用 getUiDevice().pressHome(); //在其它地方封装方法被调用时,会出现空指针异常 例如下列代码在Demo2中定义了

腾讯微博java(android)sdk新增微博api详细介绍

本文主要介绍腾讯微博android sdk中新增微博有关的8个接口,以及使用的示例代码 注意:以下所有的api示例代码都需要先新建QqTSdkService类对象qqTSdkService并初始化,见sdk使用总介绍 1.8个接口介绍 这8个接口包含了腾讯微博两部分api 1.1.微博相关中的发表一条微博.转播一条微博.回复一条微博.发表一条带图片微博.点评一条微博.发表音乐微博.发表视频微博.发表心情帖子.在api中发表一条微博和发表一条带图片微博合二为一. 1.2.私信相关中的发私信api

1.UiDevice API 详细介绍

1.UiDevice按键与keycode使用 返回值 方法名 说明 boolean pressBack() 模拟短按返回back键 boolean pressDPadCenter() 模拟按轨迹球中点按键 boolean pressSPadDown() 模拟轨迹球向下按键 boolean pressDPadLeft() 模拟轨迹球向左按键 boolean pressDPadRight() 模拟轨迹球向右按键 boolean pressDPadUp() 模拟轨迹球向上按键 boolean pres

HTML5全屏(Fullscreen)API详细介绍

// 整个页面 onclick=   launchFullScreen(document.documentElement); // 某个元素 launchFullScreen(document.getElementById("videoElement")); // 找到支持的方法, 使用需要全屏的 element 调用 function launchFullScreen(element) { if(element.requestFullscreen) { element.request

JavaScript的数据类型详细介绍 &#94883;

原文: http://blog.gqylpy.com/gqy/491 置顶:来自一名75后老程序员的武林秘籍--必读(博主推荐) 来,先呈上武林秘籍链接:http://blog.gqylpy.com/gqy/401/ 你好,我是一名极客!一个 75 后的老工程师! 我将花两分钟,表述清楚我让你读这段文字的目的! 如果你看过武侠小说,你可以把这个经历理解为,你失足落入一个山洞遇到了一位垂暮的老者!而这位老者打算传你一套武功秘籍! 没错,我就是这个老者! 干研发 20 多年了!我也年轻过,奋斗过!我

常见的七款API聚合平台对比和详细介绍

我们都知道一句话"巧妇难为无米之炊",数据源就是数据产生价值中的那些大米.那大数据时代企业需要哪些数据呢?根据我个人理解我觉得可以大致分为以下几类: 1.(内部)企业自身业务生产经营环节产生的内部数据[包括销售.客服.仓储.财务等] 2.(运营)可以理解为企业发展过程中掌握在第三方手中的数据,如企业的广告供应商以及一些传播与媒体数据[新媒体.H5.app等] 3.(外部)包括传统调研数据和机器数据[搜索.电商.社交等].而对于外部数据的获取上,企业往往会觉得有难度,这时候就可以借助AP

详细介绍spring框架(下篇)

上篇简单介绍了spring,下面详细介绍为什么需要spring框架? Spring带给我们什么 方便解耦,简化开发,通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合.有了Spring,用户不必再为单实例模式类.属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用. AOP编程的支持 通过Spring提供的AOP功能,方便进行面向切面的编程,许多不容易用传统OOP实现的功能可以通过AOP轻松应付. 声明式事务的支持 在