[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.

 

posted @ 2018-07-23 15:13  iSZ  阅读(953)  评论(0编辑  收藏  举报