一、UiWatcher类说明

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() 强制运行所有的监听器

三、注册监听器示例代码

  1. public void testDemo() throws IOException, UiObjectNotFoundException {
  2.  
  3. ////////////////////注册监听器////////////////
  4. /////////////////////////////////////////////
  5.  
  6. UiDevice.getInstance().registerWatcher("phone",new UiWatcher(){
  7. @Override
  8. public boolean checkForCondition(){
  9. //电话监听
  10. UiObject call = new UiObject(new UiSelector().resourceId("com.android.incallui:id/unlock_answer_text").text("接听"));//由接听按钮判断为来电
  11. UiObject call_reject = new UiObject(new UiSelector().resourceId("com.android.incallui:id/unlock_reject"));//挂断按钮
  12. if(call.exists()){
  13. System.out.println("电话监听器被触发啦!!!!");
  14. try{
  15. call_reject.click();
  16. return true;
  17. }catch(UiObjectNotFoundException e){
  18. e.printStackTrace();
  19. }
  20. }
  21. return false;
  22. }
  23. } );
  24.  
  25. ////////////监听器注册移除////////////
  26. /////////////////////////////////////
  27. UiDevice.getInstance().removeWatcher("phone");//移除之后,后面的测试过程中有电话拨进来,不会调用监听器
  28.  
  29. ////////////////////////////////////////////////////
  30. /////////////////常规测试用例开始///////////////////
  31. //////////////////////////////////////////////////
  1. }
注意:
  1)UiWatcher写在所有的用例之前,要在用例之前启动,启动之后后面的正常用例才能执行,执行过程中出现异常的时候调监听器
  2)问题:若测试用例运行较快,有时候不是完美的被打断的时候,监听器有时候也会失败,不会刚好监听到异常情况,这个时候可以把用例之间执行步骤停顿的时间加长,sleep(2000)之类
  3)如果循环体(方法体也是)被打断以后,就算监听器处理完异常也不可能再回到循环体里面,可以简单的复制代码循环,如果代码太长就算了。。。。
  4)UiDevice 是不会触发监听器的,比如我们按home键、菜单键调用到UiDevice的功能,他的顺序执行是不会调用到UiWatcher的。
 
四、检查监听器是否被触发
1.检查监听器API
返回值 API 说明
boolean hasAnyWatcherTriggered() 检查是否有监听器触发过
boolean hasWatcherTriggered(String watcgerName) 检查某个特定的监听器是否触发过

 

2.检查监听器示例代码
  1. //////////检查监听器是否被触发过/////////////
  2. ///////////////////////////////////////////
  3. System.out.println("是否有监听器触发过:" + UiDevice.getInstance().hasAnyWatcherTriggered());
  4. System.out.println("电话监听器是否被触发过:" + UiDevice.getInstance().hasWatcherTriggered("phone"));

注意一:

检查监听器代码卸载所有的正常测试用例代码之后,在测试完成之后,打印是否触发过监听器。

 

uiautomator-----UiWatcher监听器的更多相关文章

  1. Android无线测试之—UiAutomator UiWatcher API介绍一

    UiWatcher类介绍与中断监听检查条件 一.UiWatcher类说明 1.Uiwatcher用于处理脚本执行过程中遇到非预想的步骤 2.UiWatcher使用场景 1)测试过程中来了一个电话 2) ...

  2. [uiautomator篇] UiWatcher的使用

    //package com.softwinner.pad.mark3d; package com.softwinner.performance.benchmark.mark3d; import and ...

  3. [uiautomator篇] 基类

      package com.softwinner.performance.benchmark; /** * UiAssistant public class * @author liuzhipeng ...

  4. UI Automator 常用 API 整理

    主要类: import android.support.test.uiautomator.UiDevice; 作用:设备封装类,测试过程中获取设备信息和设备交互. import android.sup ...

  5. UI Watcher 解决不定时弹窗问题

    缘来是你: 在基于UI谷歌库的测试系统对第三方APK测试例,存在不定时弹窗问题,对测试例的健壮性和稳定性产生了很大影响. 为了解决这个问题,谷歌开源了UIwatcher 类来解决此问题. 附谷歌官网类 ...

  6. Uiautomator 2.0之UiWatcher类学习小记

    1. 主要功能 使用此方法可以处理中断问题,从而保证测试用例的正常运行. 2. 相关API API 说明 registerWatcher (String name, UiWatcher watcher ...

  7. [uiautomator篇]uiwatcher 的使用场景

    http://www.yangyanxing.com/article/use-watcher-in-uiautomator.html   今天在uiautomator中实践了watcher的用法,这个 ...

  8. UiAutomator自动化测试框架介绍

    UiAutomator自动化测试框架介绍 环境搭建 1         必要条件 1.1       JDK 1.2       SDK(API高于15) 1.3       Eclipse 2    ...

  9. android app自动化测试之UIAutomator

    一.UIAutomator Android自动化测试工具有很多,但是要免费.易上手,本人觉得就直接使用Eclipse自带的UIAutomator就不错.测试人员无需跟开发要代码信息,只要手机上有安装之 ...

随机推荐

  1. ActiveMQ与spring集成实现Queue模式

    ActiveMQ可以和spring很好的集成,下面我们来看看,如何做个集成的demo. (1)pom.xml引入相关jar <!-- spring相关 begin --> <depe ...

  2. Python中用format函数格式化字符串

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存. 1.百分号方式 语法:%[( ...

  3. 【配置】检测到在集成的托管管道模式下不适用的ASP.NET设置的解决方法(非简单设置为【经典】模式)。

      ×   检测到在集成的托管管道模式下不适用的ASP.NET设置的解决方法(非简单设置为[经典]模式). 我们将ASP.NET程序从IIS6移植到IIS7,可能运行提示以下错误: HTTP 错误 5 ...

  4. UVA1225

    每增加1个整数,所有位上的对应数都加一.建立一个10000列10行的表,然后查表就可以了. #include<stdio.h> #include<string.h> ][]; ...

  5. C#委托

    1.什么是委托: 委托是一个类型安全的对象,它指向程序中另一个以后会被调用的方法(或多个方法).它类似C语言里的函数指针,但它是类型安全的. 委托类型包含3个重要的信息: 它所调用的方法的名称 该方法 ...

  6. php中trait(性状)与generator(生成器)

    PHP中trait(性状)与generator(生成器) 一.trait (性状) 最近在看Josh Lockhat的<Modern PHP>,这本书很薄.但是其中给出了一个很重要的学习方 ...

  7. dos 批处学习笔记

    dos 批处理@ 只显示命令结果echo 回显pause 暂停del 删除set 查看系统变量>nul 正确命令输入空洞2>nul 错误命令输入空洞dir 显示目录和文件&& ...

  8. MVC防止xss攻击 ——Html.AntiForgeryToken的AJAX提交

    1.在Html表单里面使用了@Html.AntiForgeryToken()就可以阻止CSRF攻击. 2.相应的我们要在Controller中也要加入[ValidateAntiForgeryToken ...

  9. Python socket编程之八:阶段性总结

    f1.py # -*- coding: utf-8 -*- import sqlalchemy import tushare import pandas import socket import st ...

  10. 2. web前端开发分享-css,js进阶篇

    一,css进阶篇: 等css哪些事儿看了两三遍之后,需要对看过的知识综合应用,这时候需要大量的实践经验, 简单的想法:把qq首页全屏另存为jpg然后通过ps工具切图结合css转换成html,有无从下手 ...