显示等待
隐式等待
区别
- 隐式等待相当于在WebDriver级别的显式等待
- 因为隐式等待一旦找到就会返回结果,而返回结果到脚本,再接收到下一条操作刚才找到的元素的命令需要一段时间。这段时间可能页面已经因为加载后续内容而发生了变化,之前找到的元素也受到了影响,于是操作元素的命令就无法正常执行了。
- 因为隐式等待只要能定位到元素就会返回,并不能对元素的各种状态进行判断,所以显式等待中丰富的元素属性判断就为有特殊定位需求的情况提供了解决方案。
- 通常的建议当需要等待时尽量使用显式等待,如果需要隐式等待的话局部使用局部设置,使用完毕复位。不是很推荐隐式等待和显式等待混合使用
- 隐式等待 显示等待区别:本质是在最大超时时间内循环检测,默认0.5s,检测的方式在web下是执行js,app下是调用uiautomator,所以就算没有全部渲染,也是可以检测的。很多页面都是动态加载的,这期间的每个时刻dom都是完整的,只是在不断改变控件树而已。
- 隐式等待解决的是找控件的问题,但是等待控件消失这个就乏力了,不是做不到,而是做起来非常麻烦,所以显式等待机制就需要了。要等待的条件可以非常丰富,不再局限于简单的查找。
假设有个控件等待60s才能找到,如果用隐式等待那么其他用例也会在找不到控件的时候进行60s等待,总体用例时间会增加很多的。这也是要针对性的使用显式等待的原因。 - 理论上点击一个控件之前需要等待可点击的,这个需要自己封装,会让执行更稳定的。最新版本的课程里,我们就是这样教的。有些场景下,就算可点击也是点击了没有效果的,需要用到循环点击显式等待下个控件出现这种技巧。所以我多次提到做自动化,如果直接用原生api而不是自己封装框架,那么稳定性是很差的。
以上参考:https://ceshiren.com/t/topic/2536/8