selenium三种等待方式
time.sleep(固定等待)
在开发自动化框架的过程中,最忌讳使用python自带模块time的sleep方式进行等待,虽然可以自定义等待时间,但当网络良好时,依旧按照预设定的时间继续等待,导致整个项目的自动化时间无限延长,不建议使用(注:脚本调试过程中,还是可以方便使用的)
implicitly_wait(隐式等待)
隐式等待实际是设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步。这样的隐式等待会有个坑,JavaScript一般都是放在我们的body的最后进行加载,实际这是页面上的元素都已经加载完毕,我们确还在等待全部页面加载结束。
隐式等待对整个driver周期都起作用,在最开始设置一次就可以了。
WebDriverWait(显示等待)
WebDriverWait是selenium提供得到显示等待模块引入路径:
from selenium.webdriver.support.wait import WebDriverWait
代码如下:
from selenium import webdriver from time import sleep from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait class TestCase(object): def __init__(self): self.driver = webdriver.Chrome() self.driver.get('http://www.baidu.com') # sleep(2) def test_sleep(self): self.driver.find_element_by_id('kw').send_keys('selenium') # sleep(2) # 线程阻塞 blocking wait self.driver.find_element_by_id('su').click() # sleep(3) self.driver.quit() def test_implicitly(self): self.driver.implicitly_wait(10) self.driver.find_element_by_id('kw').send_keys('selenium') # sleep(2) # 线程阻塞 blocking wait self.driver.find_element_by_id('su').click() # sleep(3) self.driver.quit() def test_wait(self): wait = WebDriverWait(self.driver,2) wait.until(EC.title_is('百度一下,你就知道')) self.driver.find_element_by_id('kw').send_keys('selenium') # sleep(2) # 线程阻塞 blocking wait self.driver.find_element_by_id('su').click() # sleep(3) self.driver.quit() if __name__ == '__main__': case = TestCase() # case.test_sleep() # case.test_implicitly() case.test_wait()