我正在尝试使用集成的JavaFX 2.2自动测试在Java 7u6上运行的JavaFX 2应用程序。 为此,我已将Jemmy3和JemmyFX构建并集成到我的构建环境中。 在所有相关操作系统上运行简单的冒烟测试。
下一步,我想将测试作为持续部署过程的一部分运行。 由于当前的CI服务器在OpenSUSE上运行,而JavaFX没有正式支持, 我在虚拟机中安装了Ubuntu Server并安装了gtk2 为了弥补缺乏完全成熟的窗口系统,我尝试在 Xvnc 和 Xvfb 上运行测试,但无济于事。
在 Xvnc 上,测试失败并带有
Prism ES2 Error - nInitialize: glXChooseFBConfig failed
而在 Xvfb 上,他们给我
Xlib: extension "RANDR" missing on display ":10".
建议blog post安装gtk-engines-pixbuf
以缓解第二个问题,但这只会更改错误消息中显示的数量。
现在,我召集了StackOverflow的JavaFX知识并询问
答案 0 :(得分:12)
我遇到了类似的问题 - 在Maven的无头环境中运行JUnit测试。
我们不使用JemmyFX。我们只有非常简单的测试,它们使用与此类似的JUnit规则: https://gist.github.com/andytill/3835914 (这是使用Platform.runLater(...)的代码所必需的)
当前版本的JavaFX(随JDK 1.7.0-21提供)似乎在Ubuntu 12.04上的Xvfb中运行而没有运行Xserver:
Xvfb :99
强> DISPLAY=:99 mvn clean install
强> 答案 1 :(得分:6)
在JavaFX 8之前,无法支持JavaFX的(无头)CI服务器测试。
根据这些JavaFX问题跟踪记录中的信息进行回答:
2015年1月8日更新
链接的JavaFX问题跟踪记录未针对Java 8实现,并已重新分配给Java 9。
Java 8源代码目前包含一个名为Monocle的最小渲染引擎,它为JavaFX组件提供无头渲染(以及各种其他目标平台的渲染)。我从未使用过Monocle,也无法提供有关如何将其用于无头渲染的详细说明。我相信使用Monocle,你当前需要从源代码执行JavaFX的自定义构建(因为我认为Monocle通常只提供嵌入式JavaFX版本,这不是桌面Java运行时和JDK环境附带的标准JavaFX版本) 。
有关Monocle的信息,请访问JavaFX wiki。
虽然无头渲染是由Monocle提供的,但我认为使用Monocle执行无头渲染并不是由Oracle正式支持(尽管我认为JavaFX的任何形式的无头渲染都不是官方支持的,所以我想如果Monocle适合你,一定要使用它)。
Monocle中的无头渲染是一种软件渲染实现,因此某些图形基元的执行速度可能比桌面环境中JavaFX的标准硬件加速操作慢。
可能还有其他方法允许JavaFX在我不知道的无头环境中运行。
如果有疑问,请在openjfx-dev mailing list上询问JavaFX开发人员。
如果您在Linux下运行,根据Jan Zarnikov的建议使用Xvfb可能是一个很好的解决方案,可能比使用Monocle更好。