ローカルデスクトップの自動化
目次:
1. はじめに
T-Plan Robot Enterprise version 3.2で、ローカルデスクトップに表示されるアプリケーションの自動化サポートが導入されました。これは、Robotと1つ以上のApplications Under Test (AUT)が同じローカルデスクトップ上で実行されることを意味します。自動化は当然AUTに限定されず、通常のユーザーが行えるあらゆるデスクトップ操作を実行できます。
利点:
-
別のコンピュータやOSを必要としない単一マシンシナリオ。
-
ローカルのJava SEインストールのみに依存しており、他のソフトウェアのインストールは不要です。これにより、対象システムを変更できない非侵襲的なシナリオでもRobotを使用できます。極めて隔離されたシナリオでは、RobotとJavaのファイルベース配布を外部メディア(CD、DVD、USBドライブ)にコピーし、そこから実行することで、SUTに一切インストールを行わずに済みます。
-
マルチディスプレイ環境のサポート(v4.1以降)。
-
高速かつ簡単な操作。
制限事項:
-
スクリプトレコーディングは、MS Windows 2000以降でサポートされています(バージョン3.5以降)。バージョン4.1では、Mac OS XおよびLinuxのサポートが追加されました。
-
Local Desktop接続に依存するテストスクリプトは、telnetやrshなどのターミナル経由でリモートから起動することはできません。そのようなシナリオでは、代わりにVNC Server接続を使用してください。
2. セットアップ
ローカルデスクトップの自動化は、2種類の接続タイプでサポートされています:
-
Local Desktop接続は、ローカルのJava SEインストールに依存しています。他の依存関係はありません。接続するには、Login Dialogで接続方法を選択し、Connectをクリックするだけです。
-
ローカルデスクトップは、ローカルで実行されているVNC Server経由でも自動化できます:
-
-
サポートされているVNC Serverをインストールするか、システム内蔵のVNCアクセス(Ubuntu、Mac OS X)を有効にします
-
Login DialogでVNC Server接続タイプを選択し、localhostに接続します。サーバーが標準の5900以外のポートで設定されている場合は、localhost:<port>の形式(例:localhost:5901)を使用します。
-
Javaに依存するLocal Desktop接続が推奨されます。一般にVNCサーバーより信頼性が高く、英語以外の文字も入力できます(キーボードサポートを参照)。Local Desktop接続は、画面のポーリングも通常より高速です。VNCサーバーは、Mirror Driverを使用したUltraVNCやDFMirageドライバを使用したTightVNCのように、ビデオドライバに直接接続されている場合、より優れた画面パフォーマンスを提供できることがあります。
Local Desktop接続とVNC Server接続の間の互換性は明示的には保証されていません。ローカルまたはリモートのVNC接続向けに設計されたテストスクリプトは、Local Desktopで正しく動作する場合と動作しない場合があります。以下の要因が関係します:
-
環境は、OSおよびデスクトップパラメータ(画面解像度、色深度)の点で一致している必要があります。デスクトップパラメータが異なる場合、テンプレート画像の比較に失敗することがあり、Image Collectionsを使用して再作成するか、新しい代替画像を追加する必要があります。
-
Local Desktop接続は、異なるキーボードキーのセットをサポートします。現在のシステムキーボードレイアウトで使用可能なキーのみを押下シミュレートできます。例えば、コンピュータがイギリス(GB)キーボードレイアウトを使用している場合、ドル記号キー('$')は存在しません。Pressコマンドを使用してこのキーを押すよう指示された場合、この文字に対応する物理キーが存在しないため、直接押すことはできません。このような場合、Robotはキーボードで押す代わりに、システムクリップボードを使用して文字を貼り付けます。これは、文字がテキストの一部として入力される場合はうまく機能します。ただし、AUTが「$キーを押して続行してください」のような特定のキー押下イベントを監視している場合は、正しく動作しません。
-
もう1つの違いは、VNC接続が一般にASCII 7ビット文字セットの文字のみをサポートするのに対し、Local Desktop接続はシステムクリップボードがサポートする任意の各国語(UTF-8)文字を転送できることです。例えば、ロシア語やギリシャ語のテキストを入力できます。これにより、Robotをローカライゼーション(l10n)や国際化(i18n)テストに使用できます。
MS Windows上のLocal Desktop
スケーリングされたMS Windowsデスクトップの自動化は、v7.2.11以降でサポートされています。Robotはデスケーリングされたアプリケーションとして動作するため、フォントが非常に小さく表示されることがあります。Login DialogのMore...メニューと、左上の
古いRobotリリースでは、ディスプレイスケーリングが有効な場合、Local Desktop接続の確立を拒否します。古いRobotバージョンを使用する必要がある場合は、ディスプレイスケーリングをオフに設定してください:
-
WindowsのSettingsウィンドウを開き、System→Display画面を選択します
-
"Change the size of text, apps and other items"の値を100%に設定します。複数のディスプレイを使用している環境では、各ディスプレイごとに個別に値を設定してください。
-
フォントやアプリを大きくする必要がある場合は、代わりにResolutionの値を下げてください。
Local Desktopスクリプトレコーディングの有効化 (Mac OS X)
Mac OS Xでスクリプトレコーディングを有効にするには、Robotプロセスにアクセシビリティおよび画面収録の許可を付与する必要があります:
-
System Preferencesを開き、Security & Privacyに移動します
-
左側の列でAccessibilityを選択し、"TPlanRobot"アプリの横にあるチェックボックスを確認します。クロスプラットフォーム版を使用している場合、アプリ名は"Java"と表示されることがあります。
-
左側の列でScreen Recording を選択し、こちらもアクセスを許可します。
-
Lockアイコンをクリックして右側の列のロックを解除し、チェックボックスを選択します。変更を適用するには、再度Lockをクリックします。
-
変更を適用するには、Robotを再起動してください。
トラブルシューティング:
-
ウィンドウ内にTPlanRobot またはJava アプリが表示されない場合は、まずそれを起動して、Robotがアクセスを必要としていることをMac OSに認識させてください。
-
Robotが既に有効になっていることを確認しているにもかかわらず、Accessibility の許可を求め続けることがあります。これは、Robotのアップデート後に別のアプリバージョンに対してアクセスが許可されていた場合に発生することがあります。通常は、アクセスを一度削除し(チェックを外す)、再度許可することで解決します。それでも改善しない場合は、ターミナルからAccessibility およびScreen Recording のアクセス許可をリセットしてみてください:
tccutil reset Accessibility com.tplan.robot
tccutil reset ScreenCapture com.tplan.robot
Linux上のLocal Desktop
Local DesktopはX11 デスクトップのみをサポートしています。より新しいWayland ベースのデスクトップは、Javaがまだ対応していないため、サポートされていません。Oracle側では、将来のJavaリリースのいずれかでこれを有効にする取り組みが進められています。
-
バージョン7.0.1までのRobotはWaylandをチェックしません。接続の作成は可能ですが、それを使って作成したスクリーンショットやコンポーネント画像はすべて黒くなります。
-
Robotバージョン7.0.2以降では、Waylandデスクトップへの接続が拒否されます。Oracleによるサポートが提供され次第、有効化する予定です。
最近のほとんどのLinuxリリースではWaylandがデフォルトになっているため、ローカルデスクトップ接続を有効にするにはX11に切り替える必要があります:
3. 接続
テストスクリプトからローカルデスクトップに接続するには、Connectコマンド(TPRスクリプト)またはconnect()メソッド(Javaテストスクリプト)を使用します。引数のURLは、"java://localhost"(Local Desktop接続タイプ)または"rfb://localhost"(VNC Server)のいずれかの形式である必要があります。
例えば、以下のコマンド/メソッド呼び出しは、Local Desktop接続を使用してローカルデスクトップに接続します:
TPRテストスクリプト: Connect java://localhost
Javaテストスクリプト: connect("java://localhost");
標準ポート5900で実行されているVNCサーバーを使用してローカルデスクトップに接続するには:
TPRテストスクリプト: Connect rfb://localhost
Javaテストスクリプト: connect("rfb://localhost");
このURLは、c/-connect CLIオプションと組み合わせて、Robotの起動時に接続を確立するためにも使用できます。接続に成功すると、Robotはデスクトップビューアの代わりにWorkflowチャートを表示した状態で起動し、アプリケーションのタイトルに接続情報(java://localhostまたはrfb://localhost:5900)が表示されます。
重要: Local Desktop接続を使用している間は、OSのキーボードレイアウトを変更しないでください。接続確立時にレイアウトがマッピングされるため、後で変更するとテストスクリプトが無効なキーを押してしまう可能性があります。キーボードを再マッピングするには、切断して再接続してください。これは、DisconnectとConnectコマンド(TPR形式)、またはdisconnect()とconnect()メソッド(Java形式)の順序を使用して、テストスクリプトから実行することもできます。
4. ディスプレイの処理
シングルディスプレイ環境では、ローカルデスクトップの自動化プロセスはリモートの場合と異なります。Robotがローカル画面を操作する必要がある場合、まずGUIを非表示にする必要があります。これは、テストスクリプト開発フェーズにおいて、ユーザーが画像比較の実行、スクリーンショットの取得、画面位置や矩形の定義、新しいテンプレート画像の作成、Component Captureの実行を選択した場合にも当てはまります。同様に、スクリプトの実行が開始されるとGUIは非表示になり、スクリプトが終了するまで復元されません。スクリプトの実行を一時停止してGUIを復元するには、マウスを動かします。この動作は、PreferencesダイアログのLocal Machineパネルで変更できます。このオプションでは、スクリプト一時停止のためのマウス感度とUI非表示動作を設定できます。
Robot v4.1.1では、マルチディスプレイ環境の完全なサポートが導入されました。特定の画面、またはすべての画面を自動化できます。ディスプレイが2つ以上ある場合、Loginウィンドウに画面セレクタと、以下のオプションを含むドロップダウンが表示されます:
画面は1から番号が振られ、通常は最初のものがプライマリディスプレイです。最も効率的な設定は、1つのディスプレイを自動化し、もう1つのディスプレイにRobotのGUIを配置することです。これにより、スクリプト実行時やグラフィカルな操作時にGUIを非表示にする必要がなくなります。
テストスクリプトまたはCLIから特定の画面に接続するには、以下のように接続URLに画面番号を追加します。番号を省略するか0を指定した場合、接続はすべての画面を自動化します。この形式は、c/-connect CLI接続にも適しています。最近の接続のいずれかのURLは、Tools->CLI Wizardウィンドウからコピーできます。もう1つの方法として、Desktop->Connection Managerウィンドウで接続に名前を付け、URLの代わりにその名前を使用することもできます。
TPRテストスクリプト: Connect java://localhost?screen=1
Javaテストスクリプト: connect("java://localhost?screen=1");
重要: パフォーマンス上の理由から、画面構成はRobotの起動時に一度だけ読み込まれます。正しく動作させるため、Robotの実行中は画面レイアウトを変更したり、ディスプレイを追加/削除したりしないでください。
Robot 4.3.1以降、接続されたディスプレイのプロパティは、以下のように変数を通じてテストスクリプトに公開されます:
-
画面(ディスプレイ)の数は、_DISPLAY_COUNTとして取得できます
-
各ディスプレイの[x, y, width, height]座標は、_DISPLAY_X_<n>、_DISPLAY_Y_<n>、_DISPLAY_W_<n>、_DISPLAY_H_<n>の4つの変数に格納されます。ここで<n>は画面番号です。番号は1から始まり、順序はローカルシステムによって決定されます。screenパラメータを使用して接続を単一ディスプレイに限定した場合、システムによって割り当てられ、Login Dialogの画面レイアウトプレビューに表示される通し番号にかかわらず、その番号は常に1になります。
-
CompareTo、Waitfor match/mismatch、Click、Dragなどの画像比較コマンドは、コンポーネントまたはテキストが検出された画面番号を示す新しい変数のセットを設定します。これらはCOMPARETO_DISPLAY_NO(最上位マッチのディスプレイ番号、番号は1)および_COMPARETO_DISPLAY_NO<i>(<i>はマッチした位置の通し番号)です。これにより、関係するディスプレイに応じて動作を切り替えることができます。例:
// すべての画面でコンポーネントを検索
Compareto "mount.png" method= "search2"
// 見つからない場合は終了
if ({_EXIT_CODE} > 0) {
Exit "1"
}
// コンポーネントが表示されている画面をテスト
if ({_DISPLAY_NO} == 1) {
// 最初のディスプレイ上のコンポーネント -> 何らかの処理を実行
} else {
// 別の画面上のコンポーネント -> 別の処理を実行
}
より一般的な説明については、Varコマンドの仕様にある暗黙変数の表も参照してください。
Virtual Box上で実行されているLinuxゲストシステムのLocal Desktop自動化では、画面が正しく認識されないことがあります。典型的な症状は、Robotが不正確な、あるいは真っ黒なスクリーンショットやテンプレート画像を生成することです。これを修正するには、Virtual Box内のゲストシステムのDisplay設定で3Dアクセラレーションを無効にしてください。
5. キーボードの処理
接続確立中は、キーボードマッピングの進行状況を示すウィンドウがポップアップ表示されます。正しく動作させるため、このウィンドウが表示されている間はデスクトップを操作しないでください。
バージョン4.1では、保存されたキーボードマップが導入されました(ローカルVNC接続には適用されません)。キーボードが一度マッピングされると、ファイルに保存されます。以降の接続では、キーボードレイアウトに変更がない限り、これが再利用されます。この方法はより高速であり、一連の短いテストスクリプトを実行するテストスイートにおけるアプリのフォーカスの問題を回避します。
キーボードマップは、デフォルトでユーザーのホームフォルダに保存されます。マップを手動で管理する必要がある場合は、tprlkm_プレフィックスと.keymap拡張子を持つファイルを探してください。入力言語とキーボードレイアウトごとに1つのファイルがあります。例えば、ドイツ語キーボードレイアウトは<home>/tprlkm_de_DE.keymapとして保存されます。Robotは、インストールディレクトリ(robot.jarファイルが置かれているフォルダ)に配置されたキーボードマップファイルも受け付けます。これらのマップは、上記のファイル名規則に従う必要があります。これらは、ユーザーのホームフォルダに配置されたものより優先されます。この機能により、Robotベースのカスタムソリューションを作成できます。
保存されたマップの使用は、ユーザー構成ファイル内のlocalDesktop.useStoredKeymaps設定によって制御されます。これは、Loginウィンドウ、またはLocal Desktopパネル(Preferencesウィンドウ内)のいずれかで設定できます。このオプションをプログラムから変更する必要がある場合は、Setting Preferencesのドキュメントを参照してください。
6. ローカルアプリケーションの起動
バージョン3.5.2では、Local Desktop接続経由でのローカルアプリケーションの自動化を簡素化するため、Execコマンドにnowaitおよびkillパラメータが追加されました。基本的なパターンは、スクリプトがローカルアプリケーションを起動し、テストを行い、スクリプトの終了時にそれを閉じるというものです。例:
// myapp.exeを起動し、終了を待たない
Exec "myapp.exe" nowait="true"
...
// アプリケーションをテスト
...
// アプリケーションを終了(「1」は"Exec nowait=true"で開始したプロセスの通し番号)
Exec kill="1"