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. RNN: Feed Forward, Back Propagation Through Time and Truncated Backpropagation Through Time

    原创作品,转载请注明出处哦~ 了解RNN的前向.后向传播算法的推导原理是非常重要的,这样, 1. 才会选择正确的激活函数: 2. 才会选择合适的前向传播的timesteps数和后向传播的timeste ...

  2. 调试和开发npm模块的方式

    ln -s(软连接) 假设my-project是运行npm模块的项目,vue-router是我们需要调试的npm模块 将vue-router下载到与my-project同级目录中. git clone ...

  3. 第六周的PSP

    本周PSP: 本周进度条: 累积进度图:: 本周PSP饼状图:

  4. CS小分队第二阶段冲刺站立会议(5月27日)

    昨天成果:昨日有些小意外,导致没有按照原定计划工作.昨天为扫雷游戏增加了新的失败特效,只要玩家点到地雷,所有的地雷都会依次出现两帧的爆炸效果,并伴随声音. 今日计划:排除一些现有程序的bug.. 遇到 ...

  5. Rsyslog-legacy(旧版本语法)配置说明及举例

    1. RULES-书写规则 格式:日志设备(类型).日志级别             日志处理方式 (1)日志类型分类 auth pam产生的日志 authpriv ssh,ftp等登录信息的验证信息 ...

  6. 关于window.open弹出窗口被阻止的问题

    原文:http://blog.csdn.net/fanfanjin/article/details/6858168 在web编程过程中,经常会遇到一些页面需要弹出窗口,但是在服务器端用window.o ...

  7. PAT---福尔摩斯约会时间

    主要为字符串的处理,注意读懂题目意思. 设置输出域宽和填充字符的函数分别为setw(int n),setfill(char c);两个函数的头文件为#include<iomanip>; # ...

  8. css3 伪元素 ::before ::after

    键代码分析: /*css代码*/ .effect::before, .effect::after{ content:""; position:absolute; z-index:- ...

  9. Python @retry装饰器的使用与实现案例(requests请求失败并重复请求)

    在爬虫代码的编写中,requests请求网页的时候常常请求失败或错误,一般的操作是各种判断状态和超时,需要多次重试请求,这种情况下,如果想优雅的实现功能,可以学习下retrying包下的retry装饰 ...

  10. 【转】Base64算法详解

    原文链接:https://blog.csdn.net/robertcpp/article/details/51628647 完整的BASE64定义可见RFC 1421和RFC 2045.编码后的数据比 ...