WatchContext==>监视上下文
- 基础用法
with d.watch_context() as ctx:
# 下面三行代码时立即执行完的,不会有什么等待
ctx.when("^立即(下载|更新)").when("取消").click() # 当同时出现(立即安装或立即取消)和取消按钮的时候,点击取消
ctx.when("同意").click() # 当出现同意按钮的时候,点击同意
ctx.when("确定").click() # 当出现确定按钮的时候点击确定
- 使用call函数来触发函数回调
# 使用call函数来触发函数回调
# call支持两个参数,d和el,不区分参数位置,可以不传参。如果传参变量名不能写错
ctx.when("仲夏之夜").call(lambda d: d.press("back")) # 当有元素"仲夏之夜"出现,点击返回按钮
ctx.when("确定").call(lambda el: el.click())
Tip:lambda函数用法:
语法:lambda <参数> : <表达式>
==>冒号前面的是冒号后面表达式传入的参数
返回值:表达式的值就是lambda函数的返回值
- 其他操作
with d.watch_context(builtin=True) as ctx:
ctx.when("@tb:id/jview_view").when('//*[@content-desc'图片']).click()
- 不使用with as方法
ctx = d.watch_context()
ctx = when('设置')。click()
ctx.wait_stable() # 等待界面不再有弹窗,关闭监视器
ctx.close()
Watcher==>监视器
- 基础用法
# 注册匿名监控当出现”安装“时点击
d.watcher.when("安装").click()
# 注册名为ANR的监控,当出现ANR和Force CLose时,点击Force CLose
d.watcher("ANR").when(xpath="ANR").when("Force CLose").click()
- 使用call回调函数来触发监控
d.watcher.when("抢红包").press("back")
d.watcher.when("//*[@text='Out of memory']").call(lambda d: d.shell('am force-stop com.im.qq'))
def click_callback(d: u2.Device):
d.xpath("确定").click() # 在回调中调用不会再次触发watcher
d.xpath("继续").click() # 使用d.xpath检查元素的时候,会触发watcher(目前最多触发5次)
- 监控操作
# 移除ANR的监控
d.watcher.remove("ANR")
# 移除所有的监控
d.watcher.remove()
# 开始后台监控
d.watcher.start()
d.watcher.start(2.0) # 默认监控间隔2.0s
# 强制运行所有监控
d.watcher.run()
# 停止监控
d.watcher.stop()
# 停止并移除所有的监控,常用于初始化
d.watcher.reset()