Weight rules and dynamic IDs | Ranorex
Help CenterUser GuideRanorex Studio expert

重み付けルールと動的な ID

前のセクションで、属性の重み付けが RanoreXPath 式の生成にどのような影響を与えるのかを説明し、また、重み付けの変更方法を説明しました。このセクションでは、属性の重み付けを使用して、テスト自動化における、より複雑な問題を解決します。

このために、重み付けルールを使用して属性の重み付けを調整し、ルール条件を使用してルールを適用します。この例では、テスト対象アプリとして、Ranorex Studio Demo Application を使用します。

Demo Application と Spy の起動

Ranorex Studio Demo Application をまだダウンロードしていない場合には、ここ からダウンロードし、任意のフォルダーに解凍してください。

Demo Application を起動し、Dynamic IDs タブをクリックします。
Show image with dynamic ID をクリックします。

Note icon

メモ

表示されている画像は、チェックボックスをクリックするたびに、ランダムな新しい ID を受け取ります。現在の ID は画像の右側に表示されています。

識別に動的な ID を使用している場合の問題

UI 要素を識別するために動的 ID を使用すると、どのような問題が発生するのかを確認してみましょう。

画像がまだ表示されていない場合には、Show image with dynamic ID をクリックします。
Ranorex Spy で Track をクリックして、Demo Application 内の画像をトラッキングします。生成されたRanoreXPath 式を確認します。
Demo Application で、画像を非表示にします。
画像を再度表示します。
画像を再度トラッキングし、生成された RanoreXPath 式を確認します。

画像の表示/非表示を切り替えると、そのたびに新しい ID が生成されます。再表示の前後で同じ画像をトラッキングすると、異なる RanoreXPath 式が生成されます。これらの式では、ControlName 属性で異なる値が使用されています。

画像を最初に表示したときの RanoreXPath 式
画像を再表示したときの RanoreXPath 式

Note icon

メモ

動的な ID や値は、常にすぐに動的なものであると認識できるわけではありませんが、多くの場合、固定の接頭辞や接尾辞 (例: img_) と、特定のパターンに従わない、英数字の文字列で構成されます。

接頭辞 img_
ランダムで動的に生成される、英数字の文字列

動的な ID が読みにくいものであることはさておき、このような値を含む RanoreXPath 式は、堅牢なオブジェクト認識、つまり、この UI 要素を参照するテストの自動化を妨げることになります。動的な UI 要素の RanoreXPath 式を毎回手動で編集することなく、この問題を解決するためには、属性の重み付けを変更し、重み付けルールを実装する必要があります。

新しい重み付けルールの作成

動的な ID を含まない、堅牢な RanoreXPath 式を生成するには、属性の重み付けを調整した、新しい重み付けルールを作成する必要があります。これにより、Ranorex Studio は、UI 要素を識別するために、動的な属性の使用を避け、より堅牢な属性を使用します。

今回の例では、自動的に選択された ControlName 属性は、テクノロジー固有の機能である WinFormsControl グループに属しています。

ControlName の値は動的な ID です。また、この属性の重み付けは 150 です。したがって、Ranorex Studio は、RanoreXPath 式の生成にこの属性を使用します。
ControlTypeName 属性は固定値 PictureBox を持つため、ControlName の代わりに使用することができます。しかしながら、重み付けが低く設定されているため、調整する必要があります。

ここでは、Ranorex Studio が RanoreXPath 式を生成する際に、ControlName の代わりに ControlTypeName 属性を使用するよう、重み付けルールを定義します。このルールを定義するには、属性の重み付けの編集ダイアログ ( ⇢ 属性の重み付け 参照) を開きます。

編集ダイアログで、追加 をクリックします。
名前を入力します。
重み付けを変更したい属性を含む機能を選択します。今回の例では Control です。
重み付けを変更したい属性を選択します。今回の例では ControlName です。
新しい重み付け値を設定します。今回の例では、ControlNameの重み付けを 99 に減らします。これにより、Ranorex Studio が RanoreXPath 式の生成の際にこの属性を無視し、高い重み付けを持つ他の属性の使用を試みます。今回の例では ControlTypeName 属性が使用されることになります。
OK または 適用 をクリックします。

tipp icon

ヒント

ある属性の重み付けを減らす代わりに、他の属性の重み付けを増やすこともできます。今回の例では例えば、ControlTypeName の重み付けを 150 以上に増やすこともできます。どちらを選択するかは好みの問題です。

新しい重み付けルールのテスト

重み付けルールが意図したとおりに動作するか確認してみましょう。

Demo Application を起動します。
Dynamic IDs タブをクリックします。
Show image with dynamic ID をクリックします。
Ranorex Spy で Track をクリックし、画像をトラッキングします。

ControlName 属性の代わりに ControlTypeName 属性を使用して生成された RanoreXPath 式
概要を確認すると、ControlName 属性は依然として動的な ID であることが分かります。しかしながら、この属性の重み付けが 99 に変更されたことで、RanoreXPath 式の生成の際に無視されています。

動的な ID の変更に対して、堅牢な RanoreXPath 式を生成することができました。しかしながら、この重み付けルールは、すべての WinForms の UI 要素に適用されるため、ControlName 属性が使用されなくなっています。これは、ControlName が堅牢な属性である UI 要素を識別しようとした場合には、逆に問題となる可能性があります。これを解決するには、重み付けルール条件を適用する必要があります。

ルール条件の作成

ルールがすべての WinForms の UI 要素に適用されないようにするには、ルール条件を定義する必要があります。

Note icon

メモ

適切なルール条件を作成するには、動的な ID のパターンを認識する必要があります。今回の例では、動的な ID は、常に接頭辞 img_ で始まり、英数字の文字列が続きます。

ルール条件は以下の手順で作成します。

属性の重み付けの編集ダイアログを開きます。
作成したルールを選択します。
条件の追加 をクリックします。

ここでは、条件が参照するソース、つまり、定義した属性と正規表現を RanoreXPath 式の中に持つ必要がある UI 要素を設定します。これらのオプションは、Ranorex Spy で表示される UI 要素ツリーのノードに対応しています。

  • self: Ranorex Studio は、識別しようとしている (つまり、RanoreXPath を生成しようとしている) UI 要素自身をチェックします。今回の例の場合、猫の画像です。多くの場合、これが適切な設定です。
  • parent: Ranorex Studio は、識別しようとしている (つまり、RanoreXPath を生成しようとしている) UI 要素の親である UI 要素をチェックします。今回の例の場合、画像が含まれるコンテナーです。
  • toplevel: Ranorex Studio は、識別しようとしている (つまり、RanoreXPath を生成しようとしている) UI 要素のトップレベルの祖先である UI 要素をチェックします。今回の例の場合、アプリ (= Demo Application) です。

UI 要素の RanoreXPath に存在し、定義された正規表現を含む必要がある属性です。つまり、動的な値を持つ属性です。上記のルール定義で選択した機能(Capability)のすべての属性が利用できます。今回の例の場合、ControlName が動的な ID を持つ属性のため、これを選択します。
属性の値がチェックされる ⇢ 正規表現 です。正規表現にマッチした場合に、条件が満たされます。今回の例の場合、UI 要素の RanoreXPath 式に、接頭辞 img_ と英数字の文字列のみからなる値を持つ ControlName 属性が含まれている場合にのみ、重み付けルールを適用します。

ルール条件のテスト

ルール条件が意図したとおりに動作するか確認してみましょう。そのためにまず、動的な ID を持つ UI 要素、つまり、Demo Application にある画像をトラッキングします。これにより、生成された RanoreXPath が ControlName 属性を使用しないよう、重み付けルールが正しく適用されているか確認できます。

次に、動的な ID を持たない UI 要素をトラッキングします。これにより、生成された RanoreXPath が、ControlName 属性を使用するように重み付けルールが適用されているかを確認できます。

動的な UI 要素のトラッキング

Demo Application を起動します。
Dynamic IDs タブをクリックします。
Show image with dynamic ID をクリックします。
Ranorex Spy で Track をクリックし、画像をトラッキングします。

ControlName 属性の代わりに ControlTypeName 属性を使用して生成された RanoreXPath 式
この UI 要素のすべての属性の概要

意図したとおり、重み付けルールが適用されていることが確認できます。

動的ではない UI 要素のトラッキング

Demo Application を起動します。
Image-based automation タブをクリックします。
Show image をクリックします。
Ranorex Spy で Track をクリックし、画像をトラッキングします。

TheCat という値を持つ ControlName 属性を使用して生成された RanoreXPat h式
この UI 要素のすべての属性の概要

意図したとおり、重み付けルールが適用されないことが確認できます。