前端测试 对 UIAutomator2 中 watcher (观察者) 的实际操作总结

ThickBull · June 07, 2019 · 828 hits

一、watcher是什么
watcher是一个观察者,它可以检测到设备页面中的变化,比如某个文本/描述/类名等的出现或者改变,然后进行下一步的点击/按钮操作

二、watcher怎么用
Step.1 注册一个watcher
d.watcher("WATCHER_NAME").when(text="确认").click(text="确认")
//Same as
d.watcher("WATCHER_NAME").when(text="确认").click()
这句话表示:注册一个名字为“WATCHER_NAME”的watcher,当存在UiSelector满足“text='确认'”的时候,执行点击操作

d.watcher("WATCHER_NAME2").when(text="OK").when(text="Wait").press("back", "home")
下面这句则表示:注册一个名字为“WATCHER_NAME2”的watcher,当满足两个条件时,依次按back与home键

Step.2 watcher注册了,并不代表已经生效,需要手动开启它
开启方法(1)
//enable auto trigger watchers
d.watcher("WATCHER_NAME").watched = True
d.watchers.watched = True
使用这种方法,则会启动所有的观察者,并一直运行在手机后台,在你不想使用它的时候,需要使用d.watchers.watched = False手动关闭;
当然,你也可以使用下方的remove方法移除某个watcher,如此它便不会再生效

开启方法(2)
//force to run all registered watchers
d.watcher("WATCHER_NAME").run()
d.watchers.run()
使用d.watchers.run(),则与方法(1)不同,它是在这条命令执行后启动一次,watcher结束后便不会再触发

三,总结

  1. 查看当前所有watcher
    d.watchers
    //a list of all registered watchers

  2. 从已注册的watchers移除某个/全部观察者
    //remove the named watcher
    d.watcher("watcher_name").remove()

//or this way
d.watchers.remove("watcher_name")

//remove all registered watchers
d.watchers.remove()

  1. 判断 某个/所有观察者中的某个 是否已经被触发过 d.watcher("watcher_name").triggered //true in case of the specified watcher triggered, else false

d.watchers.triggered
//true in case of any watcher triggered
如果一个watcher被触发过,这个信息是被存储在手机后台的,判断当前watcher或watchers是否触发成功时,需要对上一个存储在后台的监听
使用d.watcher("watcher_name").reset()或d.watchers.reset()进行状态重置,才能准确获取当前watcher或watchers的状态

//reset all triggered watchers, after that, d.watchers.triggered will be false.
d.watcher("watcher_name").reset()
d.watchers.reset()

如果你想要这个watcher失效,需要执行d.watchers.watched=False,或者移除d.watcher("DECLINE").remove()

尊重原著,Watcher官方文档内容如下:(源自:https://github.com/openatx/uiautomator2

No Reply at the moment.
需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up