Python自动化测试Selenium核心技术三种等待方式详解
前言
在进行Web自动化测试时,我们需要确保页面元素都已经加载完成,否则会影响后续操作。而网络环境、网页渲染速度或网站性能等问题可能导致页面加载速度不一,这就需要测试工程师使用等待机制解决这一问题。
在Selenium中,等待机制有3种方式:隐式等待、显式等待和强制等待。
一、隐式等待
在执行脚本时,对于那些需要加载的页面元素,如果定该元素无法立即被发现,隐式等待会等待一个固定的时间,直到元素被发现或者超时。这个等待时间是全局设置,也就是说等待时间对整个WebDriver的生命周期都有效。
如何设置隐式等待时间
你可以使用implicitly_wait()
函数设置隐式等待时间。例如:
from selenium import webdriver
driver = webdriver.Chrome()
driver.implicitly_wait(10) # 设置全局等待时间为10秒
隐式等待应用示例
以下示例演示了隐式等待的应用。我们在使用Chrome浏览器打开“百度”页面后,等待10秒钟来定位页面上的“新闻”链接,并单击链接。
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get("https://www.baidu.com")
news_link = driver.find_element(By.LINK_TEXT, "新闻")
news_link.click()
二、显式等待
使用隐式等待时,WebDriver会等待固定的时间,而显式等待则会等待一个特定的条件发生后再继续执行下一步操作。
显式等待通常是针对某个特定元素等待,而不是一个全局等待时间,实现有针对性,且更精确。
如何使用显式等待
前置条件:需要导入ExpectedCondition
类以及expected_conditions
模块。例如:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
示例代码:
locator = (By.ID, "myDynamicElement")
WebDriverWait(driver, 30).until(EC.presence_of_element_located(locator))
在上述代码中,使用presence_of_element_located
来确定元素是否已经存在,如果存在就继续执行后续操作,否则继续等待。
显式等待应用示例
以下示例中,我们在使用Chrome浏览器打开“百度”页面后,采用显式等待来定位页面上的“新闻”链接,并单击链接。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
locator = (By.LINK_TEXT, "新闻")
WebDriverWait(driver, 10).until(EC.element_to_be_clickable(locator))
element = driver.find_element(*locator)
element.click()
在上述代码中,我们使用了显式等待机制来等待“新闻”链接加载完成后再继续后续操作。
三、强制等待
在一些场景下,我们需要等待一定的时间来确保页面或元素加载完成。此时,我们可以使用强制等待,来等待指定的时间直到条件满足。
如何使用强制等待
使用Python time
库可以实现强制等待。例如:
import time
time.sleep(5) # 等待5秒钟
强制等待的应用示例
以下示例中,我们在使用Chrome浏览器打开“百度”页面后,等待5秒钟后定位页面上的“新闻”链接,并单击链接。
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
time.sleep(5) # 强制等待5秒钟
news_link = driver.find_element(By.LINK_TEXT, "新闻")
news_link.click()
在上述代码中,我们使用了强制等待机制来等待5秒钟后再执行后续操作。
结论
以上就是Python自动化测试Selenium核心技术三种等待方式的详细介绍。在实际测试中,合理使用各种等待方式可以最大程度减少测试失败的情况,提高脚本的健壮性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python自动化测试selenium核心技术三种等待方式详解 - Python技术站