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. scikit-learn使用PCA降维小结

    本文在主成分分析(PCA)原理总结和用scikit-learn学习主成分分析(PCA)的内容基础上做了一些笔记和补充,强调了我认为重要的部分,其中一些细节不再赘述. Jupiter notebook版 ...

  2. activemq 持久化

    转自: http://blog.csdn.net/kobejayandy/article/details/50736479 消息持久性的原理很简单,就是在发送者将消息发送出去后,消息中心首先将消息存储 ...

  3. css全局样式基础代码

    body{ font-size:12px; font-family:"宋体",Arial, Helvetica, sans-serif;color:#363636;backgrou ...

  4. IE报错:SCRIPT1010: 缺少标识符

    原文 http://keenwon.com/989.html 昨天用IE11测试页面的时候,发现在文档模式调整到IE8的时候,会报错: 看了半天,百思不得其解,后来终于顿悟:delete是javasc ...

  5. 团队项目-BUG挖掘

    测试硬件: 华为畅享5 测试平台: 安卓5.1 测试项目Git地址: https://github.com/RABITBABY/We-have-bing 测试Apk来源地址: http://www.a ...

  6. (十一)Jmeter另一种调试工具 HTTP Mirror Server

    之前我介绍过Jmeter的一种调试工具Debug Sampler,它可以输出Jmeter的变量.属性甚至是系统属性而不用发送真实的请求到服务器.既然这样,那么HTTP Mirror Server又是做 ...

  7. 增加响应header让ajax支持跨域

    ajax请求数据步骤 发送请求--->浏览器接受响应--->判断是否是同域下 是的话,就把响应数据返回给ajax.不是的话就提醒禁止跨域请求. 现在可以在响应头重增加 header(&qu ...

  8. 使用vue-cli3新建一个项目,并写好基本配置

    1. 使用vue-cli3新建项目: https://cli.vuejs.org/zh/guide/creating-a-project.html 注意,我这里用gitbash不好选择选项,我就用了基 ...

  9. Spring-MVC理解之二:前置控制器

    原文链接:http://www.cnblogs.com/brolanda/p/4265749.html 一.前置控制器配置与讲解 上篇中理解了IOC容器的初始化时机,并理解了webApplicatio ...

  10. 【设计模式】C++中的单例模式

    讲解来自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&id=4281275&uid=26611383 由于使用了POSIX函 ...