Selenium3 Python WebDriver API源码探析(11)WebDriver Capabilities(驱动功能)概述,FirefoxOptions

Selenium通过WebDriver操控浏览器,WebDriver不单是远程控制接口,也是W3C的推荐标准详见https://www.w3.org/TR/webdriver/

Capabilities(功能)是WebDriver支持的标准命令之外的扩展命令,用于控制端与浏览器端之间对一些特性进行通讯,控制端可以使用Capabilities定义浏览器端创建新会话时需要满足的一些特性。浏览器端也可以用Capabilities描述会话所支持的特性集。
WebDriver支持的Capabilities分为两类,一类是标准Capabilities,一类是各WebDriver实现的特定Capabilities

Capabilities协商机制

Capabilities对象是一种选择机制,用于限制服务器端返回的驱动程序配置。例如,我们使用BrowserNmae请求相应的Firefox实例,但是Firefox WebDriver没有安装,那么就会导致程序运行失败。

选择机制( Capabilities协商机制)通过alwaysMatchfirstMatch这两个对象实现。

alwaysMatch对象

顾名思义,alwaysMatch对象中描述的功能是我们要求会话具备的功能。如果服务器无法提供所需功能,会话将创建失败。

例如:你要求会话使用Firefox 的版本为62,但是安装的Firefox 的版本为60,那么会话将创建失败。

{
  "capabilities": {
    "alwaysMatch": {
      "browserName": "firefox",
      "browserVersion": "62"
    }
  }
}

firstMatch对象

firstMatch对象接收一个功能(Capabilities)数组,这些对象将依次匹配,直到匹配服务器可以提供的功能,会话将创建失败。

例如,你想在macOS或Linux上运行驱动程序,而非Windows上。

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

alwaysMatchfirstMatch结合使用

alwaysMatchfirstMatch可以结合使用以缩小选择范围。

例如:你想在macOS或Linux上运行驱动程序,而且要求浏览器必须是FireFox。

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

前面的示例完全等同于将Firefox要求放到每个firstMatch分支中。但是强烈建议使用第一种形式,这样不必重复传递大量数据。

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

标准Capabilities

功能值类型说明
浏览器名称browserNamestring用于设置指定会话的浏览器名称。如果未安装指定的浏览器,则会话创建将失败。通过UA检查。
浏览器版本browserVersionstring用于设置指定会话的浏览器版本。通过UA检查。
操作系统版本platformNamestring用于检查操作系统版本。
是否接受不安全的认证acceptInsecureCertsboolean设置不受信任的和自签名的TLS证书是否隐式受信任。
页面加载策略pageLoadStrategystring定义当前会话的页面加载策略,可参考document.readyState
代理设置proxyJSON定义当前会话的代理设置
改变窗口大小、位置setWindowRectboolean设置是否支持重置窗口大小和位置的命令
会话超时timeoutsJSON描述会话操作的超时设置
严格文件交互性检查strictFileInteractabilityboolean严格文件交互性检查
提示框处理策略unhandledPromptBehaviorstring描述当前会话提示框处理策略,默认是dismiss and notify state

特定Capabilities

除了标准Capabilities,不同WebDriver实现还可以根据需求扩展Capabilities,FireFox主要通过FirefoxOptions实现特定Capabilities

根据文档https://developer.mozilla.org/en-US/docs/Web/WebDriver/Capabilities/firefoxOptions可知,FirefoxOptions是一个JSON对象,包含以下字段:

  • binary:字符串。自定义Firefox二进制文件所在的绝对路径。Windows会默认注册表HKEY_LOCAL_MACHINE\SOFTWARE WOW6432Node\Mozilla\Mozilla Firefox\[VERSION]\Main\PathToExe
    HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\Mozilla Firefox\[VERSION]\Main\PathToExe中的路径查找。

  • args:字符串数组。向Firefox二进制文件传递的命令行参数。例如- headless。支持的参数详见https://developer.mozilla.org/en-US/docs/Mozilla/Command_Line_Options

  • profile:字符串。Firefox实例的用户配置文件目录。可用于安装扩展或者自定义证书。但是对于设置自定义首选项,官方建议使用 prefs对象 (Preferences Object) 。
    配置文件是在系统临时文件夹中创建的。这也是在提供编码概要文件时提取的地方 profile。默认情况下,geckodriver将在此位置创建一个新的配置文件。
    如果想要让geckodriver使用现有配置文件,请将args字段设置为{"args": ["-profile", "/path/to/your/profile"]}

  • prefs (Preferences object):首选项名称和值的映射。值可以是字符串、布尔值或整数。
    Preferences object是一个JSON对象,每个首选项都是一个键值对。在启动Firefox之前,首选项将被写入配置文件(profile)。可以通过在Firefox浏览器中访问about:config获得可用首选项的完整列表(4千多项……)。其中一些重要的首选项参见https://developer.mozilla.org/en-US/docs/Mozilla/Preferences/Preference_reference
    例如:

    {
      "dom.ipc.processCount": 8,
      "javascript.options.showInConsole": false
    }
    
  • env(Env object):环境变量名称和值的映射。
    Env object是一个JSON对象,每个环境变量都是一个键值对。在桌面端,Firefox将使用给定的环境变量启动。

desiredCapabilitiesrequiredCapabilities

大部分Selenium API都支持使用desiredCapabilitiesrequiredCapabilities来配置新会话。他们与前面提到的alwaysMatchfirstMatch对象非常相似。但是desiredCapabilitiesrequiredCapabilities已逐步废弃,应当避免使用。

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

上述对象应当转换为:

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

参考文献

https://www.w3.org/TR/webdriver/#capabilities
https://developer.mozilla.org/en-US/docs/Web/WebDriver/Capabilities
https://developer.mozilla.org/en-US/docs/Web/WebDriver/Capabilities/firefoxOptions
https://docs.mozilla.org/testing/geckodriver/Capabilities.html#capabilities-example
https://developer.mozilla.org/en-US/docs/Mozilla/Preferences/Preference_reference
https://developer.mozilla.org/en-US/docs/Mozilla/Command_Line_Options

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值