2

アプリケーションをテストするための自動化の作成に取り組んでいます。ほとんどのことはすでに行われています。ここで、GUI の自動化を行う必要があります。アプリケーションのインストールは、アプリケーション インストーラーを起動し、適切なオプションを選択してアプリケーションをインストールする Java コードを記述する必要がある部分の 1 つです。アプリケーションのポップアップがスローされた場合は、それらのポップアップをキャッチして応答します。UI でエラーまたは警告をキャッチします。これはすべて Java で開発する必要があるため、既存のサードパーティ製ツールを使用することは許可されていません。

このことを行うための最良の方法を知りたいだけです。私はhttp://docs.oracle.com/javase/tutorial/uiswing/components/button.html#radiobuttonを読んでいましたが、これを達成するための他の最善または簡単な方法はありますか? これに関するアイデアや記事は役に立ちます。

4

2 に答える 2

2

おそらく最良の方法は、Java アプリケーションを作成して、テストしたいアプリケーションを使用するときにユーザーが行うことを記録することです。

これは、すべてのマウスの動きとすべてのキーストロークを記録することを意味します。

後で、アプリケーションはすべてのマウスの動きとすべてのキーストロークを再生します。

また、マウスの移動が開始され、マウスの移動が終了し、キーストローク シーケンスが開始され、キーストローク シーケンスが終了するたびに、モニター (画面) に画像を記録する必要があります。

Java アプリケーションは、これらの画像を再生中に表示される画像と比較する必要があります。イメージがあまりにも異なる場合、Java アプリケーションはエラーをスローします。違いが大きすぎるかどうかを判断してください。

私が何年も前に使用したツールには、ユーザーが再生画像を調べて、日付と時刻の表示など、変更される可能性のある画像をマークできるプロセスがありました。

リンクされたウィキペディアのリストからGUI テスト ツールの 1 つを選択すると、時間を大幅に節約できます。オープンソースのものもあれば、プロプライエタリなものもあります。

人生のほとんどのことと同じように、支払った金額を手に入れることができれば幸運です。

于 2013-04-26T12:52:22.903 に答える
1

別のアプリケーション コントロール (ボタン、チェックボックス、リスト、その他の UI 要素など) に直接アクセスすることはできません (たとえそれが Java で記述されていたとしても、そのアプリケーションがその UI を制御するためのいくつかのオプションを提供しない限り (多くのアプリケーションがそのようなものを提供しているとは思えません))。 )。

したがって、2 つの方法しかない可能性があります (どちらも同じように悪いと思います)。2. ロボットを使用し、そのアプリケーション ウィンドウでキー イベントとマウス イベントをエミュレートして何かを実行します (ボタンを押す、テキスト フィールドに入力する、リストをスクロールするなど)。これらの座標をハードコードするだけで、テストの実行中にテストされたウィンドウを移動/サイズ変更しないように祈るかもしれません。

要約すると、Java を使用して UI テスト アプリケーションを作成することは最適ではありません。実際、場合によっては他の言語を使って書くのも面倒かもしれません。

たぶん私はひどく間違っており、誰かがJavaでそのようなことをより良い方法で行う方法を共有できます...


PS 小型ロボットの例 (抽象的なログイン フォームに記入):

public static void main ( String[] args )
{
    fillForm ();
}

private static void fillForm ()
{
    try
    {
        Robot r = new Robot ();

        // Set to true so we will wait for events to process
        // Still we might need some delays to let application take the input in some cases
        r.setAutoWaitForIdle ( true );

        // Login
        typeKey ( r, KeyEvent.VK_A );
        typeKey ( r, KeyEvent.VK_D );
        typeKey ( r, KeyEvent.VK_M );
        typeKey ( r, KeyEvent.VK_I );
        typeKey ( r, KeyEvent.VK_N );

        // Tab to password field
        typeKey ( r, KeyEvent.VK_TAB );

        // Password
        typeKey ( r, KeyEvent.VK_P );
        typeKey ( r, KeyEvent.VK_A );
        typeKey ( r, KeyEvent.VK_S );
        typeKey ( r, KeyEvent.VK_S );

        // Process form
        typeKey ( r, KeyEvent.VK_ENTER );
    }
    catch ( AWTException e )
    {
        e.printStackTrace ();
    }
}

private static void typeKey ( Robot r, int a )
{
    r.keyPress ( a );
    r.keyRelease ( a );
}
于 2013-04-26T13:20:50.663 に答える