0

我自己为 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,如果我设置并且不设置功能,它也适用"default": "beta"browsers.jsonversion认为这是因为 geckodrivers 将功能中的版本与实际浏览器版本相匹配。(这里假设)。

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

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

browserName=firefox-beta

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

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

4

1 回答 1

0

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

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

于 2019-04-03T20:15:15.780 回答