TestComplete は、テストを記録する際に、自動的に対象のオブジェクトの情報を Name Mapping リポジトリーに保存します。
テストの再生時には、座標を用いて操作を行うのではなく、NameMapping リポジトリーに格納されている情報を元に操作対象を特定します。
これにより、UI に変更が生じた場合や、ウインドウの表示位置が変更された場合でも、シナリオを変更せずにテストを実行できます。
各テストプロジェクトは、Name Mapping リポジトリーを持っており、自動テストの中で使用されるアプリケーションのオブジェクトの情報が含まれます。
TestComplete は、テストの記録の開始時にオブジェクトの情報を Name Mapping リポジトリーに自動的に追加し、テストの実行時にオブジェクトを見分けるために、保存されているそれらの情報を使用します。
Name Mapping リポジトリーにはオブジェクトのプロパティと値の情報が含まれており、テスト中にオブジェクトを見分けるために使用されます。
例えば、Web ページの場合は、URL や、オブジェクト タイプ(ボタン、テキストボックス、グリッドなど)、Windows のアプリケーションの場合は、アプリケーション内のオブジェクト名、オブジェクトのテキスト情報など。Name Mapping リポジトリー内のそれぞれのオブジェクトは、記述名 (alias) も持っています。
Name Mapping リポジトリーは、プロジェクト内でテストシナリオとは別に管理されるため、テスト対象のアプリケーションに変更が生じても、テストシナリオを変更する必要はありません。それにより、テストのメンテナンスを容易にします。
すべてのオブジェクトは、階層構造で構成された Name Mapping リポジトリーに格納され、アプリケーション内で互いにオブジェクトがどのように関係するかを表します。階層構造は TestComplete がオブジェクトを素早く、正確に検出するのを助けます。
デスクトップ アプリケーション
Web アプリケーション
モバイル アプリケーション
Name Mapping リポジトリーは個々のプロジェクトにおいて 1 つのみ保有できます。他のテスト プロジェクトから Name Mapping のデータを追加する場合は、Name Mapping リポジトリーを結合することが出来ます。
Option の設定で "Map object names automatically" が有効な時、TestComplete はテストの記録時に自動的に Name Mapping リポジトリーにオブジェクトの情報を追加します。また、手動でオブジェクトの情報を追加することも可能です。この場合、画面上の情報または Object Browser から追加できます。マッピングされたオブジェクトのために、TestComplete はアプリケーション内でそのオブジェクトが識別できるようにプロパティと値を選択し、aliase も生成します。
テストを実行するとき、TestComplete はテスト対象のオブジェクトを認識するため、Name Mapping リポジトリーの情報を使用します。TestComplete がオブジェクトを検出できない場合(例えば、オブジェクトのプロパティが変更された場合など)、テストは失敗します。この場合マッピングされた基準となる情報を、一意となる情報に更新する必要があります。
通常、TestComplete はプロパティ値からオブジェクトを検出しますが、複数の条件の組み合わせや、子オブジェクトなどの他の条件を使用することもできます。サポートされる条件は以下の通りです。
ひとつまたはそれ以上のプロパティ値のペア
例えば "ObjectType=Page" + "URL=http://example.com"
なお、プロジェクトの変数や、ワイルドカードなどを使用して識別条件を指定することも可能です。
オブジェクト プロパティの条件式
プロパティの複数の値を指定するためにそれらを使用できます。
(例: WndCaption = 開く または ファイルを選択)
またはイコール以外の他の条件を使用することもできます。
(例: イコールではない、○○以上など)
追加の検索条件
オブジェクトの階層化の現在のレベルだけでなく、すべての階層から検索することが可能。
ただしその分、オブジェクトの認識までに時間が掛かる場合があります。
子オブジェクトの要求について
この条件は、指定した子オブジェクトを有している場合のみ、オブジェクトを一致させます。
TestComplete は、オブジェクトの情報を Name Mapping リポジトリーに追加したとき、適切な一意となるプロパティを選択することを試みます。Name Mapping テンプレートを作成することで、異なるオブジェクト タイプで使用されるデフォルトの一意となるプロパティを変更することが可能です。
複数の言語のアプリケーションをテストされる場合、指定した言語によって一意となるプロパティの値を設定し、複数の Name Mapping リポジトリーの設定を作成することができます。作成した設定は Name Mapping エディターで切り替えることが出来ます。
Name Mapping リポジトリー内の各オブジェクトは、alias(定義名)を持っています。例えば、ButtonAdd, linkProducts など。これらの alias は自動テスト内で、オブジェクトを参照する際に使用されます。
スクリプトテストでは、オブジェクトの階層のパスを含む、フルネームの alias が使用されます。例えば、ObjectView の代わりに Aliases.Orders.MainForm.OrdersView など。キーワードテストの場合は、見やすくするために短い表示の alias が利用されます。
Name Mapping リポジトリーはツリー形式でオブジェクトの階層を表示します。実際、以下の例では 2 つのツリーが存在(Mapped Object と、Aliases)します。Mapped Object ツリーは標準では非表示とされており、ツリーのキャプションの 下矢印ボタン をクリックすることで、表示されます。
Mapped Objects が閉じられている状態
Mapped Objects が開いている状態
Mapped Object ツリーは、Windows アプリ(デスクトップ、Web ブラウザー)の Sys と、モバイルに分類され、Object Browser 内のオブジェクトの階層を反映します。
TestComplete は必要とされるオブジェクトを検出するために、実際の階層を認識する必要があります。Mapped Object ツリー内には、"Extended Find"(すべての階層の検索) などのオプションの設定があります。
Aliase 階層は、ドラッグすることで、ツリーを再編成することができます (ツリーの親子関係は保持されます)。移動したオブジェクトが既にキーワードテストで使用されている場合は、キーワードテスト内の Aliase の情報を自動的に変更することができます。
また、オブジェクトの情報は、Aliase と Mapped Objects ツリー内で別々の名前を持つことが出来ます。この場合、Aliase ツリーからの名前のみがテストで使用されます。
オブジェクトの情報が Mappded Object ツリー内にある場合で、Aliase ツリー内に存在しない場合、フルネームは NameMapping.Sys または NameMapping.Mobile で始まります。
Name Mapping リポジトリーに存在しないオブジェクトをテストすることも可能です。各オブジェクトを参照するには、Object Browser で使用される構文を利用できます。この構文はオブジェクトタイプ(プロセス、WinForms オブジェクト、デバイスなど)とオブジェクトタイプのための標準的な一意となるプロパティの値を含みます。
例(VB Script):
Sys.Process("notepad").Window("Notepad", "Untitled - Notepad").Maximize
Name Mapping リポジトリーに追加された条件でテスト対象のオブジェクトが検出できない場合、
対象のオブジェクトが一意となるよう、条件を変更することが可能です。
アプリケーションを起動し、対象のオブジェクトを表示させます。
Name Mapping リポジトリーを開き、マッピングされた対象のオブジェクトの情報を選択し、[Edit] ボタンをクリックします。
Edit Name Mapping Item ダイアログが表示されます。
左側の "Selected" に追加されているアイテムが現在設定されている識別条件です。
右側の "Available" のリストは、対象のオブジェクトが持つプロパティです。
一意の識別条件となるよう、任意のプロパティを選択して、 ボタンで Selected に移動し、[OK] ボタンをクリックします。
また、アプリケーションのバージョンアップなどにより、Name Mapping リポジトリーに登録されている情報の一部が変更される場合があるかと思います。例えば、バージョンアップにより、実行ファイルのバージョン名が変更される、または Web アプリケーションでパラメーターにより毎回一部の情報が変更されるなど。このような場合、ワイルドカードを使用することで、そうした変化に対応することが可能であり、テストの修正を最小限に抑えることが可能です。
以下の例では、Orders のアプリケーションの実行ファイル名が変更されたことを想定して説明します。
※ Orders → Orders2
Name Mapping リポジトリーを開き、Mapped Objects から変更対象のアイテムを選択します。
下図のように、参照ボタンをクリックします。
Edit the ProcessName Property Value ダイアログが表示されますので、
この例では、Value の "Orders" の後ろに * (アスタリスク) を追加し、[OK] ボタンをクリックします。
同様に、http://www.example.com/index.asp?123456789 のように、パラメーターが設定されている URL の場合は、
http://www.example.com/index.asp* とすることで、パラメーターの値が変化しても操作が実行できるようになります。
ワイルドカードの詳細はヘルプをご参照ください。
https://support.smartbear.com/testcomplete/docs/reference/misc/using-wildcards.html
Name Mapping に関しては、原則編集する必要はありませんが、対象のオブジェクトが検出できない場合など、上記に挙げた問題が生じた場合、登録されている情報を編集することで、オブジェクトを正しく認識させることができる場合がありますので、参考にしてください。
Name Mapping の詳細情報はヘルプをご参照ください。
https://support.smartbear.com/testcomplete/docs/testing-with/object-identification/name-mapping/index.html