我有一个使用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',操作系统名称:'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版本中看到了此类问题的引用,并表明这可能是版本问题,但据我所知,我掌握的是最新版本。
请提出修复建议或获取一些诊断信息。
答案 0 :(得分: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,它是定义{{1} }浏览器扩展程序以安装在浏览器中。如果未设置,则将使用与此类捆绑在一起的预建扩展。除非绝对必要,否则必须保留此常量字段。
因此,放下webdriver.xpi
就可以解决问题。
有关您的用例的更多详细信息将有助于我们以更好的方式调试问题。但是,正如您提到的那样, -Dwebdriver.firefox.driver=/usr/bin/firefox
已安装并正在运行,您需要注意以下两个事实:
无头模式在 GeckoDriver v0.24.0 中的正确用法是:
Xvfb
如果您按照以下方式设置options.headless = True
,则不再需要xvfb-run
:
MOZ_HEADLESS=1
您可以在How to make firefox headless programmatically in Selenium with python?
中找到详细的讨论
$ export MOZ_HEADLESS=1 # this way you only have to set it once
方法内调用driver.quit()
,以优雅地关闭和销毁 WebDriver 和 Web Client 实例。