Робот TestFX не может нажать кнопку на Travis CI только во время интеграционного теста
Мой проект использует TestFX для реализации своего пользовательского интерфейса JavaFX (TornadoFX) для автоматизированных тестов. Он имеет множество модульных тестов, взаимодействующих с отдельными представлениями, которые надежно работают в рамках Maven Surefire как локально, так и на Travis.
Недавно я добавил интеграционный тест, который выполняется в рамках Maven Failsafe, который запускает все мое приложение, нажимает кнопку JavaFX и затем ждет изменения какого-либо состояния (довольно длительный процесс), прежде чем делать утверждения. Этот тест выполняется и надежно проходит на моем локальном ПК, но никогда не проходит на Travis CI. На Трэвисе, в конечном итоге, он будет ожидать ожидания изменения состояния, вызванного процессом, запущенным нажатием кнопки.
Я попытался определить, где происходит сбой, предприняв следующие шаги.
- В проверку работоспособности добавлено утверждение TestFX, что кнопка видна. Это утверждение проходит, что, кажется, подтверждает, что мой запрос узла верен и ожидаемая кнопка находится по крайней мере на экране.
- Добавлено ведение журнала на всех этапах тестирования и обработчик действий TornadoFX. Регистрация показывает, что обработчик действия для кнопки никогда не вызывается в Travis, а вызывается на моем локальном ПК. Здесь я думаю, что это сходит с рельсов.
- Переместите интеграционный тест в исходный набор модульных тестов и переименуйте его так, чтобы Surefire запустил его (
*IT
в*Test
). Это приводит к тому, что тест проходит и надежно проходит на Трэвисе. Я не считаю это решением, потому что это было бы плохой практикой. Тем не менее, это может указывать на некоторую экологическую разницу между моими конфигами плагинов Surefire и Failsafe. - Пробовал бежать без головы и направился в Трэвис. Оба испытывают одну и ту же неудачу.
Я не вносил никаких изменений в мою конфигурацию Surefire.
Отказоустойчивый фрагмент POM:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.22.0</version>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
<configuration>
<testSourceDirectory>${project.basedir}/src/integrationTest/kotlin</testSourceDirectory>
<systemPropertyVariables>
<coner-core.version>${coner-core.version}</coner-core.version>
</systemPropertyVariables>
</configuration>
</execution>
</executions>
</plugin>
.travis.yml:
language: java
sudo: false # Linux OS: run in container
matrix:
include:
- os: linux
dist: trusty
jdk: oraclejdk8
addons:
apt:
packages:
- oracle-java8-installer
before_script:
# Linux OS: Use framebuffer for UI
# See https://docs.travis-ci.com/user/gui-and-headless-browsers/#Using-xvfb-to-Run-Tests-That-Require-a-GUI
# Note: exporting DISPLAY in a separate shell file will not grant the script shell file access to it.
# To insure it has access, just use the following line.
- if [[ "${TRAVIS_OS_NAME}" == linux ]]; then export DISPLAY=:99.0; sh -e /etc/init.d/xvfb start; fi
script:
- ./mvnw verify -Dci=true
after_success:
- bash <(curl -s https://codecov.io/bash)
cache:
directories:
- $HOME/.m2
Кто-нибудь сталкивался с подобными трудностями при получении интеграционных тестов с использованием TestFX для правильного выполнения на Travis? Я подозреваю, что где-то не хватает необходимой конфигурации, но не уверен, что именно.