在使用Selenium WebDriver进行自动化测试时,等待是一个重要的概念,因为它可以确保Web元素在执行任何操作之前是可用的。Selenium提供了几种等待机制:
1. **显式等待**(Explicit Wait): 显式等待是指定某个条件,并且等待直到条件成立时才继续执行。在Python中,可以使用`WebDriverWait`类配合`expected_conditions`来实现显式等待。
~~~
pythonCopy codefrom 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.Chrome()
driver.get("http://example.com")
# 等待直到元素可见
element = WebDriverWait(driver, 10).until(
EC.visibility_of_element_located((By.ID, "myElementId"))
)
# 现在可以与元素交互
element.click()
~~~
2. **隐式等待**(Implicit Wait): 隐式等待是设置一个时间,WebDriver在这个时间内会不断地尝试查找元素。如果在设置的时间内找到了元素,它将继续执行;如果没有找到,它将抛出一个`NoSuchElementException`。
~~~
pythonCopy codefrom selenium import webdriver
driver = webdriver.Chrome()
driver.implicitly_wait(10) # 设置隐式等待为10秒
driver.get("http://example.com")
element = driver.find_element_by_id("myElementId")
element.click()
~~~
3. **无等待**(No Wait): 如果你确定页面已经加载完成,并且元素已经存在于DOM中,你可以不使用等待直接进行元素操作。但这通常不推荐,因为它可能导致`ElementNotVisibleException`或`NoSuchElementException`。
~~~
pythonCopy codefrom selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://example.com")
element = driver.find_element_by_id("myElementId")
element.click()
~~~
4. **自定义等待**(Custom Wait): 有时候,你可能需要等待某个复杂的条件或多个条件。在这种情况下,你可以编写自定义的等待逻辑。
~~~
pythonCopy codefrom selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("http://example.com")
# 自定义等待逻辑
while True:
try:
element = driver.find_element_by_id("myElementId")
if element.is_displayed():
break
except NoSuchElementException:
pass
time.sleep(1) # 等待1秒再次尝试
element.click()
~~~
显式等待是推荐的做法,因为它允许你为特定的元素指定等待条件,而隐式等待则是一个全局设置,可能会导致WebDriver不必要地等待。在实际应用中,应该根据具体情况选择最合适的等待策略。
- 前言
- 1.入门篇
- Python介绍
- 安装与使用
- Python开发利器之VS Code
- 模块安装
- 命令行
- 一次Python无法安装模块的问题探索与解决之旅
- 命令运行
- Conda
- 下载地址
- 2.基础篇
- 基础语法
- 输入与输出
- with as的用法
- 注释
- Python命令行参数
- 编码
- 变量类型
- 列表遍历
- 运算符
- 表达式语句
- 条件
- 循环
- 日期和时间
- 函数
- 高级语法
- @符号-装饰器
- 模块和包
- name
- init.py
- 错误和异常
- 面向对象
- 3.专题篇
- 常用功能
- Python 字符串连接
- python web
- Python CGI编程
- Python OAuth2
- 认证 Flask-HTTPAuth
- 常用命令
- 内置函数
- dir()
- print(f)
- 标准模块
- sys
- pickle-数据序列化
- os
- IO(输入输出)
- 键盘输入
- 文件读写
- 测试
- Python测试框架之pytest快速入门
- pytest-bdd快速示例和问题解决
- 基于pytest-bdd的项目目录结构和命名规范
- python BDD 的相关概念
- Behave介绍和快速示例
- Python BDD之Behave测试报告
- Python BDD 框架比较之 pytest-bdd vs behave
- pytest进阶
- Flask + pytest测试
- 参考网址
- pytest-bdd进阶
- hehave进阶
- 测试路径
- python + selunium
- HTML 根据多层CSS 查找元素
- 等待执行
- 使用text 查找 span
- pytest如何在控制台输出
- 4.问题篇
- pip pip3 及区别
- TypeError: can only concatenate str (not "NoneType") to str
- 5.实战篇
- matplotlib-绘图包
- 导入类
- 命名规范
- 模块查找
- 6.进阶篇
- Flask
- Flask介绍
- Flask扩展模块
- Flask-Login
- 问题
- Jinja2
- Flask-RESTful
- Flask-JWT-Extended
- WSGI
- Flask-SQLAlchemy
- 部署
- Flask VS Django
- Flask Web
- Flask + Vue
- Flask实战
- Flask 标准目录结构
- Blueprints
- 参考
- FastAPI 测试
- https 证书 Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate