欢迎访问宙启技术站
智能推送

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组件可以有效地等待页面加载、元素可见、元素可点击等,在自动化测试中提高测试的稳定性和可靠性。