11

統合された JavaFX 2.2 を使用して、Java 7u6 で実行されている JavaFX 2 アプリケーションのテストを自動化しようとしています。そのために、私はJemmy3JemmyFXをビルドし、ビルド環境に統合しました。関連するすべての OS で簡単なスモーク テストが実行されます。

次のステップとして、継続的デプロイ プロセスの一部としてテストを実行したいと考えています。現在の CI サーバーは JavaFX で公式にサポートされていない OpenSUSE で実行されているため、仮想マシンに Ubuntu サーバーのインストールをセットアップし、gtk2 をインストールしました。
本格的なウィンドウ システムの欠如を改善するために、XvncXvfbの両方でテストを実行しようとしましたが、役に立ちませんでした。

Xvncでは、テストは失敗します

Prism ES2 Error - nInitialize: glXChooseFBConfig failed

一方、Xvfbでは、彼らは私にくれます

Xlib:  extension "RANDR" missing on display ":10".

2 番目の問題を軽減するためにインストールすることを提案するブログ投稿gtk-engines-pixbufがありましたが、これはエラー メッセージの表示数を変更するだけでした。

ここで、StackOverflow の JavaFX の知識を集めて質問します。

  • 上記のエラーを解決する方法を知っていますか?
  • (ヘッドレス) CI サーバーで JavaFX 2 テストまたはロボット インタラクションを正常に実行しましたか?
  • そのシステムを機能させるためにどのように構成しましたか?
4

2 に答える 2

7

JavaFX の (ヘッドレス) CI サーバー テストのサポートは、JavaFX 8 まで利用できません。

これらの JavaFX 問題追跡レコードの情報に基づいて回答します。

  • JDK-8088651「ヘッドレス グラス ツールキットは、Quantum および Prism 単体テストに接続する必要があります」
  • JDK-8091286「Quantum にはヘッドレス テストとヘッドフル テストが必要です」)。

2015 年 1 月 8 日更新

リンクされた JavaFX の問題追跡レコードは、Java 8 には実装されておらず、Java 9 に再割り当てされました。

現在、Java 8 ソース コードには、JavaFX コンポーネントのヘッドレス レンダリング (および他のさまざまなターゲット プラットフォームのレンダリング) を提供する Monocle という名前の最小限のレンダリング エンジンが含まれています。私は Monocle を使用したことがないため、ヘッドレス レンダリングでの使用方法について詳細な説明を提供することはできません。Monocle を使用すると思いますが、現在、ソースから JavaFX のカスタム ビルドを実行する必要があります (Monocle は通常、デスクトップ Java ランタイムおよび JDK 環境に同梱される標準の JavaFX バージョンではなく、組み込み JavaFX バージョンでのみ出荷されると思います)。 .

Monocle に関する情報は、JavaFX wikiで入手できます。

ヘッドレス レンダリングは Monocle によって提供されていますが、Monocle を使用してヘッドレス レンダリングを実行することは、Oracle によって公式にサポートされているとは思いません (ただし、JavaFX のヘッドレス レンダリングは、どのような形式でも公式にサポートされているとは思わないので、Monocle がうまく機能するかどうかは推測できます)。あなたのために、ぜひそれを使用してください)。

Monocle のヘッドレス レンダリングはソフトウェア レンダリングの実装であるため、一部のグラフィック プリミティブの実行は、デスクトップ環境での JavaFX の標準的なハードウェア アクセラレーション操作よりも遅くなる場合があります。

私が認識していないヘッドレス環境で JavaFX を実行できるようにする他の方法があるかもしれません。

不明な点がある場合は、openjfx-dev メーリング リストで JavaFX 開発者に問い合わせてください。

Linux で実行している場合、Jan Zarnikov の回答で提案されているように Xvfb を使用することは、おそらく良い解決策であり、Monocle を使用するよりも望ましい方法です。

于 2012-09-01T18:05:29.577 に答える