uiautomator-----UiWatcher监听器

摘要:
返回值API指示voidregisterWatcher注册侦听器。当Uiselector与对象不匹配时,它会触发侦听器voidremoveWatcher取消先前注册的指定侦听器voideresetWatcherTrigger(),以对触发的UiWatcher进行充值。重置后,相当于不运行voidregisterWatcher()来强制所有侦听器运行。3.注册监听器的示例代码是publicvoid testDemo()throwsIOException,UiObjectNotFoundException{////////////////////////\/////////////////////(“答案”);//通过应答按钮判断为调用UiObjectcall_reject=newUiObject(newUiSelector().resourceId(“com.android.incarlui:id/unlock_reject”));//如果(call.exists()){System.out.println(“电话监视器已被触发!!!!

一、UiWatcher类说明

1、Uiwatcher用于处理脚本执行过程中遇到非预想的步骤

2、UiWatcher使用场景

  1)测试过程中来了一个电话

  2)测试过程中来了一条短信

  3)测试过程中闹钟响了

  4)出现各种非预想的步骤

 3、中断监听检查条件

  public boolean checkForCondition();   

二、UiWatcher监听器操作相关API

在测试框架无法找到一个匹配时,使用UiSelector测试框架将自动调用此处理程序方法。在超时未找到匹配项时,框架调用checkForCondition()方法查找设备上的所有已注册的监听检查条件。可以使用此方法来处理中断问题保证测试用例正常运行。

返回值API说明
voidregisterWatcher(String name,Uiwatcher watcher)注册一个监听器,当Uiselector无法匹配到对象的时候,触发监听器
voidremoveWatcger(String name)取消之前注册的指定监听器
voidresetWatcherTriggers()充值已触发过的UiWatcher,重置后相当于没运行过
voidrunWatchers()强制运行所有的监听器

三、注册监听器示例代码

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.incallui: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说明
booleanhasAnyWatcherTriggered()检查是否有监听器触发过
booleanhasWatcherTriggered(String watcgerName)检查某个特定的监听器是否触发过

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

注意一:

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

 

 

免责声明:文章转载自《uiautomator-----UiWatcher监听器》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Cypress系列(44)- 命令行运行 Cypress【转】Unobtrusive Ajax的使用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

12 jmeter性能测试实战--web程序

项目背景 项目:XX网站环境:Windows需求:并发登录的性能测试场景:1s增加2个线程,运行2000次(线程数20,Ramp-Up seconds 10,循环次数100)。分别看20、40、60并发下的表现监控:成功率、响应时间、标准差、CPU、mem、io等。资源监控需要在Windows下部署监控agent(serveragent) 测试步骤 1.W...

Oracle ORA12514 监听程序当前无法识别连接描述符中请求的服务

在连接数据库的时候,有时会遇到一个“ORA12514:监听程序当前无法识别连接描述符中请求的服务”的错误,这个错误其实就是数据库动态注册(关于动态注册会在稍后讲解)不生效,导致监听器无法识别客户端连接符中提供的服务名,从而拒绝建立数据库连接时报的错误信息,所以就需要对监听器配置做修改。 在这里,还需对问题进行细化,有时候可能会发现,在刚开启监听器的时候会发...

angular问题总结

已经用angular开发了大概有三个月了,开始两周很艰难,慢慢的也渐渐熟悉一些了。在此整理一下这段时间遇到的各种坑。 一、Angular怎样停止请求(1)首先在需要请求的controller中注入$q服务, (2)在scope变量中声明一个变量,var canceler; (3)在事件最上方写上 //取消之前的请求 if (canceler) cancel...

稳定UI运行结果-自动化测试失败重试和截图

运行自动化测试的时候,有时会因为网络不稳定,测试环境或者第三方环境正在重启而造成用例运行结果不稳定,时而能跑过时而跑不过。这些难以重现的环境因素造成的用例失败会让测试人员很困扰,排查即耗费时间也没有太多改善的空间。针对这种情况,我们可以基于TestNG的重试器和监听器实现失败结果的重试和监听处理,一旦监听到失败的测试用例,启动自己定制的重试方法和处理方法来...

浅析Android动画(二),属性动画高级实例探究

转载请注明出处!http://www.cnblogs.com/wondertwo/p/5312482.html ObjectAnimator实现属性动画 为了写好Android动画这几篇博客,在动笔之前我是下过很大决心的,我对自己的要求是尽量把一个小知识点写清楚写明白,说白了就是相对于大而全的长篇大论,我更倾向于去写小而美的博客!为了保证在高产的同时能坚...

Javaweb统计在线人数的小栗子

最近在学习Javaweb相关的内容(不黑不吹之前对web开发零基础),下面通过一个统计在线人数的小栗子讲讲Servlet监听器吧 开发环境 eclipse  tomcat 7 先说说这个小栗子的构思:         首先要考虑的就是通过什么方式能够统计在线人数?很容易想到可以通过session来统计在线人数为什么不是request呢?因为request在...