概要
本記事では、キーボード入力を自動化する方法を記載します。
また、簡単なGUIツールのテスト自動化方法も合わせて記載する。
キーボード入力の自動化を行いたい状況
まず、キーボード入力の自動化に関して、どのような場合に使用するかをまとめました。
おそらく、GUIツール関係のテスト時に使用するかなと思います。
→ ユーザの操作をパターン化し、テストに落とし込む。
・GUIツールの自動化テストを作成するとき
・Windowsのショートカットキーを使用するとき
おすすめのライブラリ
今回は、キーボード自動化を行うパッケージを2つ紹介します。
それぞれ特徴が異なるため、使用用途に合わせて選択しましょう。
Robotクラス
keyPress関数を使用することで、キーボードを1度押したことになる。
また、keyRelease関数を記載しなくても、問題なく動作していたが、お作法として「入力 → 解除」はひとまとめに考えたほうが良さそうだ。
import java.awt.Robot
val robot = Robot()
// 常に100ミリ秒の待機時間を設ける
// 目視でのキーボード入力が確認できる(これがないと一瞬で入力されてしまう)
robot.delay(100)
// キーボードの入力
robot.keyPress(KeyEvent.VK_ENTER)
// キーボードの解除
robot.keyRelease(KeyEvent.VK_ENTER)
Sikulixツール
Robotクラスとは異なり、事前に設定したキーボード入力処理を外部プロセスとして呼び出して使用する。また、Robotクラスとの差別化として、画像認識を使用できる。
■手順
①Sikulixツールのダウンロード
②キーボード入力をまとめSikulixフォルダ作成
③呼び出し用のバッチファイル作成
④外部プロセスの呼び出し処理追加
また、使用方法に関しては、ネット上にいくらでも存在するため、本記事では割愛する。
③呼び出し用バッチファイル作成のみ、メモとして残しておく。
cd /d %˜dp0
set filePath=..\sikulixide-2.0.5.jar
set proPath=..\sikulix\○○.sikuli
call java -jar %filePath% -r %proPath%
まとめ
基本的には、Robotクラスを使用するとよい。
Sikulixに関しては、キーボード入力に対応していないボタンの処理があれば、候補に入れてる程度で考えていい。
また、私の場合は出力結果(画像)の比較方法を調べた際に、Sikulixに行き着いた。
結局は、Sikulixの画像認識が安定しなかったため、「javax.imageio.ImageIO ライブラリ」を使用し、ピクセルごとのが画像比較で対応しているが。。。