强制等待
强制等待-time.sleep(n)-不能准确把握等待时间,会浪费时间,影响执⾏效率。一般用于调试
隐式等待
隐式等待-driver.implicitly_wait(n)-对整个driver周期的元素都起作⽤,所以只需要设置一次,但是每⼀个元素都会等待加载完全,直到超过设定的等待时间。 这也会造成时间浪费
显示等待
显示等待-等待时间精准,最大限度的提升效率--尤其不能和隐式混用
显示等待需要⽤到两个类:WebDriverWait和expected_conditions(预期条件)两个类
WebDriverWait:设置轮询间隔(默认0.5)、超时时间等
expected_conditions:指定条件函数(也可以⾃定义条件函数)
1)wait = WebDriverWait(driver,5):
2)通常要配合until() 和 until_not()
wait.until(*)
wait.until_not()
3)expected_conditions 是until和until_not里面的条件 以until举例
官方文档
链接: link
from selenium.webdriver.support import expected_conditions as ec
1.wait.until(ec.title_is(“***”)) //页面标题 返回布尔值
2.wait.until(ec.title_contains(“***”)) //模糊匹配 返回布尔值
locator = (By.ID,’***’)
3.wait.until(ec.presence_of_element_located(locator)) //元素不可见也可以只要加入到DOM树就行 -- 定位器 返回元素
locator = (By.ID,’***’)
4.wait.until(ec.visibility_of_element_ located(locator)) //元素除了要加入DOM树之外还需要可见 -- 定位器 返回元素
5.presence_of_any_elements_located(locator)判断是否⾄少有1个元素存在于dom树中。 返回元素
举个例⼦,如果⻚⾯上有n个元素的class都是'column-md-3',那么只要有1个元素存在,这个⽅法就返回True
6.visibility_of_any_elements_located(locator)判断是否⾄少有1个元素存在于dom树中且可见 返回元素
7.invisibility_of_element_located (locator)判断某个元素中是否不存在于dom树或不可⻅ 返回元素
8.text_to_be_present_in_element(locator, text_):判断某个元素中的text是否包含了预期的字符串 返回布尔值
9.text_to_be_present_in_element_value(locator, text_):判断某个元素中的value属性是否包含了预期的字 返回布尔值
10.wait.until(ec.visibility_of( driver.find_element(By.ID,’***’))) //元素除了要加入DOM树之外还需要可见 -- 元素本身 -- 存在一个问题 这个要先定位元素,如果这个元素还没有加载的话很可能会报错 返回元素
3+7
强制等待:time.sleep(5)
隐式等待:driver.implicitly_wait(5)
显示等待:
wait = WebDriverWait(driver,5)
el = wait.until(expected_conditions.___)
.title_is(“###”)
.title_contains(“###”)
.presence (locator) (备注:locator=(By.ID,“###”))
.visibility (locator)
.text_to_be element(locator,“###”)
.text_to_be element_value(locator,“###”)
.alert_is_present()