#17428·selenium

[功能]: 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