[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
下面以实例进行讲解:
1 # -*- coding: utf-8 -*- 2 import os 3 import sys 4 import subprocess 5 import time 6 from uiautomator import device as d 7 #定义一个授权权限的监视器,只要发现弹框中有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" %i 27 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 new named watcher. 3 # .when(condition) ## the UiSelector condition of the watcher. 4 # .click(target) ## perform click action on the target UiSelector.