WebDriver 功能
WebDriver 功能 用於溝通會話所支援的特性。客戶端也可以使用功能來定義在建立新會話時,它要求驅動滿足哪些特性。
當建立一個 WebDriver 會話時,它會返回一組描述會話協商後的有效功能的集合。此集合中的一些功能是標準化的,並且在所有瀏覽器之間共享,但該集合也可能包含瀏覽器特定的功能,並且這些始終帶有字首。
功能協商
功能可用於要求支援特定功能子集的驅動。這可用於要求某些瀏覽器功能,例如調整視窗尺寸的能力,但也用於分散式環境中從多種選擇中選擇特定的瀏覽器配置。
選擇特定的 Web 瀏覽器或平臺僅在使用遠端 WebDriver 時才有意義。在這種情況下,客戶端透過一個或多箇中間節點與 WebDriver 聯絡,這些節點會根據收到的功能協商要返回給您的驅動。
功能物件是一種選擇機制,可限制伺服器將返回的驅動程式的配置。如果您使用 browserName 請求 Firefox 例項,而在遠端計算機上未安裝 Firefox,或者在僅支援 Linux 的遠端計算機上請求 macOS,則您可能運氣不佳。但有時您可能不在乎您的會話使用哪個特定的作業系統或 Web 瀏覽器:您只想要一個具有某種功能的會話。
選擇過程,或功能協商,透過 alwaysMatch 和 firstMatch 進行。
alwaysMatch
顧名思義,alwaysMatch 功能物件中描述的功能是您要求會話必須具備的。如果伺服器無法提供您要求的功能,則會失敗。
例如,如果您請求安裝了 60 版本的系統上的 Firefox 62 版本,則會話建立將失敗。
{
"capabilities": {
"alwaysMatch": {
"browserName": "firefox",
"browserVersion": "60"
}
}
}
firstMatch
firstMatch 欄位接受一個功能物件陣列,這些物件將按順序匹配,直到其中一個與伺服器可提供的內容匹配,否則將失敗。
這在您想要一個在 macOS 或 Linux 上執行的驅動程式,但不是 Windows 時很有用。
{
"capabilities": {
"firstMatch": [{ "platformName": "macos" }, { "platformName": "linux" }]
}
}
組合 alwaysMatch 和 firstMatch
當然,firstMatch 可以與 alwaysMatch 結合使用以縮小選擇範圍。例如,如果您需要一個在 macOS 或 Linux 上執行的驅動程式,但它必須是 Firefox。
{
"capabilities": {
"alwaysMatch": {
"browserName": "firefox"
},
"firstMatch": [{ "platformName": "macos" }, { "platformName": "linux" }]
}
}
前面的示例與將 Firefox 的要求放入每個 firstMatch 分支完全等效。
{
"capabilities": {
"firstMatch": [
{ "browserName": "firefox", "platformName": "macos" },
{ "browserName": "firefox", "platformName": "linux" }
]
}
}
您選擇前面兩個示例中的哪一個並不重要,但傳遞瀏覽器配置時可能會很重要。為避免不必要地重複資料,例如配置檔案,建議使用 alwaysMatch,這樣資料就只需要透過網路傳輸一次。
{
"capabilities": {
"alwaysMatch": {
"browserName": "firefox",
"moz:firefoxOptions": {
"profile": "<base64 encoded profile>",
"args": ["-headless"],
"prefs": { "dom.ipc.processCount": 8 },
"log": { "level": "trace" }
}
},
"firstMatch": [{ "platformName": "macos" }, { "platformName": "linux" }]
}
}
功能列表
browserNamebrowserVersionplatformNameacceptInsecureCerts: 此功能用於通訊在導航時是否檢查過期或無效的 TLS 證書。如果功能為 false,則在導航遇到證書問題域時將返回不安全證書錯誤。否則,在導航時,自簽名或其他無效的證書將被瀏覽器隱式信任。此功能在會話生命週期內有效。pageLoadStrategyproxysetWindowRecttimeoutsunhandledPromptBehaviorwebSocketUrl
供應商特定的功能
除了標準功能之外,WebDriver 還允許第三方擴充套件功能集以滿足他們的需求。瀏覽器供應商和驅動程式供應商通常使用擴充套件功能來為瀏覽器提供配置,但中介軟體也可以使用它們來傳遞任意資料塊。
- Firefox 功能 (
moz:firefoxOptions) - Chrome 功能 (
goog:chromeOptions)
舊版功能
大多數 Selenium 客戶端使用 desiredCapabilities 和 requiredCapabilities 來配置新會話。這些與上面描述的 firstMatch 和 alwaysMatch 非常相似。一些驅動程式支援這些舊版功能,但它們已被棄用,應避免使用。
將舊版功能物件轉換為新樣式很容易。您首先需要知道的是,alwaysMatch/firstMatch總是包裝在 capabilities JSON 物件內,而 desiredCapabilities/requiredCapabilities 存在於頂層。總的來說,以前放在 desiredCapabilities 中的任何內容都應該放在 firstMatch 分支臂中,以達到相同的效果。
以這個已棄用的功能物件為例
{ "desiredCapabilities": { "browserName": "firefox" } }
在新樣式中,這將是功能上等效的。
{ "capabilities": { "firstMatch": [{ "browserName": "firefox" }] } }
但是,因為只有一個 firstMatch 分支,並且我們知道如果伺服器沒有安裝 Firefox,會話建立將失敗,所以它也等同於這個:
{ "capabilities": { "alwaysMatch": { "browserName": "firefox" } } }