一、初识
WebDriverWait
是Selenium中的一个等待类,它提供了一种方法,可以让Selenium在特定条件成立之前等待一段时间。在自动化测试中,等待是非常重要的,因为如果代码过于迅速地运行,可能会导致页面未完全加载,从而导致测试失败。
WebDriverWait
可以帮助我们解决这个问题,让测试更加可靠。
WebDriverWait
的基本用法是在实例化时指定一个WebDriver实例和等待的最长时间(以秒为单位),然后使用该实例的
until()
方法并提供一个期望条件。如果该条件在等待时间内成立,则
until()
方法将立即返回,否则将引发超时异常。
期望条件可以是多种类型的,例如:
presence_of_element_located(locator)
:等待元素出现在DOM中,例如By.ID
、By.NAME
等visibility_of_element_located(locator)
:等待元素在页面中可见,即它不仅存在于DOM中,而且还在视觉上可见。element_to_be_clickable(locator)
:等待元素可以被点击。text_to_be_present_in_element(locator, text)
:等待元素中包含特定的文本。
二、示例
以下是
WebDriverWait
的一个示例用法,等待页面上的一个元素出现:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
# 创建WebDriver实例
driver = webdriver.Chrome()
# 导航到页面
driver.get("https://example.com")
# 创建WebDriverWait实例
wait = WebDriverWait(driver, 10)
# 等待元素出现
element = wait.until(EC.presence_of_element_located((By.ID, 'my-element')))
# 在元素上执行操作
element.click()
# 关闭浏览器
driver.quit()
在这个例子中,
WebDriverWait
将等待最长10秒钟,直到id为'my-element'的元素出现。如果在10秒钟内该元素未出现,
WebDriverWait
将引发超时异常。一旦该元素出现,
WebDriverWait
将立即返回,并将元素对象返回给变量
element
,以便在之后执行操作。
三、登录页面验证码测试
1.步骤
(1)使用Selenium启动一个浏览器,导航到登录页面。
from selenium import webdriver
# 创建WebDriver实例
driver = webdriver.Chrome()
# 导航到登录页面
driver.get("https://example.com/login")
(2)使用Selenium找到验证码输入框和提交按钮,并向其发送正确的验证码和其他必要的登录信息。
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 等待验证码输入框和提交按钮出现
wait = WebDriverWait(driver, 10)
captcha_input = wait.until(EC.presence_of_element_located((By.ID, 'captcha')))
submit_button = wait.until(EC.presence_of_element_located((By.ID, 'submit')))
# 发送验证码和其他登录信息
captcha_input.send_keys("1234")
username_input = driver.find_element_by_id("username")
password_input = driver.find_element_by_id("password")
username_input.send_keys("myusername")
password_input.send_keys("mypassword")
submit_button.click()
(3)如果验证码不正确,Selenium会在提交表单后获取错误消息。
# 等待错误消息出现
error_message = wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'error-message')))
# 确认错误消息是否包含"验证码错误"的文本
assert "验证码错误" in error_message.text
2.完整代码:
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
# 创建WebDriver实例
driver = webdriver.Chrome()
# 导航到登录页面
driver.get("https://example.com/login")
# 等待验证码输入框和提交按钮出现
wait = WebDriverWait(driver, 10)
captcha_input = wait.until(EC.presence_of_element_located((By.ID, 'captcha')))
submit_button = wait.until(EC.presence_of_element_located((By.ID, 'submit')))
# 发送验证码和其他登录信息
captcha_input.send_keys("1234")
username_input = driver.find_element_by_id("username")
password_input = driver.find_element_by_id("password")
username_input.send_keys("myusername")
password_input.send_keys("mypassword")
submit_button.click()
# 等待错误消息出现
error_message = wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'error-message')))
# 确认错误消息是否包含"验证码错误"的文本
assert "验证码错误" in error_message.text
# 关闭浏览器
driver.quit()
版权归原作者 大大Cameo 所有, 如有侵权,请联系我们删除。