android自动化测试工具【UiAutomator】——UiWatcher(一)
2017-06-15 09:08
561 查看
一、UiWatcher类说明
1、Uiwatcher用于处理脚本执行过程中遇到非预想的步骤
2、UiWatcher使用场景
1)测试过程中来了一个电话
2)测试过程中来了一条短信
3)测试过程中闹钟响了
4)出现各种非预想的步骤
3、中断监听检查条件
public boolean checkForCondition();
二、UiWatcher监听器操作相关API
在测试框架无法找到一个匹配时,使用UiSelector测试框架将自动调用此处理程序方法。在超时未找到匹配项时,框架调用checkForCondition()方法查找设备上的所有已注册的监听检查条件。可以使用此方法来处理中断问题保证测试用例正常运行。
三、注册监听器示例代码
注意:
1)UiWatcher写在所有的用例之前,要在用例之前启动,启动之后后面的正常用例才能执行,执行过程中出现异常的时候调监听器
2)问题:若测试用例运行较快,有时候不是完美的被打断的时候,监听器有时候也会失败,不会刚好监听到异常情况,这个时候可以把用例之间执行步骤停顿的时间加长,sleep(2000)之类
3)如果循环体(方法体也是)被打断以后,就算监听器处理完异常也不可能再回到循环体里面,可以简单的复制代码循环,如果代码太长就算了。。。。
4)UiDevice 是不会触发监听器的,比如我们按home键、菜单键调用到UiDevice的功能,他的顺序执行是不会调用到UiWatcher的。
四、检查监听器是否被触发
1.检查监听器API
2.检查监听器示例代码
注意一:
检查监听器代码卸载所有的正常测试用例代码之后,在测试完成之后,打印是否触发过监听器。
1、Uiwatcher用于处理脚本执行过程中遇到非预想的步骤
2、UiWatcher使用场景
1)测试过程中来了一个电话
2)测试过程中来了一条短信
3)测试过程中闹钟响了
4)出现各种非预想的步骤
3、中断监听检查条件
public boolean checkForCondition();
二、UiWatcher监听器操作相关API
在测试框架无法找到一个匹配时,使用UiSelector测试框架将自动调用此处理程序方法。在超时未找到匹配项时,框架调用checkForCondition()方法查找设备上的所有已注册的监听检查条件。可以使用此方法来处理中断问题保证测试用例正常运行。
返回值 | API | 说明 |
void | registerWatcher(String name,Uiwatcher watcher) | 注册一个监听器,当Uiselector无法匹配到对象的时候,触发监听器 |
void | removeWatcger(String name) | 取消之前注册的指定监听器 |
void | resetWatcherTriggers() | 充值已触发过的UiWatcher,重置后相当于没运行过 |
void | runWatchers() | 强制运行所有的监听器 |
public void testDemo() throws IOException, UiObjectNotFoundException { ////////////////////注册监听器//////////////// ///////////////////////////////////////////// UiDevice.getInstance().registerWatcher("phone",new UiWatcher(){ @Override public boolean checkForCondition(){ //电话监听 UiObject call = new UiObject(new UiSelector().resourceId("com.android.in 4000 callui:id/unlock_answer_text").text("接听"));//由接听按钮判断为来电 UiObject call_reject = new UiObject(new UiSelector().resourceId("com.android.incallui:id/unlock_reject"));//挂断按钮 if(call.exists()){ System.out.println("电话监听器被触发啦!!!!"); try{ call_reject.click(); return true; }catch(UiObjectNotFoundException e){ e.printStackTrace(); } } return false; } } ); ////////////监听器注册移除//////////// ///////////////////////////////////// UiDevice.getInstance().removeWatcher("phone");//移除之后,后面的测试过程中有电话拨进来,不会调用监听器 //////////////////////////////////////////////////// /////////////////常规测试用例开始/////////////////// ////////////////////////////////////////////////// }
注意:
1)UiWatcher写在所有的用例之前,要在用例之前启动,启动之后后面的正常用例才能执行,执行过程中出现异常的时候调监听器
2)问题:若测试用例运行较快,有时候不是完美的被打断的时候,监听器有时候也会失败,不会刚好监听到异常情况,这个时候可以把用例之间执行步骤停顿的时间加长,sleep(2000)之类
3)如果循环体(方法体也是)被打断以后,就算监听器处理完异常也不可能再回到循环体里面,可以简单的复制代码循环,如果代码太长就算了。。。。
4)UiDevice 是不会触发监听器的,比如我们按home键、菜单键调用到UiDevice的功能,他的顺序执行是不会调用到UiWatcher的。
四、检查监听器是否被触发
1.检查监听器API
返回值 | API | 说明 |
boolean | hasAnyWatcherTriggered() | 检查是否有监听器触发过 |
boolean | hasWatcherTriggered(String watcgerName) | 检查某个特定的监听器是否触发过 |
2.检查监听器示例代码
//////////检查监听器是否被触发过///////////// /////////////////////////////////////////// System.out.println("是否有监听器触发过:" + UiDevice.getInstance().hasAnyWatcherTriggered()); System.out.println("电话监听器是否被触发过:" + UiDevice.getInstance().hasWatcherTriggered("phone"));
注意一:
检查监听器代码卸载所有的正常测试用例代码之后,在测试完成之后,打印是否触发过监听器。
相关文章推荐
- UiAutomator——Android自动化测试工具简要介绍
- android自动化测试工具【UiAutomator】——打开settings实例
- android自动化测试工具【UiAutomator】——UiScrollable
- android自动化测试工具【UiAutomator】——截图功能
- android自动化测试工具【UiAutomator】——使用Indec来定位控件
- 在Macbook上配置使用Android自动化测试工具uiautomator
- Android自动化测试工具 UiAutomator使用详解
- android自动化测试工具【UiAutomator】——打开settings实例
- Android自动化测试工具uiautomator
- android自动化测试工具【UiAutomator】——UiObject
- Android自动化测试工具——Monkey
- android 4.1 UI 工具测试的新利器, uiautomator
- android 自动化测试工具(Ranorex)
- Android自动化压力测试图解教程——Monkey工具
- Android自动化测试工具——Monkey
- android自动化测试工具之DroidPilot
- Android 自动化测试工具初探
- Android自动化测试工具
- Android ANR与自动化测试工具Monkey