Робот TestFX не может нажать кнопку на Travis CI только во время интеграционного теста - PullRequest
0 голосов
/ 15 сентября 2018

Мой проект использует 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?Я подозреваю, что где-то отсутствует необходимая конфигурация, но не знаю, что именно.

...