博客
关于我
selenium之WebDriverWait
阅读量:798 次
发布时间:2023-04-15

本文共 2277 字,大约阅读时间需要 7 分钟。

WebDriverWait简介与应用实例

在Selenium自动化测试中,等待机制至关重要。 WebDriverWait 是一个强大的工具,帮助开发者在特定条件满足之前等待指定的时间。这对于确保页面完全加载,避免因页面未完成而导致测试失败至关重要。

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):等待元素中包含特定文本。

登录页面验证码测试实例

  • 启动浏览器并导航到登录页面
  • from selenium import webdriverdriver = webdriver.Chrome()driver.get("https://example.com/login")
    1. 等待验证码输入框和提交按钮
    2. from selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECwait = 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')))
      1. 发送验证码并执行登录
      2. 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()
        1. 处理验证码错误
        2. error_message = wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'error-message')))assert "验证码错误" in error_message.text

          完整代码示例

          from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECdriver = 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.textdriver.quit()

          通过以上方法,你可以在Selenium自动化测试中,有效地处理页面加载状态,并确保验证码测试的准确性。

    转载地址:http://zzgfk.baihongyu.com/

    你可能感兴趣的文章
    MySQL8修改密码报错ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
    查看>>
    MySQL8修改密码的方法
    查看>>
    Mysql8在Centos上安装后忘记root密码如何重新设置
    查看>>
    Mysql8在Windows上离线安装时忘记root密码
    查看>>
    MySQL8找不到my.ini配置文件以及报sql_mode=only_full_group_by解决方案
    查看>>
    mysql8的安装与卸载
    查看>>
    MySQL8,体验不一样的安装方式!
    查看>>
    MySQL: Host '127.0.0.1' is not allowed to connect to this MySQL server
    查看>>
    Mysql: 对换(替换)两条记录的同一个字段值
    查看>>
    mysql:Can‘t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock‘解决方法
    查看>>
    MYSQL:基础——3N范式的表结构设计
    查看>>
    MYSQL:基础——触发器
    查看>>
    Mysql:连接报错“closing inbound before receiving peer‘s close_notify”
    查看>>
    mysqlbinlog报错unknown variable ‘default-character-set=utf8mb4‘
    查看>>
    mysqldump 参数--lock-tables浅析
    查看>>
    mysqldump 导出中文乱码
    查看>>
    mysqldump 导出数据库中每张表的前n条
    查看>>
    mysqldump: Got error: 1044: Access denied for user ‘xx’@’xx’ to database ‘xx’ when using LOCK TABLES
    查看>>
    Mysqldump参数大全(参数来源于mysql5.5.19源码)
    查看>>
    mysqldump备份时忽略某些表
    查看>>