Selenium 元素等待
在做web自动化测试时,有些时候需要等待页面上的元素加载完之后,才能操作,不然元素定位就会超时,程序就会抛出ElementNotVisibleException异常。
1. 强制等待 sleep
sleep()是time模块中的方法,用来做强制等待,缺点:不管元素有没有加载出来,它都会等待这么久,会造成元素已经加载出来了,但是由于设置等待时间的原因,还会在等待中,效率低,还有一种就是元素还没有加载出来,但是等待的时间已经到,就不在等待,代码就会报错
from selenium
import webdriver
import time
driver
= webdriver
.Chrome
()
driver
.get
("http://www.baidu.com")
time
.sleep
(3)
web01
= driver
.find_element_by_xpath
('//input[@id="kw"]')
web01
.send_keys
("天气预报")
2. 隐式等待 implicitly_wait
implicitly_wait()是webdriver 中的方法,使用隐式等待,在一个模块中定位每个元素的时候都会自动调用隐式等待,当调用的元素加载出来以后,隐式等待就不会在等待了,超过设置的等待时间,就会报错
from selenium
import webdriver
driver
= webdriver
.Chrome
()
driver
.get
("http://wwww.baidu.com")
driver
.implicitly_wait
(20)
web01
= driver
.find_element_by_xpath
('//*[@class="s_ipt" and @name="wd"]')
web01
.send_keys
("python")
3. 显示等待WebDriverWait
WebDriverWait() 在指定的时间范围内,等待到符合的元素,每隔x秒去判断一下指定的元素是否加载完,如果超时则抛出异常
from selenium
import webdriver
from selenium
.webdriver
.support
.wait
import WebDriverWait
from selenium
.webdriver
.support
import expected_conditions
as EC
driver
= webdriver
.Chrome
()
driver
.get
("http://www.baidu.com")
'''
第一个参数:驱动
第二个参数:超时时间
第三个参数:轮训时间
'''
wait
= WebDriverWait
(driver
, 30, 0.2)
locator01
= ("xpath", "//input[@id='kw']")
ec01
= EC
.element_to_be_clickable
(locator01
)
ec02
= wait
.until
(ec01
)
print(ec02
)