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();
}
}
6.UiWatcher API 详细介绍的更多相关文章
- 腾讯微博java(android)sdk新增微博api详细介绍
本文主要介绍腾讯微博android sdk中新增微博有关的8个接口,以及使用的示例代码 注意:以下所有的api示例代码都需要先新建QqTSdkService类对象qqTSdkService并初始化,见 ...
- 7.Configurator API 详细介绍
一.Configurator类介绍与API解释 1.Configurator类介绍 1)用于设置脚本动过的默认延时 2)功能 a.可调节两个模拟动作间的默认时间间隔 b.可调节输入文本的输入时间间隔 ...
- 5.UiScrollable API 详细介绍
Tip: 1.扫动过程中如果界面停留在滚动条的中间部分会先回到起点再进行滚动 2.扫动过程中设置的步长长短决定划过内容的多少,步长越长滑过的内容就越少:步长越短划过的内容就越长 一.UiScrolla ...
- 4.UiCollection API 详细介绍
一.UiCollection类介绍 UiCollection类两大功能:从集合中查找对象:获取某种搜索条件组件的数量 1.UiCollection类说明 1)UiCollection是UiObject ...
- 2.UiSelector API 详细介绍
一.UiSelector类介绍 //通过各种属性与节点关系定位组件 简单实例: public void testDemo2() throws UiObjectNotFoundException{ Ui ...
- 1.UiDevice API 详细介绍
1.UiDevice按键与keycode使用 返回值 方法名 说明 boolean pressBack() 模拟短按返回back键 boolean pressDPadCenter() 模拟按轨迹球中点 ...
- 3.UiObejct API 详细介绍
一.点击与长按 1.组件区域位置关系: Rect 对象代表一个矩形区域:[left,Top][ARight,Bottom](即左上角图标到右下角图标) 2.点击与长按相关API: 返回值 API 说明 ...
- 百度地图API详细介绍
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <t ...
- HTML5全屏(Fullscreen)API详细介绍
// 整个页面 onclick= launchFullScreen(document.documentElement); // 某个元素 launchFullScreen(document.get ...
随机推荐
- 多源最短路——Floyd算法
Floyd算法 问题的提出:已知一个有向网(或者无向网),对每一对定点vi!=vj,要求求出vi与vj之间的最短路径和最短路径的长度. 解决该问题有以下两种方法: (1)轮流以每一个定点为源点,重复执 ...
- CSS3:不可思议的border属性
在CSS中,其border属性有很多的规则.对于一些事物,例如三角形或者其它的图像,我们仍然使用图片代替.但是现在就不需要了,我们可以用CSS形成一些基本图形,我分享了一些关于这方面的技巧. 1.正三 ...
- python __call__ 函数
__call__ Python中有一个有趣的语法,只要定义类型的时候,实现__call__函数,这个类型就成为可调用的. 换句话说,我们可以把这个类型的对象当作函数来使用,相当于 重载了括号运算符. ...
- 2018软工实践—Alpha冲刺(8)
队名 火箭少男100 组长博客 林燊大哥 作业博客 Alpha 冲鸭鸭鸭鸭鸭鸭鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调各成员之间的工作 多次测试软件运行 学习OPENMP ...
- Hibernate:工作原理
Hibernate的工作原理图如下所示:
- (四)Jmeter之逻辑控制器(Logic Controller)
Jmeter之逻辑控制器(Logic Controller) 前言: 1. Jmeter官网对逻辑控制器的解释是:“Logic Controllers determine the order in w ...
- php对二维数组排序
function my_sort($arrays,$sort_key,$sort_order=SORT_DESC,$sort_type=SORT_NUMERIC ){ if(is_array($arr ...
- 在MFC中显示cmd命令行
添加函数 void InitConsoleWindow1() { ; FILE* fp; AllocConsole(); nCrt = _open_osfhandle((long)GetStdHand ...
- 【转】Base64算法详解
原文链接:https://blog.csdn.net/robertcpp/article/details/51628647 完整的BASE64定义可见RFC 1421和RFC 2045.编码后的数据比 ...
- Winform程序在XP系统上双击运行无反应解决方法
右键程序,打开属性栏,在兼容性选项里以兼容模式运行该程序即可解决.