1. 前言
有很多同学,在熟练使用我们的Poco脚本之后,会发现在一些情况下,节点会出现没成功刷新状态的情况。
比如,在进行元素定位和用例逻辑分离,使用PO模式之类的时候,提前保存了元素对象,例如:
a = poco(text="日历")
可能会出现节点状态长期不刷新的现象,今天我们就详细看一下这些情况,并且利用Airtest1.2.6新增的 refresh 接口来帮助我们解决这个问题。
2. 案例1
假设我们在脚本中提前保存了一个元素对象a,这个对象表示云音乐首页的“每日推荐”这个文本对象,并且我们编写了一个脚本,每隔一秒,打印一下这个对象的存在状态:
如动图所示,尽管我们已经操作设备画面,离开了云音乐的首页,但是这个对象a的状态,仍旧没有一点点变化,一直告诉我们是存在的。
如果我们加上节点刷新接口 refresh ,看看结果会是怎样呢?
这时候就能够正常刷新对象a的状态了。
3. 案例2
Airtest1.2.6之前,我们使用 wait_for_disappearance 接口,会遇到实际上节点已经消失了,但是接口没有判断到消失的问题:
但是Airtest1.2.6修复了这个问题,强制重新获取节点状态,避免节点已经存在、又消失后,不会刷新节点信息导致 exists() 永远为 True 的bug。
可以看下在Airtest1.2.6下的运行效果:
4. refresh的注意事项
注意该接口是节点状态刷新接口,不是poco的刷新接口:
from poco.drivers.android.uiautomation import AndroidUiautomationPoco
poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)
# 正确用法
poco(text="日历").refresh()
# 错误用法
poco.refresh()
错误使用会导致 AttributeError: ‘AndroidUiautomationPoco’ object has no attribute 'refresh’的报错:
在这里还是要推荐下我自己建的软件测试学习Q群:746506216,群里都是学测试的,如果你想学或者正在学习测试,欢迎你加入,大家都是测试党,不定期分享干货(只有软件测试相关的),包括我自己整理的一份2022最新的Python自动化测试进阶资料和零基础教学,欢迎进阶中和对测试感兴趣的小伙伴加入!