1.强制等待(time.sleep(2))
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
def wait_sleep():
driver = webdriver.Chrome() # 实例化chromedriver
driver.get("https://www.baidu.com") # 打开网站 get
time.sleep(2) # 强制等待2秒
res = driver.find_element(By.ID, "su").click()
if __name__ == '__main__':
wait_sleep()
缺点:
(1)不确定页面加载时间,可能会因为等待时间过长,而影响用例的执行效率
(2)不确定页面加载时间,可能会因为等待时间过短,而导致代码依然会报错
2.隐式等待(driver.implicitly_wait(2))
使用场景:针对难以确定元素加载的具体等待时间,设置一个等待时间,轮询查找(默认0.5秒)元素是否出现,如果没有出现就抛出异常
特点:全局生效
from selenium import webdriver
from selenium.webdriver.common.by import By
def element_inter():
driver = webdriver.Chrome() # 实例化chromedriver
driver.get("https://www.baidu.com") # 打开网站 get
driver.implicitly_wait(2)
res = driver.find_element(By.ID, "su").click()
if __name__ == '__main__':
element_inter()
3.显示等待(WebDriverWait(driver实例, 最长等待时间, 轮询时间).until(结束条件))
使用场景:
(1)页面元素加载是异步加载过程,通常html会先加载完成,js、css其后
(2)元素存在与否是由html决定,元素的交互是由css或者js决定
(3)隐式等待只关注元素能不能找到,不关注元素能否点击或者进行其他的交互
def element_inter():
driver = webdriver.Chrome() # 实例化chromedriver
driver.get("https://vip.ceshiren.com/#/ui_study/") # 打开网站 get
WebDriverWait(driver, 10).until(expected_conditions.element_to_be_clickable((By.ID, "success_btu")))
driver.find_element(By.ID, "success_btu").click()
time.sleep(3)
if __name__ == '__main__':
element_inter()