Selene 条件匹配器大全:掌握 Python 中所有可用的断言方法
Selene 条件匹配器大全:掌握 Python 中所有可用的断言方法
【免费下载链接】seleneUser-oriented Web UI browser tests in Python项目地址: https://gitcode.com/gh_mirrors/sel/selene
在 Python 自动化测试领域,Selene 以其简洁优雅的 API 和强大的条件匹配能力脱颖而出。作为一款面向用户的 Web UI 浏览器测试框架,Selene 提供了丰富的条件匹配器(Condition),帮助开发者编写可读性强、维护性高的断言逻辑。本文将系统梳理 Selene 中所有可用的断言方法,从基础到进阶,助你轻松掌握 UI 测试的断言技巧。
核心条件匹配器架构
Selene 的条件匹配器体系基于Condition基类构建,位于 selene/core/condition.py。该架构支持三种主要实体的断言:
- ElementCondition:针对单个元素的条件判断
- CollectionCondition:针对元素集合的条件判断
- BrowserCondition:针对浏览器状态的条件判断
所有条件匹配器遵循一致的调用风格,通常以should方法串联,例如:
browser.element('#username').should(have.text('John Doe'))
图:Selene 条件匹配器在 IDE 中的自动补全提示,提升开发效率
元素状态断言(be 模块)
be模块提供元素基本状态的断言方法,位于 selene/support/conditions/be.py。常用方法包括:
可见性断言
be.visible:元素可见be.hidden:元素隐藏
交互状态断言
be.enabled:元素可交互be.disabled:元素不可交互be.clickable:元素可点击
选择状态断言
be.selected:单选/复选框被选中be.deselected:单选/复选框未选中
存在性断言
be.present:元素存在于 DOMbe.absent:元素从 DOM 中移除
元素属性断言(have 模块)
have模块提供元素属性和内容的断言方法,位于 selene/support/conditions/have.py。核心功能分为:
文本内容断言
have.text('部分文本'):包含指定文本have.exact_text('完整文本'):精确匹配文本have.text_matching(r'\d+'):文本匹配正则表达式
图:在 TodoMVC 应用中使用浏览器开发者工具检查元素文本,辅助编写断言
属性与样式断言
have.attribute('href', 'https://example.com'):元素具有指定属性及值have.css_property('color', 'rgb(255, 0, 0)'):元素具有指定 CSS 样式have.value('admin@example.com'):表单元素具有指定值have.css_class('active'):元素具有指定 CSS 类
集合数量断言
have.size(5):集合包含指定数量元素have.size_greater_than(3):集合元素数量大于指定值have.size_less_than_or_equal(10):集合元素数量小于等于指定值
否定断言(not_ 模块)
not_模块提供所有断言的否定形式,位于 selene/support/conditions/not_.py。使用方式简单直观:
# 元素不包含指定文本 element.should(not_.have.text('Error')) # 元素不可见 element.should(not_.be.visible) # 集合元素数量不等于5 elements.should(not_.have.size(5))浏览器状态断言
针对浏览器全局状态的断言方法同样丰富:
URL 断言
have.url('https://example.com'):精确匹配 URLhave.url_containing('example'):URL 包含指定片段
标题断言
have.title('首页 - 示例网站'):精确匹配页面标题have.title_containing('示例'):标题包含指定文本
标签页断言
have.tabs_number(2):浏览器打开指定数量标签页have.tabs_number_greater_than(1):标签页数量大于指定值
高级条件组合
Selene 支持通过逻辑运算符组合多个条件,实现复杂断言逻辑:
# 元素可见且包含指定文本 element.should(be.visible.and_(have.text('Success'))) # 元素不可见或包含错误文本 element.should(be.hidden.or_(have.text('Error')))对于更复杂的场景,可通过Condition类自定义断言:
from selene.core.condition import Condition def have_custom_property(value): return Condition( f'have custom property "{value}"', lambda element: element.get_property('custom') == value ) element.should(have_custom_property('special'))最佳实践与常见问题
断言等待机制
Selene 条件匹配器内置智能等待机制,默认等待时间可通过配置调整:
from selene import config config.timeout = 10 # 设置全局超时为10秒避免常见陷阱
- 区分
have.text与have.exact_text的使用场景 - 集合断言前确保元素已加载
- 复杂断言拆分多个简单断言,提高可读性
图:在 PyCharm 中运行 Selene 测试,条件匹配器会自动等待元素满足断言条件
总结
Selene 提供了全面的条件匹配器体系,从基础的元素状态检查到复杂的自定义断言,覆盖了 Web UI 测试的各种场景。掌握这些断言方法,能够帮助你编写更健壮、更易维护的自动化测试代码。建议结合官方文档 docs/reference/condition.md 深入学习,探索更多高级用法。
通过本文介绍的条件匹配器,你可以构建出既强大又优雅的断言逻辑,让 Python 自动化测试变得更加高效和愉悦。无论是新手还是有经验的测试工程师,Selene 的条件匹配器都将成为你测试工具箱中不可或缺的重要组件。
【免费下载链接】seleneUser-oriented Web UI browser tests in Python项目地址: https://gitcode.com/gh_mirrors/sel/selene
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
