功能
WebDriver **功能** 用于传达由会话支持的功能。客户端还可以使用功能来定义在创建新会话时需要驱动程序满足的功能。
创建 WebDriver 会话时,它会返回一组功能,描述会话协商的有效功能。此集中包含的一些功能是所有浏览器之间共享的标准功能,但该集也可能包含特定于浏览器的功能,并且这些功能始终带有前缀。
功能协商
功能可用于要求支持某些功能子集的驱动程序。这可以用于要求某些浏览器功能,例如调整窗口尺寸的能力,但也用于分布式环境中从一组选项中选择特定的浏览器配置。
仅当您使用远程 WebDriver 时,选择特定的 Web 浏览器或平台才有意义。在这种情况下,客户端通过一个或多个中间节点与 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" }]
}
}
前面的示例与在每个firstMatch
分支中放置 Firefox 要求完全相同。
{
"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" }]
}
}
功能列表
browserName
browserVersion
platformName
acceptInsecureCerts
:此功能传达在导航时是否检查已过期或无效的TLS 证书。如果功能为 false,则在导航遇到证书出现问题的域名时,将返回不安全证书错误。否则,自签名或其他无效证书将在导航时被浏览器隐式信任。该功能对会话的整个生命周期都有效。pageLoadStrategy
proxy
setWindowRect
timeouts
unhandledPromptBehavior
webSocketUrl
供应商特定功能
除了标准功能外,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" } } }