2

UISpec4J を使用してテスト用の外部アプリケーションを起動しようとしています。

これまでに参照した質問とその回答は次のとおりです。

Selenium WebDriverで自動化されたWebアプリケーションへのリンクをクリックして実行するswing Java Web Startアプリケーションを自動化するにはどうすればよいですか?

UISpec4J を使用してすべてのウィンドウを取得する

UISpec4J トリガー終了前のモーダル ダイアログのキャプチャ

以下の my.exe は、ツールを使用して exe でラップされた Java アプリケーションです。内部的には jar を使用し、Java GUI アプリケーションです。

この実行可能ファイルは、最初にスプラッシュ スクリーンを起動し、次に接続先を選択するダイアログを起動します。その後、メイン ウィンドウが表示されます。接続できる場所を自動化できない限り、メイン ウィンドウが表示されません。

これらの質問に基づいて、次のコード フラグメントを作成しました。

        this.setAdapter(new UISpecAdapter() {
        @Override
        public Window getMainWindow() {
            return WindowInterceptor.run(new Trigger() {
                @Override
                public void run() throws Exception {
                    // running jnlp by netx launcher 
                    Runtime.getRuntime().exec("C:\\my.exe"); 
                    Thread.sleep(10000);
                }
            });
        }
    });

上記のアプローチでは、「ウィンドウが表示されませんでした」というエラーが表示されます。

        this.setAdapter(new UISpecAdapter() {
        @Override
        public Window getMainWindow() {
            final Window[] result = new Window[1];
            WindowInterceptor
            .init(new Trigger() {
                @Override
                public void run() throws Exception {
                    Runtime.getRuntime().exec("C:\\my.exe"); 
                    //Thread.sleep(10000);
                }
              })
              //.processTransientWindow()
              .process(new WindowHandler() {
                    public Trigger process(Window window) throws Exception {
                    result[0] = window;
                    return Trigger.DO_NOTHING;
                    }
                })
            .run();
            return result[0];
        }
    });     

上記の 2 番目のアプローチでは、「ウィンドウが表示されていません」というエラーが表示され、制御がオーバーライドされた「プロセス」メソッドに到達しません。

http://www.uispec4j.org/reports/apidocs/org/uispec4j/interception/WindowInterceptor.htmlを参照し、init\process シーケンスでモーダル ダイアログをキャプチャするために init を使用することをお勧めします。

非モーダルをキャプチャするには、次を使用することをお勧めします。

   Window window = WindowInterceptor.run(panel.getButton("open").triggerClick());

しかし、私はそれをどこでどのように呼ぶべきかわかりません..

上記の最初の質問から、それに対する答えが外部アプリケーションである jnlp アプリケーションの起動に言及しているため、それを行うことができるはずです。

jre 6 update 0 で試してみましたが、少なくともテストを実行できます。Java update 37 では、上記で言及した 3 番目の質問から、抽象メソッドが実装されていないというエラーが発生します。

私は何を間違っていますか?何か案が?

最新の UISpec4J パッケージ - バージョン 2.4 を使用しています。

前もって感謝します、-ニール。

4

1 に答える 1

0

私は UISpec4J を初めて使用しますが、GUI コンポーネントをインターセプトして操作するには、同じ JVM で実行する必要があると思います。exec で exe ファイルを開始すると、新しいプロセスと新しい別の JVM が作成されます。UISpec4J を正しく理解していれば、うまくいきません。

非モーダルの例に関しては、ドキュメントには「テスト内からウィンドウを取得する...」と記載されているため、セットアップメソッドまたはテストで機能するはずです。

于 2015-04-21T18:06:31.400 に答える