更新导入以使用 BiDi Java
这篇博文讨论了 Java BiDi 实现中破坏性更改背后的基本原理以及用户必须进行的更改。
分类
代码库的哪个部分受到影响?
Java 绑定中的 Selenium WebDriver BiDi API 受到了影响。
破坏性更改会影响什么?
WebDriver BiDi API 保持不变,因此您可以继续使用它们。但是,需要更新 import 语句。
什么是破坏性更改?
使用 BiDi API 时,需要更新 import 语句。
Selenium 4.19 之前
import org.openqa.selenium.bidi.LogInspector;
import org.openqa.selenium.bidi.BrowsingContextInspector;
import org.openqa.selenium.bidi.Input;
import org.openqa.selenium.bidi.Script;
import org.openqa.selenium.bidi.Network;
Selenium 4.19 及之后
import org.openqa.selenium.bidi.module.LogInspector;
import org.openqa.selenium.bidi.module.BrowsingContextInspector;
import org.openqa.selenium.bidi.module.Input;
import org.openqa.selenium.bidi.module.Script;
import org.openqa.selenium.bidi.module.Network;
为什么要进行破坏性更改?
Selenium 正在积极致力于实现 W3C BiDi。W3C BiDi 的长期目标是将所有 W3C WebDriver Classic API 移植为在底层使用 WebDriver BiDi API。当引入 browsingContext.locateNodes 命令(它是 findElements 命令的 BiDi 对应项)时,主要目标是确保 'locateNodes' 命令返回一个 WebElement。这将使未来的移植更加顺畅,并允许用户继续调用 WebElement 的 API。
在实现过程中,在底层构建工具 Bazel 中遇到了循环依赖。解决此问题的方案是遵循 Bazel 的最佳实践。
因此,模块的 W3C BiDi 相关类被分组到 Bazel 包中。自身调用命令或事件的类都被分组到一个名为“module”的包中。因此,遵循推荐的做法并避免 Bazel 的循环依赖被证明是一个双赢的解决方案。
总结
W3C BiDi 协议正在开发中,同时浏览器和客户端也在努力添加补充 API。在 Selenium 致力于实现它的同时,协议也在不断变化,添加新的模块或 API,或者更新现有的模块或 API。虽然团队努力避免破坏性更改,并在删除 API 之前至少弃用 2 个版本,但对于某些更改(例如本博文中描述的更改),很难坚持这样做。