web自动化测试:强制等待sleep,隐式等待implicitly_wait,显式等待WebDriverWait 三者的区别

下面简单介绍下这三种等待的区别:

1.强制等待sleep,就是只要你用了这个sleep就会执行等待,运用的地方多了会影响脚本的执行速度。

强制等待的应用场景:

from time import sleep
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.maximize_window()
sleep(3) #等待3s

2.隐式等待implicitly_wait(),运用这个之后,需要等页面元素全部加载出来才会执行接下来的代码操作,即使你需要点击的元素已经加载出来,也要等整个页面加载完才行,影响脚本的执行速度。

隐式等待的应用场景:

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.maximize_window()
driver.implicitly_wait(6) #隐式等待6s

3.显式等待WebDriverWait(),与until()或者until_not()方法结合使用,也与expected_conditions结合使用,expected_conditions中提供了很多方法:presence_of_element_located 判断某个元素是否被加到了 dom 树里,并不代表该元素一定可见
visibility_of_element_located 判断元素是否可见(可见代表元素非隐藏,并且元素宽和高都不等于 0)
element_to_be_clickable 判断某个元素中是否可见并且可点击
element_to_be_selected 判断某个元素是否被选中了,一般用在下拉列表
invisibility_of_element_located 判断某个元素中是否不存在于dom树或不可见
以上几个方法最为常见
显示等待能自定义等待条件,只要满足等待条件即可执行下一步代码操作

显式等待的应用场景:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait

driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.maximize_window()

#搜索Taylor swift
driver.find_element_by_id("kw").send_keys("Taylor swift")
driver.find_element_by_xpath("//input[@value='百度一下']").click()

#判断下面定位的元素是否出现并点击
down_data_click = WebDriverWait(driver,5).until(expected_conditions.presence_of_element_located((By.CSS_SELECTOR,
                                    "div[id='wrapper_wrapper']>div[id='container']>div[id='content_left']"
                                    ">div[class='result-op c-container new-pmd']"
                                    ">h3[class='t c-gap-bottom-small']>a")))
down_data_click.click()

猜你喜欢

转载自blog.csdn.net/qq_43096786/article/details/113799526