我正在使用使用 JavaFX 8 创建的 GUI 开发简单的 Java 独立应用程序。
我用 TestFX 框架(版本 3.1.0)编写了一些 GUI 测试。在我的本地机器上测试工作正常,但在 Travis CI 环境中失败了。请看一下,一些代码片段:
import static org.assertj.core.api.Assertions.assertThat;
import static org.loadui.testfx.GuiTest.find;
public class JavafxApplicationIT {
private static GuiTest controller;
@BeforeClass
public static void setAfter() throws Exception {
FXTestUtils.launchApp(JavafxApplication.class);
Thread.sleep(5000);
controller = new GuiTest() {
@Override
protected Parent getRootNode() {
return JavafxApplication.getScene().getRoot();
}
};
}
@AfterClass
public static void shutdownAll() throws InterruptedException {
Platform.runLater(() -> JavafxApplication.getStage().close());
}
@Test
public void shouldFillForm_saveLicence_thenOpen_andVerifySignature() throws Throwable {
controller.click("#newLicenceButton");
((TextField) find("#licenceUidField")).setText(licenceUID);
((TextField) find("#customerIdField")).setText(customerId);
....
controller.click("#mainActionButton");
Thread.sleep(3000);
((TextField) find("#licFileField")).setText(licenceFile.getPath()); // <--- FAILED
}
}
我有No nodes matched '#licFileField'
错误。我注意到,在每一个失败的情况下,匹配问题总是在应用程序中打开一些新窗口之后出现。
在上述情况下,单击会mainActionButton
调用新窗口,并且licFileField
是来自新(活动)窗口的元素名称。
也许它与 Travis CI 机器上的 xvfb 配置有关?在.travis.yml
我有:
before_install:
- "export DISPLAY=:99.0"
- "sh -e /etc/init.d/xvfb start"
- "/sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_99.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -ac -screen 0 1280x1024x16"