python中selenium.webdriver.support.wait的使用技巧与实战案例
发布时间:2023-12-25 08:36:21
Selenium WebDriver是一种常用的自动化测试工具,它能够模拟用户在浏览器中的行为,实现自动化操作。wait是WebDriver的一个重要组件,用于等待页面加载完成或者元素可见、可点击等。在使用Selenium WebDriver时,合理使用wait可以提高测试的稳定性和可靠性。
在Python中,Selenium WebDriver的wait模块有三种主要的等待方式:
1. 隐式等待(Implicit Wait):在查找元素时,如果WebDriver没有立即找到需要的元素,将等待一段时间,默认的等待时间是0秒。其使用方式如下:
from selenium import webdriver driver = webdriver.Firefox() driver.implicitly_wait(10) # 设置隐式等待时间为10秒 # 在这里进行后续操作
2. 显式等待(Explicit Wait):在查找元素时,根据自定义的条件进行等待,如果等待超时则抛出TimeoutException异常。其使用方式如下:
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.Firefox()
driver.get("https://www.example.com")
# 创建一个显式等待对象,设置最长等待时间为10秒
wait = WebDriverWait(driver, 10)
# 等待页面中的元素出现
element = wait.until(EC.presence_of_element_located((By.ID, "element_id")))
# 在这里进行后续操作
3. Fluent Wait:在查找元素时,根据自定义的条件和最长等待时间进行等待。其使用方式如下:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support.ui import FluentWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
driver = webdriver.Firefox()
driver.get("https://www.example.com")
# 创建一个Fluent Wait对象,设置最长等待时间为10秒,每2秒进行一次检查
wait = FluentWait(driver, timeout=10, poll_frequency=2)
# 设置等待条件为页面标题包含"Example"
wait.until(EC.title_contains("Example"))
# 在这里进行后续操作
下面以一个实战案例来演示如何使用wait进行页面元素的等待:
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.Firefox()
driver.get("https://www.example.com")
# 创建一个显式等待对象,设置最长等待时间为10秒
wait = WebDriverWait(driver, 10)
# 等待页面中的某个元素出现
element = wait.until(EC.presence_of_element_located((By.ID, "element_id")))
# 输入搜索关键字
element.send_keys("selenium")
# 点击搜索按钮
search_button = wait.until(EC.element_to_be_clickable((By.ID, "search_button_id")))
search_button.click()
# 等待搜索结果出现
search_result = wait.until(EC.presence_of_element_located((By.ID, "search_result_id")))
# 在这里进行后续操作
在上面的案例中,我们首先通过显式等待的方式等待页面中的某个元素出现,然后进行后续的操作。然后,我们通过显式等待的方式等待搜索按钮变为可点击状态,点击按钮进行搜索。最后,我们通过显式等待的方式等待搜索结果出现,以确保页面加载完成。
总结来说,合理使用Selenium WebDriver中的wait组件可以有效地等待页面加载、元素可见、元素可点击等,在自动化测试中提高测试的稳定性和可靠性。
