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 详细介绍的更多相关文章

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

    本文主要介绍腾讯微博android sdk中新增微博有关的8个接口,以及使用的示例代码 注意:以下所有的api示例代码都需要先新建QqTSdkService类对象qqTSdkService并初始化,见 ...

  2. 7.Configurator API 详细介绍

    一.Configurator类介绍与API解释 1.Configurator类介绍 1)用于设置脚本动过的默认延时 2)功能 a.可调节两个模拟动作间的默认时间间隔 b.可调节输入文本的输入时间间隔 ...

  3. 5.UiScrollable API 详细介绍

    Tip: 1.扫动过程中如果界面停留在滚动条的中间部分会先回到起点再进行滚动 2.扫动过程中设置的步长长短决定划过内容的多少,步长越长滑过的内容就越少:步长越短划过的内容就越长 一.UiScrolla ...

  4. 4.UiCollection API 详细介绍

    一.UiCollection类介绍 UiCollection类两大功能:从集合中查找对象:获取某种搜索条件组件的数量 1.UiCollection类说明 1)UiCollection是UiObject ...

  5. 2.UiSelector API 详细介绍

    一.UiSelector类介绍 //通过各种属性与节点关系定位组件 简单实例: public void testDemo2() throws UiObjectNotFoundException{ Ui ...

  6. 1.UiDevice API 详细介绍

    1.UiDevice按键与keycode使用 返回值 方法名 说明 boolean pressBack() 模拟短按返回back键 boolean pressDPadCenter() 模拟按轨迹球中点 ...

  7. 3.UiObejct API 详细介绍

    一.点击与长按 1.组件区域位置关系: Rect 对象代表一个矩形区域:[left,Top][ARight,Bottom](即左上角图标到右下角图标) 2.点击与长按相关API: 返回值 API 说明 ...

  8. 百度地图API详细介绍

    <!DOCTYPE html> <html> <head>     <meta charset="UTF-8">     <t ...

  9. HTML5全屏(Fullscreen)API详细介绍

    // 整个页面 onclick=   launchFullScreen(document.documentElement); // 某个元素 launchFullScreen(document.get ...

随机推荐

  1. Linux下文件的打包、解压缩指令——tar,gzip,bzip2

    本文是对 鸟叔的Linux私房菜(基础学习篇) 第三版 的学习笔记,原文可参考原书中文网站 鸟叔的Linux私房菜.更多详细信息可直接参考对应Linux命令的 man 帮助( 如 man tar). ...

  2. 补充的css知识点

    1.文字一行显示   超出的用...表示 .ellipsis{ overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

  3. Asphalting Roads(翻译!)

    Description City X consists of n vertical and n horizontal infinite roads, forming n × n intersectio ...

  4. Thunder团队Final周贡献分分配结果

    小组名称:Thunder 项目名称:爱阅app 组长:王航 成员:李传康.翟宇豪.邹双黛.苗威.宋雨.胡佑蓉.杨梓瑞 分配规则 则1:基础分,拿出总分的20%(8分)进行均分,剩下的80%(32分)用 ...

  5. tomcat启动时,报java.io.EOFException

    在启动Tomcat的时候突然报出IO异常,具体异常如下图 在网上找了解决方法,测试了好几种,都不行,到最后看了一个博客解决了,在此记录一下. 百度了下,网上都是说去Tomcat目录下:将tomcat5 ...

  6. 2014-2015 ACM-ICPC, NEERC, Eastern Subregional Contest Problem H. Pair: normal and paranormal

    题目链接:http://codeforces.com/group/aUVPeyEnI2/contest/229669 时间限制:1s 空间限制:64MB 题目大意:给定一个长度为2n,由n个大写字母和 ...

  7. 第二次c++作业(觉得渐渐入门系列)

    其实说实话,我还是不敢很确定地说面向对象和面向过程这两种语言,我确实能分得开,但是我觉得倒是比以前好很多了.//(大概是谈了对象,知道了什么是面向对象编程) 1.从个人角度来说, a:面向过程就是-- ...

  8. 软工1816 · Alpha冲刺(7/10)

    团队信息 队名:爸爸饿了 组长博客:here 作业博客:here 组员情况 组员1(组长):王彬 过去两天完成了哪些任务 学会了POSTMAN的使用,对后端已经完成的接口进行了收发消息正确性的验证 推 ...

  9. CSS中px和em属性的特点与区别

    详解px和em的特点和区别象素px是我们在定义CSS中经常用到的尺寸大小单位,而em在国外网站中经常被使用,px和em之间究竟有什么区别和特点呢?◆px像素(Pixel),相对长度单位.像素px是相对 ...

  10. JDK源码分析 – HashMap

    HashMap类的申明 HashMap的定义如下: public class HashMap<K,V> extends AbstractMap<K,V> implements ...