等待机制
一般在做UI自动化时,会有等待几秒钟的操作,今天咱们来看看,有哪些常见的等待机制
1、强制等待:
import time
time.sleep() tips:实际工作中用的很少
2、隐式等待:比强制等待更加智能,相当于全局等待,设置一次对driver对象的整个生命周期
不管在哪个地方都会等它加载出来再去定位,默默的等待元素出现,元素出现了继续往下执行
超过设置的等待时间仍没有出现,则报错超时异常
driver.implicitly_wait(15)
3、显式等待:指定条件进行等待
等待元素被加载
等待元素可见
等待元素可点击
tips:加载出来并不等于可见,加载只是显示出页面上所能展示的内容,此时若滚动条往下滑,
还有其他的内容,如果不往下滑动,你是看不到的,但是已经加载出来了,所以,这两个有区别
1、强制等待
import time from selenium.webdriver import Chrome driver = Chrome() driver.get("http://www.baidu.com") driver.find_element_by_id("kw").send_keys("王者荣耀") driver.find_element_by_id("su").click() # 下面是强制等待 time.sleep(3) driver.find_element_by_id('1') time.sleep(2) driver.quit()


2、隐式等待
import time from selenium.webdriver import Chrome driver = Chrome() driver.get("http://www.baidu.com") # 设置隐式等待 driver.implicitly_wait(15) driver.find_element_by_id("kw").send_keys("王者荣耀") driver.find_element_by_id("su").click() driver.find_element_by_id('1') time.sleep(2) driver.quit()

3、显式等待
import time from selenium.webdriver import Chrome from selenium.webdriver.common.by import By from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver = Chrome() driver.get("http://www.baidu.com") driver.find_element(By.ID, "kw").send_keys("王者荣耀") driver.find_element(By.ID, "su").click() locator = (By.ID, '1') # 等待id为1的元素加载到页面上,再往下执行 WebDriverWait(driver, 15, 0.5).until( EC.presence_of_element_located(locator) ) # 等待id为1的元素在页面处于可见状态 WebDriverWait(driver, 15, 0.5).until( EC.visibility_of_element_located(locator) ) # 等待id为1的元素在页面处于可点击状态 WebDriverWait(driver, 15, 0.5).until( EC.element_to_be_clickable(locator) ) time.sleep(2) driver.quit()

在工作中,后两种常用,尤其是第三种的显式等待,因为涉及到js等方面的操作,所以显式等待也得掌握

浙公网安备 33010602011771号