等待
在测试中,添加等待是为了避免页面为渲染完成时操作导致错误
等待分为三种:
强制等待
隐式等待
显式等待
类型 |
使用方法 |
原理 |
适用场景 |
直接等待 |
time.sleep() |
强制线程休眠 |
调试代码,临时添加 |
隐式等待 |
driver.implicitly_wait() |
在时间范围内,轮询查找元素 |
找不到元素问题,无法解决交互问题 |
显式等待 |
WebDriverWait(实例,最长时间,轮询时间).until(结束条件) |
设定特定的等待条件,轮询操作 |
特定条件下的等待问题,如点击等交互行为 |
隐式等待
在元素可以找到,但交互错误的情况下不适用隐式等待。造成原因为加载过程中先加载html,css和js后加载,导致点击时交互未加载。
from selenium import webdriver import time from selenium.webdriver.common.by import By def implicitly_method(): driver = webdriver.Edge() url = 'https://www.cnblogs.com/' driver.get(url) driver.implicitly_wait(2) driver.find_element(By.LINK_TEXT,"Oracle与MySQL的差异和对比").click() time.sleep(3) if __name__ == '__main__': implicitly_method()
显式等待
from selenium import webdriver import time from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC def implicitly_method(): driver = webdriver.Edge() url = 'https://www.cnblogs.com/' driver.get(url) WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.LINK_TEXT, "Oracle与MySQL的差异和对比"))) driver.find_element(By.LINK_TEXT,"Oracle与MySQL的差异和对比").click() time.sleep(3) if __name__ == '__main__': implicitly_method()标签:__,webdriver,Selenium,driver,import,等待,selenium From: https://www.cnblogs.com/qmm-1000/p/18097331