У меня есть простое приложение JavaFx (Java 8), в котором есть модульный тест с использованием TestFx. Однако, когда тест запущен, окно приложения запускается, и мышь перемещается, чтобы выполнить любое действие в моем тесте. Можно ли запустить эти тесты таким образом, чтобы приложение не всплывало, а я все еще мог использовать мышь для других целей, пока выполняются автоматизированная сборка и тесты?
Безголовое тестирование с JavaFx и TestFx
Ответы (3)
Обновление:
Я нашел этот пост в блоге, в котором я нашел решение этой проблемы. Как предлагает автор, вам нужно добавить следующую зависимость в вашу сборку:
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();
}
Вы можете увидеть решение в контексте здесь
Исходный ответ:
Если вы используете Linux, вы можете использовать для этого xvfb. В системе на основе Debian вы можете установить xvfb следующим образом:
$ sudo apt-get install xvfb
С установленным xvfb запустите следующее перед запуском тестов:
$ Xvfb :99 &>/dev/null &
$ export DISPLAY=:99
Если вы запускаете свои тесты в той же консоли, TestFX будет использовать кадровый буфер вместо вашего основного дисплея. Таким образом, тесты будут выполняться, но вы не будете беспокоиться об открытии окон и перемещении указателя мыши.
if
.
- person Adam Arold; 27.02.2018
Я бы согласился с KDK за использование Monocle, так как он действительно работает с Jenkins. Я не мог получить надежный результат от Xvfb на Дженкинсе. Ниже приведены шаги, которые я предпринял и работает для меня.
Подготовить монокль
Вы хотите скачать Monocle с Monocle Github. Похоже, что есть изменение API, поэтому вы захотите отредактировать MonocleView.java, добавив метод ниже после загрузки. Я не уверен, что я должен добавить в метод, но обнаружил, что он просто работает без его реализации.
@Override
protected int _getNativeFrameBuffer(long ptr) {
// TODO Auto-generated method stub
return 0;
}
Установить Монокль
Создайте банку Monocle и поместите банку в свою JRE (по пути jre/lib/ext)
Запуск Monocle с библиотекой Glass
Ниже приведена моя команда maven, используемая в jenkins, вас заинтересует часть параметров времени выполнения Java.
$ mvn clean install -Dtestfx.robot=glass -Dglass.platform=Monocle -Dmonocle.platform=Headless -Dprism.order=sw
Да, можно выполнять автономное тестирование приложений JavaFx2. Вам понадобится Monocle (часть OpenJFX). Подробнее здесь: https://github.com/TestFX/Monocle