UiWatcher类使用
原创
©著作权归作者所有:来自51CTO博客作者wx5ba8dc11102bc的原创作品,请联系作者获取转载授权,否则将追究法律责任
- UiWatcher用于处理脚本执行过程中遇到非预想的步骤
- UiWatcher使用场景
* 测试过程可能还会有一个闹钟
* 来了一条短信等突发事件
* 出现非预想的步骤 - 当在测试过程中发生突发事件,UiWatcher会处理异常,比如停止闹钟 继续完成测试用例
- 中断监听检查条件:
- public boolean checkForCondition();
- 说明:
- 在测试框架无法找到一个匹配时,使用uiselector测试框架自动调用此处理方法。在超时未找到匹配项时,框架调用checkforCondition()方法查找设备上的所有已注册的监听检查条件。可以使用此方法来处理中断问题保证测试用例正常运行
- 例如:如果出现一个对话框,可以检查是否是运营商发来的服务信息而不是测试异常
- 监听器必须写在所有用例之前,监听器在用例之前启动,启动之后,用例才能执行,执行过程中出现异常才能调用监听器,过程中有很多监听条件,考虑过程中各种可能的情况将其处理掉。
- 监听器操作:
返回值
| API
| 说明
|
void
| registerAwtcher(String name, UiWatcher watcher)
| 注册一个监听器,当UiSelector无法匹配到对象的时候,触发监听器
|
void
| removeWatcher(String name)
| 取消之前注册的指定监听器
|
void
| resetWatcherTriggers()
| 重置已触发过的UiWatcher,重置后相当于没运行过
|
void
| runWatchers()
| 强制运行所有的监听器
|
返回值
| API
| 说明
|
boolean
| hanAnyWatcherTriggered()
| 检查是否有监听器触发过
|
boolean
| hasWatcherTriggered(String watcherName)
| 检查某个特定的监听器是否触发过
|
public class UiWatchers extends TestCase {
public void testWatcher() throws UiObjectNotFoundException {
//先要注册监听器
UiDevice uiDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
uiDevice.registerWatcher("phone", new UiWatcher() {
@Override
public boolean checkForCondition() {
//挂断电话
UiObject call = new UiObject(new UiSelector().text("来电"));
UiObject view = new UiObject(new UiSelector().className("android.view.View"));
if (call.exists()) {
System.out.println("触发监听器");
try {
view.swipeLeft(20);
} catch (UiObjectNotFoundException e) {
e.printStackTrace();
}
return true;
}
return false;
}
});
uiDevice.registerWatcher("msm", new UiWatcher() {
@Override
public boolean checkForCondition() {
System.out.println("短信监听器");
//如果return false但是最后没有被触发,只是相当于过滤器的作用,如果没有短信的业务,他还是会调用一下进行匹配但是不会被触发
return false;
}
});
//执行用例步骤
try {
UiObject vol = new UiObject(new UiSelector().className("android.widget.LinearLayout").index(3)).getChild(new UiSelector().text("声音和通知"));
UiObject back = new UiObject(new UiSelector().description("声音和通知:向上导航"));
for(int i = 0;i<1;i++) {
vol.clickAndWaitForNewWindow();
back.clickAndWaitForNewWindow();
if(i == 1){
uiDevice.removeWatcher("phone");
}
}
} catch (UiObjectNotFoundException e) {
e.printStackTrace();
}
System.out.println("短信监听器触发"+uiDevice.hasAnyWatcherTriggered());
System.out.println("短信监听器触发"+uiDevice.hasWatcherTriggered("msm"));
}
}