0


selenium之WebDriverWait

一、初识

WebDriverWait

是Selenium中的一个等待类,它提供了一种方法,可以让Selenium在特定条件成立之前等待一段时间。在自动化测试中,等待是非常重要的,因为如果代码过于迅速地运行,可能会导致页面未完全加载,从而导致测试失败。

WebDriverWait

可以帮助我们解决这个问题,让测试更加可靠。

WebDriverWait

的基本用法是在实例化时指定一个WebDriver实例和等待的最长时间(以秒为单位),然后使用该实例的

until()

方法并提供一个期望条件。如果该条件在等待时间内成立,则

until()

方法将立即返回,否则将引发超时异常。

期望条件可以是多种类型的,例如:

  • presence_of_element_located(locator):等待元素出现在DOM中,例如By.IDBy.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()
标签: selenium python

本文转载自: https://blog.csdn.net/weixin_44686138/article/details/130068805
版权归原作者 大大Cameo 所有, 如有侵权,请联系我们删除。

“selenium之WebDriverWait”的评论:

还没有评论