Java Selenium WebDriver、Firefox、Centos无法找到匹配的功能集

Java Selenium WebDriver、Firefox、Centos无法找到匹配的功能集,java,firefox,selenium-webdriver,geckodriver,selenium-firefoxdriver,Java,Firefox,Selenium Webdriver,Geckodriver,Selenium Firefoxdriver,我有一个使用SeleniumWebDriver控制FireFox的应用程序。它在Tomcat下作为一个Web应用程序运行——是的,这是一个有点奇怪的体系结构,但是这样做有很好的理由 我已经在我的MacBook上测试过了,效果很好。我的代码调用WebDriver,WebDriver调用gecko,Firefox运行,一切都很好 我现在移动到Centos-7盒子,遇到一个问题 org.openqa.selenium.SessionNotCreatedException:找不到 功能生成信息的匹配集:

我有一个使用SeleniumWebDriver控制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'驱动程序 信息:驱动程序。版本:FirefoxDriver

我正在使用

  • 硒:3.141.59
  • 壁虎:壁虎河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的旧版本中看到了这类问题,并指出这可能是一个版本问题,但据我所知,我了解的是所有内容的最新版本


请提供修复或诊断建议。

我想你已经非常接近了。尽管
tomcat.conf
中的以下行看起来很完美:

JAVA_OPTS="-Dwebdriver.gecko.driver=/opt/gecko/geckodriver"
但是我仍然不确定你是否需要
-Dwebdriver.firefox.driver=/usr/bin/firefox

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

因此,删除
-Dwebdriver.firefox.driver=/usr/bin/firefox
将解决这个问题


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

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

  • 如果按如下方式设置
    MOZ_HEADLESS=1
    ,则不再需要运行
    xvfb

    $ export MOZ_HEADLESS=1   # this way you only have to set it once
    
您可以在中找到详细的讨论

  • 如果更改了系统路径,请重新启动系统
  • 始终在
    tearDown(){}
    方法中调用
    driver.quit()
    ,以优雅地关闭和销毁Web驱动程序和Web客户端实例
  • 始终以非root用户的身份执行@Tests

是的,我感觉很亲近!我应该说,我只是在绝望中添加了webdriver.firefox.driver项,同样的问题也会出现,不管有没有:-(问题是Selinux造成的。当我找到一个完整的解决方案时,请提供更多详细信息。@djna检查更新的答案并让我知道这是否有帮助。功能问题完全是Selinux造成的。我暂时禁用了该安全性,并立即遇到了一个无头问题,MOZ_headless=1修复了。现在一切正常。谢谢“正确”解决方案我只需要找到设置selinux权限的正确方法,以启用一组临时端口供selenium/gecko使用。@djna我想我也有一个解决方案。但这将是另一个问题:)我忘记了一个重要的事实:我在Selinux下运行,因此有一个额外的安全级别。Tomcat Java进程对它使用的临时端口没有“name\u connect”权限。一个合适的解决方案是对Java使用一组端口的权限进行语义管理。如果我发现了这一点,我将发布一个正式的答案。
$ export MOZ_HEADLESS=1   # this way you only have to set it once