在我们做自动化的时候,有些页面元素并不是一开始就完全加载出来的而是需要时间,那么我们就需要去等待一段时间,在appium中有三种等待的方法去支持我们实现这个操作。
1、sleep()方法——固定等待时间
import time
time.sleep(60)强制等待60s,这个等待是脚本停止执行,线程暂停去等待
2、隐式等待implicitly_Wait()——–全局等待时间
#隐式等待20秒
driver.implicitly_wait(20)
全局等待20s不管元素是否已经加载
1) 当使用了隐式等待执行测试的时候,如果WebDriver没有在DOM中找到元素,将继续等待,超出设定时间后则抛出找不到元素的异常
2)换句话说,当查找元素或元素并没有立即出现的时候,隐式等待将等待一段时间再查找DOM,默认的时间是0
3) 一旦设置了隐式等待,则它存在整个WebDriver 对象实例的声明周期中,隐式的等待会让一个正常响应的应用的测试变慢。
4) 它将会在寻找每个元素的时候都进行等待,这样会增加整个测试执行的时间。
implicitly_wait()方法比sleep() 更加智能,后者只能选择一个固定的时间的等待,前者可以在一个时间范围内智能的等待。
3、显式等待WebDriverWait(driver,5,1).until(method,message),每隔一秒钟调用一次until中的method方法(这个方法可以是用于判断某个元素是否存在的方法,存在返回true,否则返回false),最长等待5秒,5秒后继续执行下一步
WebDriverWait类的构造方法接受了一个WebDriver对象和一个等待最长时间。然后调用until方法,在等待时间内,每隔几秒就会去检测一下是否已加载出定位的元素,如果定位到了则不会继续等待,如果超时仍未定位到则会抛出异常。
这三种方法,显式等待是最智能的可是也是我目前唯一没用过的,具体好与坏我也分的不是很清楚,还要慢慢摸索。