【问题标题】:Selenium WebDriver, Firefox, Centos, unable to find a matching set of capabilitiesSelenium WebDriver、Firefox、Centos,找不到匹配的功能集
【发布时间】:2019-12-25 21:40:45
【问题描述】:

我有一个使用 Selenium WebDriver 来控制 FireFox 的应用程序。它在 Tomcat 下作为 Web 应用程序运行 - 是的,这有点奇怪,但这样做有充分的理由。

我一直在我的 MacBook 上对此进行测试,并且运行良好。我的代码调用WebDriver,WebDriver调用gecko,Firefox运行,一切正常。

我现在转到 Centos-7 盒子,遇到了问题

org.openqa.selenium.SessionNotCreatedException:无法找到 匹配的功能集构建信息:版本:'3.141.59', 修订:'e82be7d358',时间:'2018-11-14T08:17:03' 系统信息: 主机:'xxx',ip:'a.b.c.d',os.name:'Linux',os.arch:'amd64', os.version: '3.10.0-693.el7.x86_64', java.version: '1.8.0_222' 驱动 信息:driver.version:FirefoxDriver

我正在使用

  • 硒:3.141.59
  • 壁虎:geckodriver 0.24.0(2019-01-28)
  • Firefox:Mozilla Firefox 60.8.0

我已经安装并运行了 Xvfb。

我的代码只是调用

m_driver = new FirefoxDriver();

我认为这是当前的成语。

我已经添加了

JAVA_OPTS="-Dwebdriver.gecko.driver=/opt/gecko/geckodriver"

到我的 tomcat.conf

我从旧版本的 Firefox 和 Gecko 中看到对此类问题的引用,并表明这可能是版本问题,但据我所知,我使用的是最新版本。

请提供修复建议或进行一些诊断。

【问题讨论】:

  • 我忘记了一个重要的事实:我在 Selinux 下运行,所以有额外的安全级别。 Tomcat Java 进程对其使用的临时端口没有“name_connect”权限。一个适当的解决方案是管理 Java 的权限以使用一组端口。如果我弄清楚了,我会发布一个正式的答案。

标签: java firefox selenium-webdriver geckodriver selenium-firefoxdriver


【解决方案1】:

我认为你很接近。尽管tomcat.conf 中的以下行看起来很完美:

JAVA_OPTS="-Dwebdriver.gecko.driver=/opt/gecko/geckodriver"

但我仍然不确定-Dwebdriver.firefox.driver=/usr/bin/firefox 是否是您的要求。

根据Class FirefoxDriver.SystemProperty webdriver.firefox.driver 的值是指常量字段 DRIVER_XPI_PROPERTY 这是系统属性,它定义了要安装在浏览器中的webdriver.xpi 浏览器扩展的位置.如果未设置,将使用与此类捆绑的预构建扩展。除非绝对必要,否则此 Constant Field 必须保持不变。

所以删除-Dwebdriver.firefox.driver=/usr/bin/firefox 将解决问题。


更新

有关您的用例的更多详细信息将有助于我们以更好的方式调试问题。但是,正如您提到的 Xvfb 已安装并运行,您需要注意以下几点:

  • 确保如果您在 无显示的系统上运行 Firefox,则必须使用 headless 模式
  • GeckoDriver v0.24.0headless mode的正确用法是:

    options.headless = True
    
  • 如果您将MOZ_HEADLESS=1 设置如下,则不再需要xvfb-run

    $ export MOZ_HEADLESS=1   # this way you only have to set it once
    

您可以在How to make firefox headless programmatically in Selenium with python?找到详细讨论

  • 如果您更改了系统路径,请进行系统重启
  • 始终在 tearDown(){} 方法中调用 driver.quit() 以优雅地关闭和销毁 WebDriverWeb Client 实例。
  • 始终以 非 root 用户身份执行您的 @Tests

【讨论】:

  • 是的,我感觉很亲近!我应该说,我只是在绝望中添加了 webdriver.firefox.driver 项,无论有没有都会出现同样的问题:-(
  • 这是 Selinux 导致的问题。当我找到一个完整的解决方案时,更多细节。
  • @djna 查看更新后的答案,如果有帮助,请告诉我。
  • 能力问题完全是selinux造成的。我暂时禁用了该安全性,并立即遇到了 MOZ_HEADLESS=1 修复的无头问题。现在所有的作品谢谢。对于“正确”的解决方案,我只需要找到设置 selinux 权限的正确方法,以启用一组临时端口供 selenium/gecko 使用。
  • @djna 我想我也有一个解决方案。但这将是一个不同的问题:)
猜你喜欢
  • 1970-01-01
  • 2018-10-10
  • 1970-01-01
  • 2018-01-26
  • 2021-02-11
  • 1970-01-01
  • 1970-01-01
  • 2017-11-30
  • 1970-01-01
相关资源
最近更新 更多