TestFx を使用した単体テストを持つ単純な JavaFx アプリケーション (Java 8) があります。ただし、テストが実行されると、アプリケーション ウィンドウが起動し、マウスを動かしてテスト内のアクションを実行します。これらのテストは、アプリケーションがポップアップせず、自動化されたビルドとテストの実行中にマウスを他の目的に使用できる方法で実行できますか?
3 に答える
アップデート:
この問題の解決策を提供するこのブログ投稿を見つけました。著者が示唆しているように、ビルドに次の依存関係を追加する必要があります。
testRuntime 'org.testfx:openjfx-monocle:1.8.0_20'
次に、 を呼び出す前に、次のコードをどこかに含める必要があります。私の場合は、 JUnit を使用registerPrimaryStage()
しているため、 でマークされたメソッドに含めます。@BeforeClass
System.setProperty("testfx.robot", "glass");
System.setProperty("testfx.headless", "true");
System.setProperty("prism.order", "sw");
System.setProperty("prism.text", "t2k");
また、AWT から何かに依存していないことを確認するために含めると便利であることも付け加えてSystem.setProperty("java.awt.headless", "true")
おきます (私の場合、問題を引き起こしている画面のサイズを取得するための呼び出しがありました)。また、ブログの著者のアドバイスに従い、ヘッドレス モードのオンとオフを切り替えるスイッチを追加しました。これにより、最終的な方法は次のようになります。
@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 はメイン ディスプレイの代わりにフレーム バッファーを使用します。したがって、テストは実行されますが、ウィンドウが開いたり、マウス ポインターが移動したりすることに煩わされることはありません。
はい、JavaFx2 アプリケーションのヘッドレス テストを実行できます。Monocle (OpenJFX の一部) が必要です。詳細はこちら: https://github.com/TestFX/Monocle