[功能]: Java 测试 ExpectedFailure 注解
作者: titusfortner创建于 2026年5月8日更新于 2026年9月14日
标签C-javaI-enhancement
说明
Java测试目前对已知的浏览器特定故障使用多种机制:
- @ Ignore 跳过浏览器测试 。
- @ NotYetImpenmented 行为像 xfail:匹配失败是允许的,但测试一旦出乎意料地通过就失败了.
- 假设(.)通常用于内部测试或设置代码,以守卫浏览器版本、平台或能力可用性。
假设That(.)模式用于跳过不支持的组合,例如DevTools测试中的Firefox版本守护符,但它不会给出与DevTools相同的清理信号. @NotYetImpenmented. (英语). 如果被守护的浏览器/版本/平台开始工作,测试仍然被跳过而不是失败并被催取出守护.
提议: 添加一个通用可重复的@ ExpectedFailure 注释, 支持浏览器, 浏览器版本, 平台, 理由, 以及问题引用 :
@ 预期失败( E) 浏览器 = {CHROME}, 平台 = {Platform.MAC}, minVersion = "149", (中文(简体) ). 最大维度="149", 理由="BiDi网络响应事件缺失请求正文",. : https://issues.chromium.org/.) 互联网档案馆的存檔,存档日期2013-12-22. (中文(简体) ).
这将保持xfail语义:
- 如果注解匹配,测试失败,按预期处理。
- 如果注解符合 和测试通过, 失败测试 所以注解被删除。
- 如果注释不符,失败行为是正常的。
对于浏览器版本,被绑定的浏览器Bazel测试目标已经知道要运行什么. Java 测试设置可以将这个值暴露为 JVM 属性, 例如 selenium.browser.version,因此JUnit扩展可以评价测试执行前或测试执行期间所预期的版本范围失败.
你考虑过别的选择吗?
现有的替代办法都有取舍:
- 假设(.) 能够守护浏览器的版本、平台和能力, 但是它跳过测试, 并且不会在条件固定时提醒我们 。
- @ Ignore支持理性和发行,但也完全跳过测试.
- @NotYetImplemented给出了所期望的xfail/pass-now-fails行为,但只支持浏览器匹配,无法表达浏览器版本,平台,或发行.
- 手动尝试/捕捉预期失败的逻辑 内部测试可以工作, 但与集中 这种行为 在硒测试扩展。
扩展 @ NotYetImplemented 是可能的, 但更一般的 @ ExpectedFailure name 更好地描述浏览器错误, β回归, 特定平台的失败, 而不是 - yet - 已经实施的行为.
内容来源: SeleniumHQ/selenium