別のアプリケーション コントロール (ボタン、チェックボックス、リスト、その他の 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 );
}