1、强制等待:sleep
import time
time.sleep(2)
缺点:
死等2秒,不管中间发生了什么,一定要等够2秒后才会继续进行下一步。
2秒内可能元素还没加载完,仍然报错
测试用例非常多的情况下,会产生大量等待时间,导致运行很慢
2、隐形等待:implicitly_wait(秒)
from selenium import webdriver
driver = webdriver.Chrome()
driver.implicitly_wait(5)
driver.get('https://www.baidu.com')
driver.quit()
设置最长等待时间,在等待时间内加载完成则继续下一步,若超时则抛出异常报timeout
整个driver会话周期内(从打开浏览器到driver.quit()),设置一次即可,全局都可以用。后面driver查找元素的时候如果没有找到元素不会立即报错,先调用driver.implicitly_wait(2)
缺点:
切换窗口,不会等待窗口出现
随着ajax技术的广泛应用,很多元素都是部分加载,在页面未加载完元素已经出来,可以进行下一步了,但是隐形等待要等页面全部加载完
3、显性等待:WebDriverWait类
明确告诉程序要等待什么,等待多久,每多久查询一次
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.suport import expected_conditions as EC
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
id ="login"
WebDriverWait(driver.10).until(EC.visibility_of_element_located((By.ID,id)))
WebDriverWait(driver,等待时长,轮询周期).until()/until_not()
expected_conditions模块:提供了一系列期望发生的条件
presence_of_element_located:元素存在
visibility_of_element_located:元素可见
element_to_be_clickable:元素可点击