功能

WebDriver **功能** 用於傳達由會話支援的功能。客戶端還可以使用功能來定義在建立新會話時需要驅動程式滿足的功能。

建立 WebDriver 會話時,它會返回一組功能,描述會話協商的有效功能。此集中包含的一些功能是所有瀏覽器之間共享的標準功能,但該集也可能包含特定於瀏覽器的功能,並且這些功能始終帶有字首。

功能協商

功能可用於要求支援某些功能子集的驅動程式。這可以用於要求某些瀏覽器功能,例如調整視窗尺寸的能力,但也用於分散式環境中從一組選項中選擇特定的瀏覽器配置。

僅當您使用遠端 WebDriver 時,選擇特定的 Web 瀏覽器或平臺才有意義。在這種情況下,客戶端透過一個或多箇中間節點與 WebDriver 建立聯絡,這些節點根據它接收的功能協商要返回給您的驅動程式。

功能物件是一種選擇機制,它限制了伺服器將返回的驅動程式配置。如果您使用browserName請求 Firefox 例項,而遠端伺服器上未安裝 Firefox,或者從僅支援 Linux 的遠端伺服器上請求 macOS,那麼您可能會遇到問題。但有時您可能並不關心您的會話具有哪個特定的作業系統或 Web 瀏覽器:您只需要一個具有某些功能的會話。

選擇過程或功能協商透過alwaysMatchfirstMatch完成。

alwaysMatch

顧名思義,alwaysMatch功能物件中描述的功能是您需要會話具有的功能。如果伺服器無法提供您所需的功能,它將失敗。

例如,如果您在僅安裝了版本 60 的系統上請求 Firefox 版本 62,則會話建立將失敗。

json
{
  "capabilities": {
    "alwaysMatch": {
      "browserName": "firefox",
      "browserVersion": "60"
    }
  }
}

firstMatch

firstMatch欄位接受功能物件陣列,這些物件將依次匹配,直到找到一個與伺服器可以提供的功能匹配,否則將失敗。

當您需要在 macOS 或 Linux 上執行的驅動程式,但不需要 Windows 時,這很有用。

json
{
  "capabilities": {
    "firstMatch": [{ "platformName": "macos" }, { "platformName": "linux" }]
  }
}

組合alwaysMatchfirstMatch

當然,firstMatch可以與alwaysMatch組合以縮小選擇範圍。例如,如果您需要在 macOS 或 Linux 上執行的驅動程式,但它必須是 Firefox。

json
{
  "capabilities": {
    "alwaysMatch": {
      "browserName": "firefox"
    },
    "firstMatch": [{ "platformName": "macos" }, { "platformName": "linux" }]
  }
}

前面的示例與在每個firstMatch分支中放置 Firefox 要求完全相同。

json
{
  "capabilities": {
    "firstMatch": [
      { "browserName": "firefox", "platformName": "macos" },
      { "browserName": "firefox", "platformName": "linux" }
    ]
  }
}

您選擇上述兩個示例中的哪一個並不重要,但在傳遞瀏覽器配置時可能會有影響。為了避免不必要地重複資料(如配置檔案),建議使用alwaysMatch,以便僅透過網路傳輸一次此資料。

json
{
  "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" }]
  }
}

功能列表

供應商特定功能

除了標準功能外,WebDriver 還允許第三方擴充套件功能集以滿足其需求。瀏覽器供應商和驅動程式供應商通常使用擴充套件功能為瀏覽器提供配置,但中間機構也可以將其用於任意資訊塊。

舊版功能

大多數 Selenium 客戶端使用desiredCapabilitiesrequiredCapabilities來配置新會話。這些與上面描述的firstMatchalwaysMatch非常相似。一些驅動程式支援這些舊版功能,但它們已棄用,應避免使用。

將舊版功能物件轉換為新樣式很容易。您需要了解的第一件事是alwaysMatch/firstMatch始終包裝在capabilitiesJSON 物件中,而desiredCapabilities/requiredCapabilities位於頂層。一般來說,以前放在desiredCapabilities中的任何內容都應放在firstMatch分支中以達到相同的效果。

採用此已棄用的功能物件

json
{ "desiredCapabilities": { "browserName": "firefox" } }

在新樣式中,這在功能上等效於

json
{ "capabilities": { "firstMatch": [{ "browserName": "firefox" }] } }

但是,由於只有一個firstMatch分支,並且我們知道如果伺服器未安裝 Firefox,則會話建立將失敗,因此這也等效於

json
{ "capabilities": { "alwaysMatch": { "browserName": "firefox" } } }

另請參閱