我有一个简单的JavaFx应用程序(Java 8),它使用TestFx进行单元测试。但是,运行测试时,应用程序窗口会启动并移动鼠标以执行我的测试中的任何操作。这些测试是否可以以不弹出应用程序的方式运行,我仍然可以将自己的鼠标用于其他事情,因为自动构建和测试正在运行?
答案 0 :(得分:2)
<强>更新强>
我找到了this博文,为我解决了这个问题。正如作者所建议的那样,您需要在构建中添加以下依赖项:
testRuntime 'org.testfx:openjfx-monocle:1.8.0_20'
然后在调用registerPrimaryStage()
之前需要包含以下内容,在我的情况下,使用@BeforeClass
标记的方法,因为我正在使用JUnit:
System.setProperty("testfx.robot", "glass");
System.setProperty("testfx.headless", "true");
System.setProperty("prism.order", "sw");
System.setProperty("prism.text", "t2k");
我还要补充说,包含System.setProperty("java.awt.headless", "true")
以确保您不依赖于AWT中的任何内容非常有用(在我的情况下,我有一个调用来获取导致问题的屏幕大小) 。我也按照博客作者的建议添加了一个开关来打开和关闭无头模式。这给出了如下最终方法:
@BeforeClass
public static void setupSpec() throws Exception {
if (Boolean.getBoolean("headless")) {
System.setProperty("testfx.robot", "glass");
System.setProperty("testfx.headless", "true");
System.setProperty("prism.order", "sw");
System.setProperty("prism.text", "t2k");
System.setProperty("java.awt.headless", "true");
}
registerPrimaryStage();
}
您可以在上下文here
中查看解决方案原始答案:
如果您使用的是Linux,则可以使用xvfb。在基于Debian的系统上,您可以按如下方式安装xvfb:
$ sudo apt-get install xvfb
安装xvfb后,在运行测试之前运行以下命令:
$ Xvfb :99 &>/dev/null &
$ export DISPLAY=:99
如果在同一控制台中启动测试,TestFX将使用帧缓冲区而不是主显示器。因此测试将会运行,但是你不会打开窗户打开并移动鼠标指针。
答案 1 :(得分:0)
我同意KDK使用Monocle,因为它确实与Jenkins一样有魅力。我无法从詹金斯的Xvfb获得可靠的结果。以下是我采取的步骤并为我工作。
准备Monocle
您想从Monocle Github下载Monocle。它看起来有api更改,因此您需要在下载后添加以下方法编辑MonocleView.java。我不确定应该在方法中加入什么,但发现它只是在没有实现它的情况下工作。
@Override
protected int _getNativeFrameBuffer(long ptr) {
// TODO Auto-generated method stub
return 0;
}
安装Monocle
构建Monocle jar并将jar放入JRE(在jre / lib / ext路径下)
使用Glass lib运行Monocle
下面是我在jenkins中使用的maven命令,您将对java运行时选项部分感兴趣。
$ mvn clean install -Dtestfx.robot=glass -Dglass.platform=Monocle -Dmonocle.platform=Headless -Dprism.order=sw
答案 2 :(得分:-1)
是的,可以对JavaFx2应用程序进行无头测试。 您将需要Monocle(OpenJFX的一部分)。更多细节在这里: https://github.com/TestFX/Monocle