java - 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
我在用
- 硒:3.141.59
- 壁虎:geckodriver 0.24.0(2019-01-28)
- 火狐:Mozilla 火狐 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
对你有要求。
根据类 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(){}
方法内调用以优雅地关闭和销毁WebDriver和Web 客户端实例。 - 始终以非 root用户身份执行您的@Tests。
推荐阅读
- python - Python中的升序
- .net - Glass.Mapper中GUID的大小写映射
- bots - 来自 Dialogflow 的聊天消息不会出现在 Slack 中
- excel - VBA - 用双引号包围数据
- peoplesoft - 在 WorkCenter 仪表板中配置 Pagelets/PivotGrids
- python - 为什么在 Windows 上安装的 Python 3.7.0 的两个独特副本的位置截然不同?
- sql - Azure Blob 无法批量加载
- c# - 如何在不使用动态的情况下调用异步方法并返回结果
- batch-file - 如何使用 groovy 环境。Jenkins 中的变量以通过 Jenkins 管道中的 bat 命令
- node.js - 如何在节点js中获取表单数据和查询mongodb