对geckodriver使用自定义的Firefox浏览器版本功能

时间:2019-04-03 15:32:57

标签: selenium geckodriver selenoid

我自己为firefox构建了selenoid docker映像,并在browsers.json中对其进行了如下配置:

 "firefox": {
    "default": "66.0",
    "versions": {
      "beta": {
        "image": "my/path/to/firefox:beta",
        "port": "4444"
      },
      "66.0": {
        "image": "selenoid/vnc:firefox_66.0",
        "port": "4444"
      }
    }
  }

发送version=beta功能会导致网络驱动程序抛出

selenium.WebDriverException: Requested environment is not available

在我发现的日志中

2019/04/03 08:17:29 [3] [PROXY_TO] [90ab834d22aa3bbe2731eeb550497eec7ef9fb11c1e7f4609d617cf6a25124e7] [http://172.17.0.4:4444]
2019/04/03 08:17:29 [3] [SESSION_ATTEMPTED] [http://172.17.0.4:4444] [1]
2019/04/03 08:17:29 [3] [SESSION_ATTEMPTED] [http://172.17.0.4:4444/wd/hub] [2]
2019/04/03 08:17:29 [3] [SESSION_FAILED] [http://172.17.0.4:4444/wd/hub] [400 Bad Request]

由于完全相同的功能适用于chrome,而且如果我在"default": "beta"中设置browsers.json而不设置version功能也可以使用,我认为这是因为geckodrivers与功能与实际浏览器版本的对应关系。 (假定为here)。

我有几种解决方法,但是不知道如何从技术上实现这些目标:

  • 防止Selenoid将version功能传递给硒驱动程序(在本例中为geckodriver)
  • 防止geckodriver检查version功能和浏览器版本
  • 向硒油中添加另一个标志,以从browsers.json而不是browser_version的{​​{1}}获取docker镜像
  • version添加另一个伪造的浏览器,并将beta设置为默认值,然后只需设置browsers.json功能。这里的问题是,selenoid将检查浏览器名称,并且如果它与browserNamechromefirefox不匹配,则无法启动selenoid容器。例如:

opera

browserName=firefox-beta

任何帮助或其他信息将不胜感激

1 个答案:

答案 0 :(得分:0)

对于兼容w3c的浏览器(到目前为止,只有非Chrome浏览器),它们要求浏览器版本必须具有browserVersion功能,而不是version。我看到您尝试过browser_version,但是您尝试过browserVersion吗?

https://www.w3.org/TR/webdriver1/#capabilities