【问题标题】:Use custom firefox browser version capability for geckodriver为 geckodriver 使用自定义 firefox 浏览器版本功能
【发布时间】:2019-04-04 04:15:15
【问题描述】:

我自己为 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 能力会导致webdriver 抛出

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,如果我在 browsers.json 中设置 "default": "beta" 并且不设置 version 功能,它也可以工作,我认为发生这种情况是因为 geckodrivers 将功能中的版本与实际浏览器版本。 (假定为here)。

我有几个想法如何解决这个问题,但不知道如何在技术上实现这些:

  • 防止 Selenoid 将 version 功能传递给 selenium 驱动程序(本例中为 geckodriver)
  • 防止 geckodriver 检查version 功能和浏览器版本
  • 向 selenoid 添加另一个标志以从 browsers.json 获取 docker 映像,例如 browser_version 而不是 version
  • 将另一个假浏览器添加到browsers.json 并将测试版设置为默认值,然后只需设置browserName 功能。这里的问题是,selenoid 检查浏览器名称,如果不匹配chromefirefoxopera,则无法启动 selenoid 容器。例如:

browserName=firefox-beta

 "firefox-beta": {
    "default": "beta",
    "versions": {
      "beta": {
        "image": "my/path/to/firefox:beta",
        "port": "4444"
      }
    }
  }

任何帮助或进一步的信息将不胜感激

【问题讨论】:

  • Selenoid 也支持browserVersion 功能。
  • @vania-pooh 设置 browserVersion=beta 仍然会导致 geckodriver 抛出异常。我认为您不能将其他值设置为浏览器实际版本之外的版本,这似乎不适用于 beta 版本。

标签: selenium geckodriver selenoid


【解决方案1】:

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

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

【讨论】:

  • 问题不在于 geckodriver 无法识别version,而在于它被识别。我必须设置 version=beta 功能才能让 selenoid 使用正确的 docker 映像。 Selenoid 然后将我所有的功能传递给 webdriver,这就是问题所在。 geckodriver 尝试将功能中设置的浏览器版本与已安装的浏览器之一匹配。当我通过版本beta 并且浏览器没有版本beta 但类似67.0.123 时,webdriver 会抛出异常。
猜你喜欢
  • 2018-01-01
  • 2020-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多