川石教育
全国咨询热线:136-9172-9932
  1. 首页 > 资讯与干货 > IT资讯

UiSelector类介绍(五):Uiwatcher类介绍

作者:川石学院 日期:2022-04-12 13:57:54 点击数:

一天一个关于测试知识点,5分钟内讲解你最关心的软件测试问题,今天就接着来谈谈关于软件测试中的“Uiwatcher类介绍”。

UiAutomator API详解:UiSelector类介绍(一)(图1)

  Uiwatcher用于处理脚本执行过程中遇到非预想的步骤,比如以下场景。

  l 测试过程中来了一个电话。

  l 测试过程中来了一条短信或微信。

  l 测试过程中闹钟响了。

  l 出现各种非预想的步骤。

  Uiwatcher的定义方法如下。

  UiDevice.getInstance(instrumentation).registerWatcher("phone",new UiWatcher() {

  @Override

  public boolean checkForCondition() {

  …}

  }

  其中代码public boolean checkForCondition() {…}为中断监听检查条件,是必须有的。

  另外,需要注意以下几个方面。

  l UiWatcher写在所有的用例之前,要在用例之前启动,启动之后,后面的正常用例才能执行,执行过程中出现异常的时候调监听器。

  l 若测试用例运行较快,有时候不是完美的被打断的时候,监听器有时候也会失败,不会刚好监听到异常情况,这个时候可以把用例之间执行步骤停顿的时间加长,sleep(2000)之类。

  l 如果循环体(方法体也是)被打断以后,就算监听器处理完异常也不可能再回到循环体里面,可以简单的复制代码循环,如果代码太长就算了。

  l UiDevice 是不会触发监听器的,比如按home键、菜单键调用到UiDevice的功能,他的顺序执行是不会调用到UiWatcher的。

  Uiwatcher类的API如表4-41所示。

UiSelector类介绍(五):Uiwatcher类介绍(图2)

  案例4-38:监听电话。

  @Test

  public void testWatcher() throws UiObjectNotFoundException {

  UiDevice.getInstance(instrumentation).registerWatcher("phone",new UiWatcher() {

  @Override

  public boolean checkForCondition() {

  //电话监听

  UiObject call = new UiObject(new UiSelector().resourceId("com.android.dialer:id/primary_call_banner"));//由接听按钮判断为来电

  UiObject call_reject = new UiObject(new UiSelector().resourceId("com.android.dialer:id/floating_end_call_action_button"));//挂断按钮

  if (call.exists()) {

  Log.i("AAA","电话监听器被触发啦!!!!");

  try {

  call_reject.click();

  return true;

  } catch (UiObjectNotFoundException e) {

  e.printStackTrace();

  }

  }

  return false;

  }

  });

  testScroll();

  Log.i("AAA","是否有监听器触发过:" + UiDevice.getInstance(getInstrumentation()).hasAnyWatcherTriggered());

  Log.i("AAA","电话监听器是否被触发过:" + UiDevice.getInstance(getInstrumentation()).hasWatcherTriggered("phone"));

  UiDevice.getInstance(getInstrumentation()).removeWatcher("phone");///移除之后,后面的测试过程中有电话拨进来,不会调用监听器

  }

  其中代码testScroll();是在测试这个用例的时候监听是否有电话进入。这个测试用例只能用半人工的方法来测试,测试的时候建议先拨通电话,然后单独运行这个测试用例,在运行测试用例testScroll()的时候激活刚才被挂断的电话,程序通过语句UiObject call = new UiObject(new UiSelector().resourceId("com.android.dialer:id/primary_call_banner"));检查到屏幕中出现resourceId为"com.android.dialer:id/primary_call_banner"即认为电话被激活,然后通过语句 call_reject.click();(UiObject call_reject = new UiObject(new UiSelector().resourceId("com.android.dialer:id/floating_end_call_action_button"));//挂断按钮)即resourceId为"com.android.dialer:id/floating_end_call_action_button"的组件点击挂断电话。在程序结尾有这么两行语句:

  Log.i("AAA","是否有监听器触发过:" + UiDevice.getInstance(getInstrumentation()).hasAnyWatcherTriggered());

  Log.i("AAA","电话监听器是否被触发过:" + UiDevice.getInstance(getInstrumentation()).hasWatcherTriggered("phone"));

  所以运行完毕通过查看Log日志来检查是否监听被触发。最后特别需要注意需要关闭监听,其语句是:

UiDevice.getInstance(getInstrumentation()).removeWatcher("phone");。


相关文章
  • 亚马逊运营成功转行软件测试,薪资13K表示很满意!2022-04-12 13:57:54
  • 西安川石的兰朋友喊你来当他的学弟学妹啦!2022-04-12 13:57:54
  • 国外的月亮也不一定比国内测试猿的年薪美~2022-04-12 13:57:54
  • 建筑工程专业朱同学成功转行为软件测试人!2022-04-12 13:57:54
  • 财务管理专业转行软件测试月薪甩会计几条街!2022-04-12 13:57:54
  • 只有技术沉淀才能成功上岸,深圳就业薪资13K!2022-04-12 13:57:54
  • 薪资11K!实现自我价值,从掌握一门IT技术开始...2022-04-12 13:57:54
  • 文科生转行软件测试照样拿下高薪15K!2022-04-12 13:57:54
  • 恭喜罗同学喜提19.5K,成功入行软件测试!2022-04-12 13:57:54
  • 毕业1年,迷茫的他最终选择转行软件测试2022-04-12 13:57:54