ハートコア株式会社
HeartCore Robo Desktop 4.4 Docコレクション
21/06/18

ローカルデスクトップの自動化

最終更新日:2015年12月7日

目次
1. はじめに
2. 設定
3. 接続
4. 表示処理
5. キーボード操作
6. ローカルアプリケーションの起動


1.はじめに

HeartCore Robo Desktopバージョン3.2では、ローカルデスクトップに表示されるアプリケーションの自動化のサポートが導入されました。つまり、ロボットとテスト中の 1つ以上のアプリケーション(AUT) が同じローカルデスクトップ上で実行されます。もちろん、自動化はAUTに限定されず、通常のユーザーが実行できるデスクトップアクションを実行することもできます。

ローカルデスクトップ環境利点:

制限事項:


2.設定

ローカルデスクトップの自動化は、次の2つの接続タイプでサポートされています。
  1. ローカルデスクトップ 接続は、ローカルのJava SEのインストールに依存しています。他の依存関係はありません。接続するには、[ ログイン]ダイアログで接続を選択し、[接続]をクリックます
  2. ローカルデスクトップは、ローカルに動作するVNCサーバー上で自動化することもできます
ローカルデスクトップ のJavaに依存する接続は好ましいものです。一般に、VNCサーバーよりも信頼性が高く、英語以外の文字を入力できます(キーボードのサポートを参照)。ローカルデスクトップ接続は通常、画面ポーリングの方が高速です。VNCサーバーは、ミラードライバを使用したUltraVNCやDFMirageドライバを使用したTightVNCなど、ビデオドライバに直接接続されている場合、より良い画面パフォーマンスを提供することができます。

ローカルデスクトップVNCサーバーの互換性は明示的に保証されていません。ローカルまたはリモートのVNC接続に対して設計されたテストスクリプトは、ローカルデスクトップで正しく動作するかどうかは関係ありません。次の要素が適用されます。
  • 環境は、OSとデスクトップパラメータ(画面の解像度、色の濃さ)の点で一致しなければなりません。デスクトップのパラメータが異なる場合は、テンプレートイメージが比較に失敗し、イメージコレクションを使用してテンプレートイメージを再作成するか、新しい選択肢を追加する必要があります。
  • ローカルデスクトップ接続は、キーボードのキーの異なるセットをサポートしています。現在のシステムのキーボードレイアウトで利用可能なキーだけを押すことをシミュレートすることができます。たとえば、コンピュータが英国(GB)キーボードレイアウトを使用する場合、ドルキー( '$')はありません。RobotがPressコマンドを使用してキーを押すように指示された場合、この文字に関連付けられた物理キーが使用できないため、直接押すことはできません。このような場合のロボットは、システムクリップボードを使用して貼り付けます文字をキーボードで押すのではなく、これは、文字がテキストの一部として入力されている場所でうまく動作します。しかし、AUTが"$ keyを押し続ける"のようなものを要求 し、特定のキープレスイベントを聞いているところでは正しく動作しません 。

    もう1つの違いは、一般にVNC接続はASCII 7ビット文字セットの文字だけをサポートしますが、ローカルデスクトップ接続はシステムクリップボードでサポートされている全国(UTF-8)文字を転送できます。たとえば、ロシア語またはギリシャ語のテキストを入力することができます。これにより、ローカリゼーション(110n)または国際化(i18n)テストにロボットを使用できます。


ローカルデスクトップスクリプト記録を有効にする(Mac OS X)

Mac OS Xでスクリプト記録を有効にするには、ロボットプロセスにアクセシビリティ権限を与える必要があります。

  1. システム環境設定を開き、セキュリティ&プライバシーに移動します。
  2. 左側の列のアクセシビリティを選択して、"TPlanRobot "アプリの横にあるチェックボックスを調べます。クロスプラットフォームのリリースを使用している場合、アプリは「Java」というタイトルになる可能性があります。
  3. Lockアイコンをクリックして右の列のロックを解除し、チェックボックスをオンにします。ロックを もう一度クリックして変更を適用します。
  4. 変更を適用するには、ロボットを再起動します。


3.接続

テストスクリプトからローカルデスクトップに接続するには、Connectコマンド(TPRスクリプト)またはconnect() メソッド(Javaテストスクリプト)を使用します。引数URLは、「java:// localhost」 (ローカルデスクトップ接続タイプ)または「rfb:// localhost」(VNCサーバ)のいずれかの形式である必要があります。

たとえば、次のコマンド/メソッド呼び出しは、ローカルデスクトップ接続を使用してローカルデスクトップに接続します。

TPRテストスクリプト:     Javaテストスクリプト:    Connect java://localhost
connect("java://localhost");

5900の標準ポートで動作するVNCサーバーを使用してローカルデスクトップに接続するには:

TPRテストスクリプト:     Javaテストスクリプト:    Connect rfb://localhost
connect("rfb://localhost");

URLは、-c / - connect CLIオプションと一緒に使用して、ロボットの起動時に接続を確立することもできます。接続に成功ロボットがで起動にワークフローチャートの代わりにデスクトップビューアとの接続を示しますアプリケーションのタイトルの表示(javaの:// localhostのRFB:// localhostを:5900)。

重要ローカルデスクトップ接続を使用中にOSのキーボードレイアウトを変更しないでください。接続が確立されたときにレイアウトをマップし、後で変更するとテストスクリプトが無効なキーを押す可能性があります。キーボードの接続を解除して再接続するには これは、テストスクリプトからでも、切断コマンドと接続コマンド(TPR形式)またはdisconnect()   とconnect() メソッド(Java形式)。


4.表示処理

上の単一ディスプレイ環境のローカルデスクトップの自動化プロセスは、リモート1とは異なります。ロボットがローカル画面で作業する必要がある場合まずGUIを非表示にする必要があります。テストスクリプトの開発フェーズでは、ユーザーが画像比較の実行、スクリーンショットの取得、画面の場所または矩形の定義、新しいテンプレートイメージの作成、またはコンポーネントキャプチャの実行を選択する状況にも適用されます。同様に、スクリプトの実行が開始されると、GUIは非表示になり、スクリプトが終了するまで復元されません。スクリプトの実行を一時停止し、GUIを復元するには、マウスを動かします。この動作は、ローカルマシンを介して変更することができますPreferences(環境設定)ダイアログのパネルを開きます。これらのオプションを使用すると、スクリプトの一時停止の目的とUI非表示の動作にマウスの感度を設定できます。

ロボット v4.1.1ではマルチディスプレイ環境を完全にサポートしました。特定の画面またはそのすべてを自動化することができます。2つ以上のディスプレイがある場合、ログイン ウィンドウにはスクリーンセレクタが表示され、ドロップダウンメニューには次のオプションがあります。

ローカルデスクトップログオン

画面の番号は1から始まり、最初の番号は通常1番目の番号です。

最も効率的なセットアップは、1つのディスプレイ
自動化し、もう1つのディスプレイにロボットGUIを配置することです。これにより、スクリプトの実行とグラフィカル操作でGUIを非表示にする必要がなくなります。

テストスクリプトまたはCLIから特定の画面に接続するには、次のように画面番号を接続URLに追加します。番号を省略するか0にすると、接続はすべての画面を自動化します。この形式は、-c / - connect CLI接続にも適しています。最近使用した接続のURLは、Tools-> CLI Wizardウィンドウからコピーすることができます。別の方法として、接続に名前を付けてデスクトップ - >接続マネージャーウィンドウを開き、URLの代わりに使用します。

TPRテストスクリプト:     Javaテストスクリプト:    Connect java://localhost?screen=1
connect("java://localhost?screen=1");

重要:パフォーマンス上の理由から、画面の構成はロボットの起動時に1回だけロードされます。正しい動作を保証するために、ロボットの動作中は画面のレイアウトを変更したり、表示を追加/削除したりしないでください。

接続されたディスプレイのロボット 4.3.1のプロパティは、以下のように変数を介してテストスクリプトに公開されているため、
  • 画面(ディスプレイ)の数は_DISPLAY_COUNT
  • [X、Y、幅、高さは、各ディスプレイの座標の4つの変数内に格納されている<N> _DISPLAY_X__Display _Y_ <n>は_DISPLAY_W_ <N> 及び<N> _DISPLAY_H_ <n>は、画面番号です。ナンバリングは1から始まり、注文はローカルシステムによって決定されます。スクリーンパラメータを使用して接続が1つのディスプレイに限定されている場合、システムによって割り当てられた通常の番号に関係なく、その番号は常に1になり、ログインダイアログ画面レイアウトのプレビューに表示されます。
  • CompareToWaitforの一致/不一致ClickおよびDragなどの画像比較コマンドは、新しい変数のセットを入力して、コンポーネントまたはテキストが配置されていた画面番号を示します。これらは、_COMPARETO_DISPLAY_NO(番号1の最上位一致の表示番号)と_COMPARETO_DISPLAY_NO_ <i>です (<i>は一致する場所の通常の番号です)。これにより、関連するディスプレイに応じて動作を切り替えることができます。例えば:

// Search for a component on all screens
Compareto "mount.png" method= "search2"

// Exit if not found
if ({_EXIT_CODE} > 0) {
    Exit "1"
}

// Test the display the component is showing on
if ({_DISPLAY_NO} == 1) {
    // Component on the first display -> do something
} else {
    // Component on another screen -> do something else
}

より一般的な説明については、Var コマンド仕様の暗黙の変数の表も参照してください。バーチャルボックスで実行されているLinuxゲストシステムのローカルデスクトップ自動化では、画面が正しく表示されないことがあります。典型的な症状は、ロボットが誤ったスクリーンショットやテンプレート画像を生成することです。 バーチャルボックスのゲストシステムの
表示設定で3Dアクセラレーションを無効にして修正します。

5.キーボード操作

接続が確立されると、キーボードマッピングの進行状況を示すウィンドウがポップアップします。正しい操作が表示されている間、デスクトップで動作しないようにする。

バージョン4.1では、格納されたキーボードマップが導入されました(ローカルVNC接続には適用されません)。キーボードがマッピングされると、ファイルに保存されます。その後の接続では、キーボードレイアウトに変更がない限り、それを再利用します。このアプローチはより高速であり、短いテストスクリプトのシーケンスを実行するテストスイートに対するアプリのフォーカスの問題を回避します。

キーボードマップは、デフォルトでユーザーのホームフォルダに保存されます。地図を管理する必要がある場合は、手動でtprlkm_接頭辞と.keymap 拡張子の付いたファイルを探します。各入力言語とキーボードレイアウトごとに1つのファイルがあります。たとえば、ドイツ語のキーボードレイアウトは、として格納され<home>/tprlkm_de_DE.keymapます。
ロボットは、インストールディレクトリ(robot.jar ファイルを含むフォルダ)に配置されたキーボードマップファイルも受け入れます。これらのマップは、上記のファイル名の規則に従う必要があります。これらは、ユーザーのホームフォルダに配置されたものより優先されます。この機能により、カスタムのロボットベースのソリューションを作成できます。

格納されたマップの使用はlocalDesktop.useStoredKeymaps 、ユーザー構成ファイルの設定によって制御されます。[ ログイン]ウィンドウまたは[ 環境設定] ウィンドウの[ ローカルデスクトップ ]パネルで設定できます。プログラムでオプションを変更する必要がある場合は、設定の環境設定のドキュメントをお読みください。


6.ローカルアプリケーションの起動

バージョン3.5.2では、Execコマンドnowaitおよびkillパラメータで拡張し、ローカルデスクトップ 接続を介して
ローカルアプリケーションの自動化を簡素化しました。基本的なパターンは、スクリプトがローカルアプリケーションを起動し、それをテストし、スクリプトの最後に閉じます。例:
// Start myapp.exe and don't wait until it finishes
Exec
"myapp.exe"
nowait="true"

...
// Test the application
...

// Kill the application ('1' is ordinary number of the process started with "Exec nowait=true")
Exec 
kill="1"