[Python2]介绍关于Uiautomator的watcher使用场景及使用方法
【官方的介绍】:
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使用场景及使用方法的更多相关文章
- 基于MIndSpore框架的道路场景语义分割方法研究
基于MIndSpore框架的道路场景语义分割方法研究 概述 本文以华为最新国产深度学习框架Mindspore为基础,将城市道路下的实况图片解析作为任务背景,以复杂城市道路进行高精度的语义分割为任务目标 ...
- Redo丢失场景和处理方法
Redo丢失场景和处理方法 Type of Failure Status Column of V$LOG Action One member failed in multiplexed group N ...
- cocos2dx中的场景和使用方法
1.一个游戏中有且只有一个导演,但是至少有一个场景 2.场景是游戏元素节点数的根节点,也可以理解为该场景下的渲染树的根节点 3.场景是一个容器,包含了该场景下的所有游戏元素,比如层,精灵 4.场景是导 ...
- cocos2d 场景转换的方法执行顺序
转自:http://shanbei.info/the-cocos2d-scene-conversion-method-execution-order.html 如果你希望在场景转换的过程中使用过渡效果 ...
- javascript举例介绍事件委托的典型使用场景
在了解什么是DOM事件以及给DOM事件绑定监听器的几种方法后,我们来谈谈事件委托. 1. e.target 和 e.currentTarget 当我们给目标元素target 绑定一个事件监听器targ ...
- 转载:简单介绍Python中的try和finally和with方法
用 Python 做一件很平常的事情: 打开文件, 逐行读入, 最后关掉文件; 进一步的需求是, 这也许是程序中一个可选的功能, 如果有任何问题, 比如文件无法打开, 或是读取出错, 那么在函数内需要 ...
- 开放数据接口 API 简介与使用场景、调用方法
此文章对开放数据接口 API 进行了功能介绍.使用场景介绍以及调用方法的说明,供用户在使用数据接口时参考之用. 在给大家分享的一系列软件开发视频课程中,以及在我们的社区微信群聊天中,都积极地鼓励大家开 ...
- 结合实例详细介绍encodeURI()、encodeURIComponent()、decodeURI()、decodeURIComponent()使用方法
在介绍encodeURI().encodeURIComponent().decodeURI().decodeURIComponent()方法前我们需要了解Global对象的概念: Global(全 ...
- cocos2d-x 2.x版本中,场景切换各方法调用顺序
假设从A场景切换到B场景,调用各场景方法的顺序为: 如果没有切换效果(transition),则先调用B的init(),再调用A的onExitTransitionStart(),接着调用A的onExi ...
随机推荐
- Extjs4处理后台json数据中日期和时间的方法
当ASP.NET后台使用JavaScriptSerializer这个组件将对象序列化为json,或者使用ScriptMethod特性的json [ScriptMethod(ResponseFormat ...
- C#读取“我的文档”等特殊系统路径及环境变量
返回“我的文档”路径字符串 Environment.GetFolderPath(Environment.SpecialFolder.Personal) 本技巧使用GetFolderPath方法来获取指 ...
- Docker 为 ASP.NET Core Web 应用程序生成 Docker 映像,创建并运行多个容器
1.为 ASP.NET Core 应用程序生成 Docker 映像 下载这个事例项目:https://github.com/dotnet/dotnet-docker/tree/master/sampl ...
- ImageButton设置src图片大小
需求&起因 有时候没有找到合适大小的资源,需要修改图片大小而且不改变ImageButton的大小.可以通过缩放图片大小的方式改变外观. ImageView的属性android:scaleTyp ...
- C# 数组 二维数组
数组:相同数据类型的元素按一定顺序排列的集合.是一组变量 作用:操作大量数据 数组的定义1.数组里面的内容必须是同一类型2.数据必须有长度限制 ...
- 使用pl/sql的文本导入器时如何设置主键自增长
在使用文本导入器批量导入数据时,如果需要设置主键自增长,可以先创建一个序列: create sequence SEQ_Userinf start with 1 increment by 1nomaxv ...
- Java中类的线程安全问题
java中各种集合(字符串类)的线程安全性!!! 一.概念: 线程安全:就是当多线程访问时,采用了加锁的机制:即当一个线程访问该类的某个数据时,会对这个数据进行保护,其他线程不能对其访问,直到该线程读 ...
- HDU1007(最近点对)
Quoit Design Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- python乐观锁、悲观锁
二.乐观锁总是认为不会产生并发问题,每次去取数据的时候总认为不会有其他线程对数据进行修改,因此不会上锁,但是在更新时会判断其他线程在这之前有没有对数据进行修改 三.悲观锁总是假设最坏的情况,每次取数据 ...
- Express 框架
Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具.使用 Express 可以快速地搭建一个完整功能的网站 ...