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

功能 值类型 说明
浏览器名称 browserName string 用于设置指定会话的浏览器名称。如果未安装指定的浏览器,则会话创建将失败。通过UA检查。
浏览器版本 browserVersion string 用于设置指定会话的浏览器版本。通过UA检查。
操作系统版本 platformName string 用于检查操作系统版本。
是否接受不安全的认证 acceptInsecureCerts boolean 设置不受信任的和自签名的TLS证书是否隐式受信任。
页面加载策略 pageLoadStrategy string 定义当前会话的页面加载策略,可参考document.readyState
代理设置 proxy JSON 定义当前会话的代理设置
改变窗口大小、位置 setWindowRect boolean 设置是否支持重置窗口大小和位置的命令
会话超时 timeouts JSON 描述会话操作的超时设置
严格文件交互性检查 strictFileInteractability boolean 严格文件交互性检查
提示框处理策略 unhandledPromptBehavior string 描述当前会话提示框处理策略,默认是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

猜你喜欢

转载自blog.csdn.net/mighty13/article/details/114973248
今日推荐