【官方的介绍】:

Watcher

You can register watcher to perform some actions when a selector can not find a match.

如何理解这句话呢,意思就是当你在执行一些操作时,有些选择器未匹配上就会触发这个监视器

举个例子:首次启动安装的第三方app,都会让要同意一些权限(比如电话权限、存储权限、位置权限等),同意之后才可以进行后面正常的操作。那么这个步骤简单划分为三个步骤:

步骤1:启动app

步骤2:进行权限授权

步骤3:使用app功能

watcher:d.watcher('Permission').when(text = 'ALLOW').click(text = 'ALLOW')

在这个过程中,我们可以把步骤2里面权限授权过程全部做成一个watcher

【如何才能使用watcher】

当你的程序跳过了某些步骤而去执行另外的操作,但这个“某些步骤”又在程序正常或者异常情况下确实会发生,那么这个时候就会导致有些 selector 找不到就触发选择器,看看选择器中是否有匹配的,如果有匹配的就会按照watcher中定义的操作进行执行

拿上面例子来说,程序中直接执行步骤1和步骤3,但步骤2又确实是存在,这时就会触发watcher,只有watcher执行了才会去执行步骤3

下面以实例进行讲解:

 # -*- coding: utf- -*-
import os
import sys
import subprocess
import time
from uiautomator import device as d
#定义一个授权权限的监视器,只要发现弹框中有selector的text=allow的就执行
d.watcher('Permission').when(text = 'ALLOW').click(text = 'ALLOW')
#在应用列表中找到radio这个应用
d(text = "Radio").scroll.to(text = "Radio")
#启动radio应用
d(text = "Radio").click()
#等待2秒后点击开始扫描频道
time.sleep()
d.click(,)
i =
if d(description = "More options").exists:
print "find more options"
d(description = "More options").click()
else:
while not d(description = "More options").exists:
print 'not find more options'
time.sleep()
# d.click(,)
i = i +
print "this is %d time to find the scan button" %i if d.watcher('Permission').triggered:
print "watcher is triggered"
else:
print "watcher is not triggered"

输出:

watcher is triggered

说明:在上面第12行至15行间,就会触发watcher

watcher的语法介绍:

 d.watcher('Permission').when(text = 'ALLOW').click(text = 'ALLOW')
# d.watcher(name) ## creates a new named watcher.
# .when(condition) ## the UiSelector condition of the watcher.
# .click(target) ## perform click action on the target UiSelector.

[Python2]介绍关于Uiautomator的watcher使用场景及使用方法的更多相关文章

  1. 基于MIndSpore框架的道路场景语义分割方法研究

    基于MIndSpore框架的道路场景语义分割方法研究 概述 本文以华为最新国产深度学习框架Mindspore为基础,将城市道路下的实况图片解析作为任务背景,以复杂城市道路进行高精度的语义分割为任务目标 ...

  2. Redo丢失场景和处理方法

    Redo丢失场景和处理方法 Type of Failure Status Column of V$LOG Action One member failed in multiplexed group N ...

  3. cocos2dx中的场景和使用方法

    1.一个游戏中有且只有一个导演,但是至少有一个场景 2.场景是游戏元素节点数的根节点,也可以理解为该场景下的渲染树的根节点 3.场景是一个容器,包含了该场景下的所有游戏元素,比如层,精灵 4.场景是导 ...

  4. cocos2d 场景转换的方法执行顺序

    转自:http://shanbei.info/the-cocos2d-scene-conversion-method-execution-order.html 如果你希望在场景转换的过程中使用过渡效果 ...

  5. javascript举例介绍事件委托的典型使用场景

    在了解什么是DOM事件以及给DOM事件绑定监听器的几种方法后,我们来谈谈事件委托. 1. e.target 和 e.currentTarget 当我们给目标元素target 绑定一个事件监听器targ ...

  6. 转载:简单介绍Python中的try和finally和with方法

    用 Python 做一件很平常的事情: 打开文件, 逐行读入, 最后关掉文件; 进一步的需求是, 这也许是程序中一个可选的功能, 如果有任何问题, 比如文件无法打开, 或是读取出错, 那么在函数内需要 ...

  7. 开放数据接口 API 简介与使用场景、调用方法

    此文章对开放数据接口 API 进行了功能介绍.使用场景介绍以及调用方法的说明,供用户在使用数据接口时参考之用. 在给大家分享的一系列软件开发视频课程中,以及在我们的社区微信群聊天中,都积极地鼓励大家开 ...

  8. 结合实例详细介绍encodeURI()、encodeURIComponent()、decodeURI()、decodeURIComponent()使用方法

    在介绍encodeURI().encodeURIComponent().decodeURI().decodeURIComponent()方法前我们需要了解Global对象的概念:   Global(全 ...

  9. cocos2d-x 2.x版本中,场景切换各方法调用顺序

    假设从A场景切换到B场景,调用各场景方法的顺序为: 如果没有切换效果(transition),则先调用B的init(),再调用A的onExitTransitionStart(),接着调用A的onExi ...

随机推荐

  1. 嵌入式Linux安装Dropbear SSH server

    0. 背景 OpenSSH因为其相对较大,一般不太适用于嵌入式平台,多用于PC或者服务器的Linux版本中. Dropbear是一个相对较小的SSH服务器和客户端.它运行在一个基于POSIX的各种平台 ...

  2. 浅谈Http协议是怎么回事?

    老实说关于http协议这个概念,见到最多的还是各类招聘信息.在平时的工作中,除了了解一些请求,响应,请求头这些概念外,对于http协议也没有太多的关心.因为貌似对平时的工作没有什么影响,所以在写这篇关 ...

  3. XJad反编译工具

    XJad反编译工具 我们写的java文件,编译后就会生成相应的字节码文件,也就是.java文件经过编译以后生成.class文件 现在,假设我们现在存在这样一个问题:就是我们想自己动手验证注释会不会被编 ...

  4. java如何正确停止一个线程

    Thread类中有start(), stop()方法,不过stop方法已经被废弃掉. 平时其实也有用过,共享一个变量,相当于标志,不断检查标志,判断是否退出线程 如果有阻塞,需要使用Thread的in ...

  5. Application作用域实现:当用户重复登录时,挤掉原来的用户

    Application作用域实现:当用户重复登录时,挤掉原来的用户 一.实现思想 1.application(ServletContext)是保存在服务器端的作用域,我们在application中保存 ...

  6. springboot No Java compiler available for configuration options compilerClassName: [null] and compil

    今天使用eclipse创建springboot整合jsp出现一个问题,在idea中并没有遇到这个问题.最后发现是需要在eclipse中添加一个eclipse依赖,依赖如下: <dependenc ...

  7. Spring boot初入门

    1. Spring的Java配置方式 Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置. 1.1. @Configuration 和 @Bean Spring的Java配置方式是 ...

  8. Nginx 优化配置及详细注释

    Nginx 的nginx.conf文件,是调优后的,具体影响已经写清楚注释,可以拿来用,有一些设置无效,我备注上了,不知道是不是版本的问题,回头查一下再更正. #普通配置 #==性能配置 #运行用户 ...

  9. android踩坑记录之view.setVisiblity()

    问题 在某次做悬浮侧边栏的时候,遇到了一个问题:我用windowManager创建的悬浮侧边栏.点击中心view展开菜单,再次点击则隐藏菜单,如此简单的一个需求,却遇到了奇怪的问题,我没有对view的 ...

  10. JSP指示元素<%@ %> 与指示类型

    JSP提示元素 <%@ 指示类型  [属性="值"]%> 指示类型 指示类型有三种,分别是taglib.include.page taglib指示类型 用于引入标签库 ...