【官方的介绍】:
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
下面以实例进行讲解:
1 # -*- coding: utf-8 -*-
2 import os3 import sys4 import subprocess5 import time6 from uiautomator import device asd7 #定义一个授权权限的监视器,只要发现弹框中有selector的text=allow的就执行8 d.watcher('Permission').when(text = 'ALLOW').click(text = 'ALLOW')9 #在应用列表中找到radio这个应用10 d(text = "Radio").scroll.to(text = "Radio")11 #启动radio应用12 d(text = "Radio").click()13 #等待2秒后点击开始扫描频道14 time.sleep(2)15 d.click(456,1146)16 i = 0
17 if d(description = "More options").exists:18 print "find more options"
19 d(description = "More options").click()20 else:21 while not d(description = "More options").exists:22 print 'not find more options'
23 time.sleep(1)24 # d.click(456,1146)25 i = i +1
26 print "this is %d time to find the scan button" %i27
28 if d.watcher('Permission').triggered:29 print "watcher is triggered"
30 else:31 print "watcher is not triggered"
输出:
1 watcher is triggered
说明:在上面第12行至15行间,就会触发watcher
watcher的语法介绍:
1 d.watcher('Permission').when(text = 'ALLOW').click(text = 'ALLOW')2 # d.watcher(name) ## creates a newnamed watcher.3 # .when(condition) ## the UiSelector condition of the watcher.4 # .click(target) ## perform click action on the target UiSelector.