在 Selenium 4.5.0 及更高版本中使用 Java 11+ HTTP Client
分類
Selenium 中目前使用的 HTTP client
Selenium 使用 HTTP client 和相關的 WebSocket client 來達成多種目的
- 將指令傳送至 WebDriver
- 將指令從 Selenium client 程式庫傳送至 Grid
- 用於各種 Grid 組件彼此通訊,具體取決於 Grid 模式
- 建立 ChromeDevTools 協議和 BiDi 協議會話
目前,Selenium 使用 AsyncHttpClient。AsyncHttpClient 是一個建立在 Netty 之上的開源程式庫。它允許非同步執行 HTTP 請求和回應。此外,它還提供 WebSocket 支援。因此它是非常適合的。
為何 Selenium 想要移至 Java 11+ HTTP Client?
雖然 AsyncHttpClient 提供了所需的功能,但自 2021 年 6 月以來,這個開源專案就沒有積極維護了。這與 Java 11+ 提供內建 HTTP 和 WebSocket client 的事實不謀而合。Selenium 可以利用它來取代 AsyncHttpClient。
目前,Selenium Java 支援 Java 8。Selenium 計劃將支援的最低版本升級到 Java 11。然而,這是一項龐大的工程。將其與主要版本發布和隨附公告對齊,對於確保使用者體驗完整至關重要。
Selenium 伺服器在 Java 11+ 上已經運行良好,因此雖然我們計劃在未來的版本中將其設為最低版本,但目前我們計劃引入可利用現代 Java 版本的可選組件。
因此,作為朝此方向邁出的第一步,從 Selenium 4.5.0 及更高版本開始提供 Java 11+ HTTP client。
注意!
如果您使用的是 Selenium 4.14 或更高版本,則預設會使用 Java 11 HTTP client。您無需對設定進行任何變更。請隨意跳過以下章節。在 Selenium 中使用 Java 11+ HTTP Client
先決條件
- 專案已設定為使用 Java 11+
- 使用 Selenium 4.5.0 作為最低版本,在下載頁面中找到最新版本。
整合 Java 11+ client
Java 11+ HTTP client 位於其自身的 artifact 中。它可以導入到使用 Java 11+ 的專案中。
將 artifact 新增至 POM
將以下 dependencies 新增至您的 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>
注意:在上面的 dependencies 中,版本 4.5.0 已顯示,但是我們建議您查看下載頁面以使用最新發布的版本。請確保使用的版本是相符的。
設定系統屬性
設定系統屬性以指示需要使用 Java 11+ Http client。預設情況下,它使用 AsyncHttpClient。
System.setProperty("webdriver.http.factory", "jdk-http-client");
您已完成所有設定,可以利用新支援的 client。使用者體驗保持不變。其他一切都如預期般運作。
在 Grid 中使用 Java 11+ client
為此,您需要下載 selenium-http-jdk-client jar 檔案,並使用 --ext 標記使其在 Grid jar 的 classpath 中可用。
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) 模式或 Distributed 模式,則需要為每個組件設定 -Dwebdriver.http.factory=jdk-http-client 和 —-ext 標記。
注意:在上面的 dependencies 中,版本 4.5.0 已顯示,但是我們建議您查看下載頁面以使用最新發布的版本。請確保使用的版本是相符的。
非常感謝 Simon Stewart (@shs96c) 透過他的貢獻使這一切成為可能!




