- 强制(直接)等待
- 隐式等待
- 显示等待
为什么要添加等待:
为了避免页面未渲染完成后操作,导致的报错。
直接等待:
解决方法:在报错的元素操作之前添加等待即 添加Thread.sleep(3000~10000)。
注意:添加的内容一定要在报错行之前添加。
拓展:在ui自动化测试过程中,经常会出现no such element 的错误,碰到此类错误,第一反应先加强等,确定不是因为等待导致的错误。排查完问题在对强等进行优化。
隐式等待:
问题:难以确定元素加载的具体等待时间,避免强制等待时间过多
解决方案:针对于寻找元素的这个动作,使用隐式等待添加配置
原理:设置一个等待时间,轮询查找(默认0.5秒)元素是否出现,如果没有出现就抛出异常
隐式等待格式 driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10))
ofSeconds(10)其中单位是秒 ;ofMillis(10))其中单位是毫秒
隐式等待无法解决的问题:
- 元素可以找打,使用点击等操作,出现报错
- 原因:
- 页面元素加载是异步加载的过程,通常html会先加载完成,js、css其后
- 元素存在与否是由HTML决定,元素的交互是由css或者js决定
- 隐式等待只关注元素能不能找到,不关注元素能否点击或者进行其他的交互
- 解决方案:使用显示等待
显示等待基本使用:
示例:WebDrivewrWait(driver实例,最长等待时间).until(结束条件)
原理:在最长等待时间内,是否满足结束条件