功能

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" } } }

另请参阅