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. openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 一

    openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 一 openstack-r版(rocky)搭建基于centos7.4 的openstac ...

  2. 基于Docker Compose构建的MySQL MHA集群

    Docker MySQL MHA 基于Docker 1.13.1之上构建的MySQL MHA Docker Compose Project 可快速启动GTID模式下的MasterHA集群, 主用于My ...

  3. python struct详解

    转载:https://www.cnblogs.com/gala/archive/2011/09/22/2184801.html 有的时候需要用python处理二进制数据,比如,存取文件,socket操 ...

  4. 关于cnblog.com的用户体验

    首先我自己目前是一个学生党,每天在博客园上就上发布一些自己做的东西以及老师布置的作业,还能在上面学习很多别人的一些好的列子,我就希望博客园能够很好地为我们这些学生服务,当我们用它时能够很好地达到我们的 ...

  5. WPF和Expression Blend开发实例:模拟QQ登陆界面打开和关闭特效

    不管在消费者的心中腾讯是一个怎么样的模仿者抄袭者的形象,但是腾讯在软件交互上的设计一直是一流的.正如某位已故的知名产品经理所说的:设计并非外观怎样,感觉如何.设计的是产品的工作原理.我觉得腾讯掌握了其 ...

  6. 从理论到实践,全方位认识DNS

    从理论到实践,全方位认识DNS 2015-11-23 程序员之家 作者:selfboot 原文:http://segmentfault.com/a/1190000003956853 对于 DNS(Do ...

  7. PHP创建对象的几种形式

    创建对象的几种形式 class  C1{ var  $p1 = 1; //定义一个属性: } 形式1: $o1 = new C1(); //通过一个类,去new出一个对象 形式2: $o2 = new ...

  8. http://www.pythonchallenge.com/ 网站题解

    在知乎中无意发现了这个网站,做了几题发现挺有趣的,这里记录下自己的解题思路,顺便对比下答案中的思路 网页:http://www.pythonchallenge.com/ 目前只做了几题,解题的方法就是 ...

  9. 【BZOJ4311】向量(线段树分治,斜率优化)

    [BZOJ4311]向量(线段树分治,斜率优化) 题面 BZOJ 题解 先考虑对于给定的向量集,如何求解和当前向量的最大内积. 设当前向量\((x,y)\),有两个不同的向量\((u1,v1),(u2 ...

  10. 【BZOJ2339】卡农(递推,容斥)

    [BZOJ2339]卡农(递推,容斥) 题面 BZOJ 题解 先简化一下题意: 在\([1,2^n-1]\)中选择不重复的\(m\)个数,使得他们异或和为\(0\)的方案数. 我们设\(f[i]\)表 ...