该方是基于uiautomator2如下版本进行验证的:
PS C:\windows\system32> pip show uiautomator2 Name: uiautomator2 Version: 1.2.2 Summary: Python Wrapper for Android UiAutomator2 test tool Home-page: https://github.com/codeskyblue/uiautomator2 Author: codeskyblue Author-email: codeskyblue@gmail.com License: MIT Location: c:\program files\python36\lib\site-packages Requires: six, progress, whichcraft, logzero, lxml, adbutils, retry, Pillow, requests, humanize Required-by: weditor, atx
下面贴出githup上关于该方法的使用
Watcher You can register watchers to perform some actions when a selector does not find a match. Register Watcher When a selector can not find a match, uiautomator2 will run all registered watchers. Click target when conditions match d.watcher("AUTO_FC_WHEN_ANR").when(text="ANR").when(text="Wait") .click(text="Force Close") # 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. There is also a trick about click. You can use click without arguments. d.watcher("ALERT").when(text="OK").click() # Same as d.watcher("ALERT").when(text="OK").click(text="OK") Press key when a condition becomes true d.watcher("AUTO_FC_WHEN_ANR").when(text="ANR").when(text="Wait") .press("back", "home") # d.watcher(name) ## creates a new named watcher. # .when(condition) ## the UiSelector condition of the watcher. # .press(<keyname>, ..., <keyname>.() ## press keys one by one in sequence. Check if the named watcher triggered A watcher is triggered, which means the watcher was run and all its conditions matched. d.watcher("watcher_name").triggered # true in case of the specified watcher triggered, else false Remove a named watcher # remove the watcher d.watcher("watcher_name").remove() List all watchers d.watchers # a list of all registered watchers Check for any triggered watcher d.watchers.triggered # true in case of any watcher triggered Reset all triggered watchers # reset all triggered watchers, after that, d.watchers.triggered will be false. d.watchers.reset() Remove watchers # remove all registered watchers d.watchers.remove() # remove the named watcher, same as d.watcher("watcher_name").remove() d.watchers.remove("watcher_name") Force to run all watchers # force to run all registered watchers d.watchers.run()
注:里面涉及的watcher_name可以自定义,可以做到见名知意即可
watcher的使用是要先注册(第9行至20行均是注册watcher的方法),然后激活watcher(第56行),注意这个激活方法只是一个瞬时激活,就是说使用之后即销毁,不会一直存于后台。那这样的话在实际的使用场景中怎么使用这个功能呢,下面看一段脚本 1 # -*- coding:utf-8 -*-
import uiautomator2 as u2 import time d = u2.connect() cfg = MTBFConfig() package = cfg.getstr("Admit", "pkg", "config") PACKAGELIST = package.split(",") print(PACKAGELIST) d.watcher("").when(text="").click(text="") #d.watchers.run() print(d.watchers) time.sleep(2) pkglen = len(PACKAGELIST) print(("There are %d package for test") %pkglen) class Admit(object): def main(self): for i in range(pkglen): k = 0 for j in range(5): if d.info['currentPackageName'] != PACKAGELIST[i]: d.app_start(PACKAGELIST[i]) print(PACKAGELIST[i]) time.sleep(1) k += 1 if k == 3: print("Can not enter "+ str(PACKAGELIST[i])) return False if PACKAGELIST[i] == 'com.google.android.contacts': print("hello") if d(description = "Open navigation drawer").exists(timeout = 5): d(description = "Open navigation drawer").click() if d(text = "Settings").exists(timeout = 5): d(text = "Settings").click() if d(resourceId="android:id/title", text = "Import").exists(timeout=5): d(resourceId="android:id/title", text = "Import").click() time.sleep(3) if d(resourceId = "android:id/button1", text = "OK").exists(timeout = 5): d(resourceId = "android:id/button1", text = "OK").click() time.sleep(1) d.watchers.run() //在上面OK点击之后会弹出一个权限访问的许可,所以这个时候需要激活一次watcher把弹框关掉,以便不影响后续测试,所以就一个原则,哪里可能会有弹框就在哪里激活watcher if __name__=="__main__": ad = Admit() ad.main()
总结
以上所述是小编给大家介绍的python uiautomator2 watcher的使用方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。