在 Selenium 4.5.0 及更高版本中使用 Java 11+ HTTP 客户端
分类
Selenium 中使用的当前 HTTP 客户端
Selenium 使用 HTTP 客户端和关联的 WebSocket 客户端来实现多种用途
- 向 WebDriver 发送命令
- 将命令从 Selenium 客户端库发送到 Grid
- 根据 Grid 模式,各种 Grid 组件相互通信
- 创建 ChromeDevTools 协议和 BiDi 协议会话
目前,Selenium 使用 AsyncHttpClient。AsyncHttpClient 是一个基于 Netty 构建的开源库。它允许异步执行 HTTP 请求和响应。此外,它还提供 WebSocket 支持。因此,它非常适合。
为什么 Selenium 要迁移到 Java 11+ HTTP 客户端?
虽然 AsyncHttpClient 提供了所需的功能,但自 2021 年 6 月以来,该开源项目并未得到积极维护。这与 Java 11+ 提供内置的 HTTP 和 WebSocket 客户端这一事实相吻合。Selenium 可以利用它来替换 AsyncHttpClient。
目前,Selenium Java 支持 Java 8。Selenium 计划将支持的最低版本升级到 Java 11。然而,这是一项相当大的工作。将其与主要版本和随附的公告保持一致对于确保用户体验完好无损至关重要。
Selenium 服务器在 Java 11+ 上已经运行良好,因此虽然我们计划在未来的版本中将其作为最低版本,但目前我们计划引入可选组件,以便利用现代 Java 版本。
因此,作为迈向此举的第一步,Selenium 4.5.0 及更高版本中提供了 Java 11+ HTTP 客户端。
注意!
如果您使用的是 Selenium 4.14 或更高版本,则默认使用 Java 11 HTTP 客户端。您无需对设置进行任何更改。请随意跳过以下部分。在 Selenium 中使用 Java 11+ HTTP 客户端
先决条件
- 配置为使用 Java 11+ 的项目
- 使用 Selenium 4.5.0 作为最低版本,在下载页面中查找最新版本。
集成 Java 11+ 客户端
Java 11+ HTTP 客户端位于其自己的工件中。它可以导入到使用 Java 11+ 的项目中。
将工件添加到 POM
将以下依赖项添加到您的 pom.xml
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.5.0</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-http-jdk-client</artifactId>
<version>4.5.0</version>
</dependency>
注意:在上面的依赖项中,显示的版本为 4.5.0
,但我们建议您查看下载页面以使用发布的最新版本。确保使用的版本匹配。
设置系统属性
设置系统属性以指示需要使用 Java 11+ Http 客户端。默认情况下,它使用 AsyncHttpClient。
System.setProperty("webdriver.http.factory", "jdk-http-client");
您已完成利用新支持的客户端的设置。用户体验保持不变。其他一切都按预期工作。
在 Grid 中使用 Java 11+ 客户端
为此,您需要下载 selenium-http-jdk-client
jar 文件,并使用 --ext
标志使其在 Grid jar 的类路径中可用。
jar 文件可以直接从 repo1.maven.org 下载,然后按以下方式启动 Grid
java -Dwebdriver.http.factory=jdk-http-client -jar selenium-server-4.5.0.jar -—ext selenium-http-jdk-client-4.5.0.jar standalone
下载 selenium-http-jdk-client
jar 文件的另一种方法是使用 Coursier。
java -Dwebdriver.http.factory=jdk-http-client -jar selenium-server-4.5.0.jar —-ext $(coursier fetch -p org.seleniumhq.selenium:selenium-http-jdk-client:4.5.0) standalone
如果您使用的是 Hub/Node(s) 模式或分布式模式,则需要为每个组件设置 -Dwebdriver.http.factory=jdk-http-client
和 —-ext
标志。
注意:在上面的依赖项中,显示的版本为 4.5.0
,但我们建议您查看下载页面以使用发布的最新版本。确保使用的版本匹配。
非常感谢 Simon Stewart (@shs96c) 通过他的贡献使这一切成为可能!