首页 > 解决方案 > Selenium WebDriver、Firefox、Centos,找不到匹配的功能集

问题描述

我有一个使用 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: 'abcd', os.name: 'Linux', os.arch: 'amd64', os.version: '3.10.0-693.el7.x86_64', java.version: '1.8. 0_222' 驱动信息:driver.version:FirefoxDriver

我在用

我已经安装并运行了 Xvfb。

我的代码只是调用

m_driver = new FirefoxDriver();

我认为这是当前的成语。

我已经添加了

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

到我的 tomcat.conf

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

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

标签: javafirefoxselenium-webdrivergeckodriverselenium-firefoxdriver

解决方案


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

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

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

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

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


更新

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

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

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

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

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

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

推荐阅读