Webdriver---元素等待(显示等待)
- 元素等待的概念
因为网络原因,有时要等待很久才会出现网页,那么就会影响查找元素及定位元素。
显示等待是针对某一个元素进行相关等待判定
(显示等待,相当于等待具体的某一个元素,直到等到它出现为止)
隐式等待不针对某一个元素进行等待,全局元素等待
(隐式等待不针对个别元素,只是给一个固定的时间进行等待)
- 相关模块
WebDriverWait显示等待针对元素必用
Expected_conditions预期条件类(里面包含方法可以调用,用于显示等待)
NoSuchElementException用于隐式等待抛出异常
By用于元素定位
From selenium import webdriver
From selenium.webdriver.common.by import By
From selenium webdriver.support.ui import WebDriverWait
From selenium.webdriver.support import exected_conditions as EC
From selenium.common.exceptions import NoSuchElementException
- 显示等待
案例:
检测百度页面搜索按钮是否存在,存在就输入关键词“selenium”然后点击搜索
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from time import sleep
driver=webdriver.Firefox()
driver.get("https://www.baidu.com")
driver.find_element_by_css_selector("#kw").send_keys("selenium")
sleep(2)
element=WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located((By.ID,"su")))
element.click()
sleep(3)
driver.quit()
注意:第3行代码中”as EC”表示取别名
第11行中,表示在5秒内,每隔0.5秒检查一次元素,是否找到搜索按钮元素
2、隐式等待
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from time import sleep,ctime
driver=webdriver.Firefox()
driver.get("https://www.baidu.com")
sleep(2)
#隐式等待5秒
driver.implicitly_wait(5)
try:
#打印当前时间,按秒计时
print(ctime())
#等待以下2个元素
driver.find_element_by_css_selector("#kw").send_keys("selenium")
driver.find_element_by_css_selector("#su").click()
#若出现 异常,就把异常打印出来
except NoSuchElementExceptionas as msg:
print(msg)
finally:
打印结束的时间
print(ctime())
sleep(2)
driver.quit()
来源:千锋软件测试