https://www.selenium.dev/downloads/
https://www.selenium.dev/documentation/
本文中主要介紹 Selenium 4 中對核心組件所做的改進以及它引入的新功能。
Selenium4版本歷程
- 2019 年 5 月發布初始 alpha 版本(4.0.0.alpha1)
- 2021 年 6 月發布beta版本(4.0.0.beta4)
- 官方穩定版Selenium 4 版本尚未公布
Selenium4安裝:
Python版
pip install selenium==4.0.0.b4
Java-Maven版
<dependencies>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<!--Selenium 4 Driver-->
<version>4.0.0-beta-4</version>
</dependency>
</dependencies>
核心組件的改進
Selenium 4 WebDriver 改進
-
WebDriver 的主要變化是 WebDriver API 已完全符合 W3C。這種標准化使 WebDriver 能夠直接與目標瀏覽器通信。
-
WebDriver 的 W3C 標准化導致 JSON Wire Protocol協議貶值。不過它不會影響現有用戶。
Selenium 4 IDE 改進
Selenium IDE 用於錄制功能,錄制用戶行為來構建測試用例和腳本。
IDE 的改進特性如下:
- 控制流改進允許用戶在測試用例中合並條件語句和循環。
- 改進了代碼導出功能。可以根據所選語言導出代碼塊
- 改進了元素定位功能。IDE 現在能夠在網頁中定位難以找到的元素
Selenium Grid改進
-
Selenium Grid 使用戶能夠使用集線器和節點模型在各種瀏覽器和設備上並行運行測試。在 Selenium 4 中,Grid通過 Docker 支持和輕松部署在 Kubernetes 集群上的能力得到了改進。這種容器化方法允許用戶輕松地將測試工作負載與多個容器一起分發,而無需依賴物理或虛擬機。
-
Selenium 4 Grid 將提供三種部署方法:
- 獨立
- 集線器和節點方法
- 容器化方法
Selenium 4 中的功能改進
W3C標准化
-
Selenium WebDriver 采用標准化的 W3C 協議與瀏覽器進行通信。由於 Chrome 和 firefox 等主要瀏覽器驅動程序已經遵循 W3C 標准,因此將 W3C 作為默認協議使 Selenium 能夠直接與瀏覽器通信。
-
W3C 協議成為 Selenium 4 中的默認協議,JSON Wire Protocol將被棄用,對 Opera 和 PhantomJS 的本機支持將被刪除。由於 Opera 瀏覽器現在基於 Chromium,因此想要在 Opera 上測試其實現的用戶可以使用 chromedriver。此外,PhantomJS 用戶可以在無頭的 FireFox 或 Chrome 上進行測試,作為 PhantomJS 的替代方案。
更新的操作 API
Selenium 4 更新了 Actions 類 (API),它模擬鼠標、鍵盤的用戶輸入,例如單擊、雙擊等。以下是 Actions 類新引入的方法列表。
-
click(WebElement)
- 單擊特定的 Web 元素,它將替換 moveToElement(onElement).click()
-
clickAndHolde(WebElement)
- 單擊元素並保持單擊而不釋放。此方法將替換 moveToElement(onElement).clickAndHold()
-
contextClick(WebElement)
- 右鍵單擊操作的默認方法並替換 moveToElement(onElement).contextClick()
-
doubleClick(WebElement)
- 對元素執行雙擊操作並替換 moveToElement(element).doubleClick() 方法
-
release()
- 在當前光標位置釋放鼠標左鍵單擊。隨着 Selenium 的更新版本,它已從 org.openqa.selenium.interactions.ButtonReleaseAction 類移至主要 Actions 類。
相對定位器
Selenium 4 引入了一種使用相對定位器在頁面上定位 Web 元素的便捷方法。可以使用友好名稱來調用這些相對定位器,例如:
- to left of(在...左邊)
- to right of(在...右邊)
- above(在...上面)
- below(在...下面)
- near(附近)
允許用戶根據網頁元素相對於其他元素的視覺位置來定位網頁元素。舉個簡單的例子,如果一個表單中有兩個按鈕(提交和取消)彼此靠近,我們可以簡單地調用“To right of”方法來定位另一個按鈕
submitButton = driver.find_element(By.ID, "submit")
cancelButton = driver.find_element(with_tag_name("button").
to_right_of(submitButton))
多窗口和標簽管理
Selenium 4 的“newWindow”方法允許用戶簡單地創建新窗口或在選項卡之間切換,而無需創建單獨的 WebDriver 對象並使用 WindowHandle 方法執行切換操作。
例子
打開一個新標簽
driver.switch_to.new_window( 'tab' )
打開一個新窗口
driver.switch_to.new_window( 'window' )
Chrome 開發工具協議
Selenium 4 為Chrome DevTools 協議提供原生支持,允許用戶利用原生 Chrome 開發工具和屬性,如分析器、網絡監控、緩存等。
這些原生集成使用戶能夠使用 DevTools API 執行各種任務,例如網絡性能模擬和地理定位測試,同時快速解決任何錯誤。
示例 - 地理定位仿真
from selenium import webdriver
from selenium.webdriver.chrome.service import Service`
def geo_location_test (): `
driver = webdriver.Chrome(executable_path=G:\\chromedriver\\chromedriver.exe' )
# 創建地理位置
map_coordinates = dict({
" latitude" : 38.134557 ,
"longitude" : - 122.709826 ,
"accuracy" : 100
})
# 模擬位置
driver.execute_cdp_cmd( "Emulation.setGeolocationOverride" , map_coordinates)
# 導航到網站
driver.get( "https://www.google.com" )
用選項替換所需的功能
在 Selenium 4 中,用於定義測試環境(例如瀏覽器名稱、版本、操作系統)的 Desired Capabilities 被選項對象替換。
這些選項是特定於瀏覽器的,用戶必須創建一個具有測試環境要求的選項對象並將其傳遞給 WebDriver。下面的列表顯示了主要 Web 瀏覽器的選項對象。
Chrome – ChromeOptions
Microsoft Edge – EdgeOptions
Firefox – FirefoxOptions
Safari – SafariOptions
Internet Explorer (IE) – InternetExplorerOptions
示例 - Chrome 選項
from selenium.webdriver.chrome.options import Options
browser_options = Options()
browser_options.headless = True
driver = webdriver.Chrome(executable_path= 'G:\chromedriver\chromedriver.exe' ,options=browser_options)
改進的文檔
Selenium 4 的另一個可用性改進是增強的文檔。Selenium 4的官方文檔得到了改進,提供了清晰的解釋、各種語言的代碼片段以及易於訪問和搜索的文檔部分。
