RanoreXPath - RanoreXPath examples | Ranorex Studio User Guide
Help CenterUser GuideRanorex Studio advanced

RanoreXPath の例

この章では、特定のシナリオにおける RanoreXPath 式の詳細な例を説明します。

tipp icon

スクリーンキャスト

以下のスクリーンキャストで、この章で説明している内容を確認できます。

Watch the screencast now

テストの定義

このセクションのすべての例は、Ranorex Studio Demo Application を使用しています。ほとんどの例で、このアプリの UI-element test area タブを使用しています。

Ranorex demo application - UI-element test area

Ranorex demo application – UI-element test area

Ranorex Studio Demo Application の UI-element test area タブ

Ranorex Studio Demo Application のダウンロード

以下のリンクからダウンロードできます。

ダウンロード

File: Ranorex Studio Demo Application

Download file

シンプルなボタンの識別と RanoreXPath の汎化

ここでは、ユーザー インターフェースでシンプルなボタンを識別してから、対応する RanoreXPath 式が任意のボタンにマッチするように汎化します。

Ranorex Spy で、Demo Application の UI-element test are にある、Exit ボタンをトラッキングします。

トラッキング後の Spy の表示は、以下のようになります。

Simple button identification

自動生成された、Exit ボタンの RanoreXPath
Exit ボタンが、ルート要素 RxMainFrame の子であることを示している、ツリー ブラウザーの表示
属性値 @controlname='RxButtonExit' で識別されている Exit ボタン
1 個の UI 要素が見つかったことを示している、Spy のステータス バーの表示

RanoreXPath の汎化

RanoreXPath の汎化は、詳細度を下げ、堅牢性を向上させることを意味します。

今回の例では、Exit ボタンが、button ロールによってのみ識別されるよう、RanoreXPath を汎化します。これは、ボタンの属性を削除することでおこないます。Exit ボタンは、要素ツリーのこのレベルにおいて、唯一のボタンであるため、属性を削除しても引き続き正しく識別され、その RanoreXPath は UI の変更に対してより堅牢になります。

Spy で、RanoreXPath 行をクリックし、[@controlname='RxButtonExit'] 属性を削除し、Enter を押下します。

Spy での表示は以下のようになります。

Generalization of RanoreXPath specification

button ロールのみが指定された、汎化された RanoreXPat
Exit ボタンがルート要素の子であることを示している、ツリー ブラウザーの表示
汎化された RanoreXPath のパス エディターでの表示
1 個の UI 要素 (つまり Exit ボタン) が見つかったことを示しているステータス メッセージ

Note icon

メモ

要素ツリーの同じレベルに複数のボタン (または、汎化した RanoreXPath のいずれかの種類の UI 要素) が存在する場合、RanoreXPath 式はそれらすべてを識別します。

識別属性の変更

UI 要素をトラッキングすると、Ranorex Studio は RanoreXPath を自動的に生成し、その際に、識別に使用する属性も自動的に決定されます。当然のことながら、RanoreXPath で識別に使用する属性は変更できます。

Demo Application の UI-element test area にある、Exit ボタンをトラッキングします。
RanoreXPath 行をクリックし、パス エディターに切り替えます。
変更したい属性があるノード (例えば button ノード) を選択します。
任意の属性を選択/選択解除します。例えば、controlname 属性を選択解除し、代わりに controltext を選択します。RanoreXPath が自動的に変更されます。

User-defined identification attribute

自動的に決定された controlname 属性を選択解除し、代わりに controltext 属性を選択
変更が反映された RanoreXPath
変更が反映されたパス エディターの表示
この RanoreXPath で 1 個の UI 要素が見つかったことを示しているステータス メッセージ

ワイルドカード

ワイルドカードによって、RanoreXPath を UI 構造の変化に対してより堅牢にすることができます。

Note icon

メモ

以下のワイルドカードがあります。

/* 1 ツリー レベルのあらゆる UI 要素
/? 0 または 1 ツリー レベルのあらゆる UI 要素
// 複数のツリー レベルのあらゆる UI 要素

 

/? (any optional)

Demo Application の UI-element test area 全体をトラッキングします。

'Any' wildcard example

Ranorex Spy での表示は以下のようになります。

Spy tree browser and path editor of '/?' example

ルート要素は、RanoreXPath 式の最初の固定部分に表示されます。
中央の UI 要素 TabPageList は表示されていません。パスをより堅牢にするために、代わりに 2 個の /? ワイルドカードが挿入されています。
最後のノードは、対象の UI 要素、つまり、UI-element test area タブ ページ全体です。これは、RanoreXPath の 2 番目の固定部分です。

RanoreXPath の解釈

Example RanoreXPath specification with /? wildcard

対象の要素 3 は、ルート要素 1 の子孫の要素であり、必須ではない最大 2 つ (0,1 または 2) の UI 要素 2 が間にあります。

// (any descendants)

UI の中から、”深さ” が分からない要素を識別する必要がある場合があります。any descendants ワイルドカードを使用することで、ルート ノードと最終ノードの間にある、すべての中間ノードを包括できます。

Ranorex Spy のツリー ブラウザーで、以下の RanoreXPath 式を入力します。

RanoreXPath specification with // (any descendants) wildcard

RanoreXPath 式の最初の部分は、ルート ノード、つまり、Demo Application のウィンドウを表しています。この部分は最初の固定ノードです。
2 番目の部分は、any descendants ワイルドカードです。この部分は、ワイルドカード ノードです
3 番目の部分は、対象の UI 要素を表す最終ノードです。この例では、radiobutton ロールを持つ任意の UI 要素です。この式は、ルート要素の子孫である、すべてのラジオ ボタンを識別します。

Spy での表示は以下のようになります。

Search result for // (any descendant) wildcard operator

RanoreXPath のパス エディターでの表示です。.
ツリー ブラウザーでは、異なる 2 つのレベル (レベル 3 および 4) で、7 個のラジオ ボタンが表示されています。
ステータス メッセージには、7 個の要素が見つかったことが表示されています。

/* (any)

識別したい要素の UI での “深さ” が分かっていて、中間ノードが無関係であることが分かっている場合には、RanoreXPath を堅牢にするために、any ワイルドカードが使用できます。

RanoreXPath specification with /* (any) wildcard

RanoreXPath 式の最初の部分は、ルート ノード、つまり、Demo Application のウィンドウを表しています。この部分は最初の固定ノードです。
2 番目の部分は、3 つの異なるレベルの 3 個の要素を表す、3 個の any ワイルドカードで構成されています。
3 番目の部分は、対象の UI 要素を表す最終ノードです。この例では、radiobutton ロールを持つ任意の UI 要素です。この式は、ルート要素の 3 レベル下にある、すべてのラジオ ボタンを識別します。

Spy での表示は以下のようになります。

Search result for /* (any) wildcard operator

RanoreXPath のパス エディターでの表示です。それぞれのワイルドカードは、ルート要素配下の各レベルを表します。
ツリー ブラウザーでは、ルート要素の 3 つ下のレベルの、5 個の radiobutton 要素が表示されています。他のレベルにあるラジオ ボタンは識別されていません。
ステータス メッセージには、5 個の要素が見つかったことが表示されています。

RanoreXPath 式の詳細化

RanoreXPath 式が汎化されすぎていて、識別される UI 要素が多すぎる、あるいは正しくない場合があります。このような場合には、式を詳細化する必要があります。

汎化した RanoreXPath

この例ではまず、非常に汎化された RanoreXPath を作成します。Ranorex Studio Demo Application の UI-element test area タブにある、すべてのボタンを識別します。

Spy で以下の RanoreXPath を入力し、Enter を押下します。

Example for initial general RanoreXPath specification

RanoreXPath のパス エディターでの表示です。
ツリー ブラウザーでは、17 個の識別されたボタンが表示されています。
ステータス メッセージには、17 個の要素が見つかったことが表示されています。

詳細化の最初のステップ

17 個のボタンは明らかに多すぎるため、RanoreXPath を詳細化する必要があります。ここでは、ボタンに属性を追加します。非表示状態ではないボタンのみを識別するために、visible 属性を指定します。

RanoreXPath の最後の部分を以下のように変更し、Enter を押下します。

Example for narrowing RanoreXPath specification - part I

新しい RanoreXPath のパス エディターでの表示です。
ツリー ブラウザーでは、15 個のボタンが表示されています。
ステータス メッセージには、15 個の要素が見つかったことが表示されています。

詳細化の次のステップ

ボタンの数が 2 つ減っただけなので、RanoreXPath をさらに詳細化する必要があります。and 演算子を使用して、さらに別の属性を組み合わせることができます。

RanoreXPath の最後の部分を以下のように変更し、Enter を押下します。

Example for narrowing RanoreXPath specification - part II

新しい RanoreXPath のパス エディターでの表示です。2 つの属性が表示されています。
ツリー ブラウザーでは、2 個のボタンが表示されています。
ステータス メッセージには、2 個の要素が見つかったことが表示されています。

tipp icon

ヒント

and 演算子については、⇢ RanoreXPath の構文 を参照してください。

結果

詳細化した RanoreXPath 式によって、2 個のボタンのみが識別されるようになりました。

Narrowed RanoreXPath search result example

ツリー位置による UI 要素の選択

RanoreXPath が複数の要素を識別している場合、要素ツリー内の位置を指定することで、要素を選択できます。

Ranorex Spy で以下の RanoreXPath を入力し、Enter を押下します。

Example for selecting elements in RanoreXPath specifications

RanoreXPath のパス エディターでの表示です。述語の後に、位置演算子 [2] を追加することで、直前の RanoreXPath によって識別されている 2 個の要素から、2 番目の要素を選択します。
ツリー ブラウザーでは、2 番目の要素のみが表示されています。
ステータス メッセージには、1 個の要素が見つかったことが表示されています。

Demo Application の UI では、Button 1 が識別されます。

RanoreXPath selection result
Note icon

メモ

要素ツリー内の位置のみが関係します。上記の Button 1 のように、UI 上では要素の位置は異なるかもしれません。

ツリー ビュー アイテムの識別

ツリー ビューは、一般的な UI 要素です。ここでは、Ranorex Studio がこれらの UI 要素をどのように識別するのかを説明します。

Ranorex Spy で、Track ボタンをクリックします。.
Demo Application の UI-element test area で、Web and mobile testing ツリー アイテムをクリックします。

Tracking tree UI-elements with Ranorex Spy

Ranorex Spy での表示は以下のようになります。

Identification of a tree element with Ranorex

ツリー アイテムの RanoreXPath です。
堅牢性を向上させるため、Ranorex Studio は、2 個の any optional ワイルドカード (/?/?) を自動的に挿入します。
Spy の要素ツリーでは、ツリー ビューの子孫として、ツリー アイテム Web and mobile testing を表示しています。

ツリー ビューのサブアイテム

Ranorex Spy で、Track ボタンをクリックします。
Demo Application の UI-element test area で、Web and mobile testing の子のツリー アイテム Endpoints をクリックします。

Tracking sub-tree UI-elements with Ranorex Spy

Ranorex Spy での表示は以下のようになります。

Identification of sub-tree elements with Ranorex Spy

ツリー アイテムの RanoreXPath です。サブツリー アイテムは、その親と同じ方法、つまり、ロールと属性を使用して識別されています。
先祖のツリー ビュー全体が、固定ノードして扱われます。
固定ノードと最終ノードの間のツリー アイテムは、any descendants (//) 演算子によって包括されます。
サブツリー アイテム Endpoint は、それが持つ先祖ツリー アイテムの数に関わらず、識別されます。

Note icon

メモ

Ranorex Studio は、すべてのサブツリー アイテムを、通常のツリー アイテムとして扱い、同じ様に述語 (属性+値) を使用して識別します。ツリー構造が干渉しないようにするために、any descendants 演算子も挿入されます。これにより、ツリー アイテムがツリー内のどこにいても識別できます。

軸指定子によるツリー兄弟の識別

ツリー アイテムの兄弟を識別したい場合には、⇢ 軸指定子 (Axis) を使用することで識別できます。軸指定子は、特定のノードを基準にしたノードの指定がおこなえます。以下で、following-sibling を使用した例を説明します。

Ranorex Spy で、以下の RanoreXPath を入力して Enter を押下します。

Applying axis specifiers to RanoreXPath specifications

Endpoints ツリー アイテムを識別する部分の後に、following-sibling::treeitem を追加した RanoreXPathです。この軸指定子は、treeitem ロールを持ち、Spy の要素ツリー内で同じレベルにあるEndpoints ツリー アイテムの下にある、すべての UI 要素を識別することを意味します。
RanoreXPath のパス エディターでの表示です。
ツリー ブラウザーでは、Endpoints アイテムの後に続く唯一の兄弟である、Mobile testing ツリー アイテムが表示されています。

Identification of following-sibling tree item

RanoreXPath は最初に Endpoints アイテムを識別し、次に、後に続く兄弟である Mobile testing アイテムに進みます。

Note icon

メモ

following-sibling 軸指定子は、後に続く兄弟が複数ある場合、そのすべてを返します。

テーブル アイテムの識別

ここでは、テーブル アイテムの識別方法について説明します。

テストの定義

この例では、Demo Application の UI-element test area にあるテーブルから、Thomas Bach という名前の人物の年齢を含むセルを、より堅牢な形で識別します。Thomas という名前を含むセルと、これに続く年齢を含むセルの両方を識別する必要があります。

Table cell specification - test definition

Thomas Bach の情報を含む行 (row) です。
Thomas Bach の年齢を含むセル (cell) です。このセルを堅牢に識別する RanoreXPath を作成します。

絶対位置指定での name セルの識別

最初に、Thomas という名前を含むセルを識別します。以下の画像のように、セルをトラッキングして、セルへの絶対位置指定での RanoreXPath を生成するのが簡単な方法です。

Absolute table cell specification

指定したセルへの、絶対位置指定の RanoreXPath
RanoreXPath は、accessiblename = 'FirstName Row3' であるセルを識別しています。この属性値は、テーブルにおけるセルの位置を示しています。このセルの現在の値は Thomas です。
識別された UI 要素の、Spy の要素ツリーでの表示

変更に対して脆弱

絶対位置指定の RanoreXPath には問題があります。テーブルをソートやシャッフルするなどして、テーブルが変更されると、識別されたセルの値は Thomas ではなくなります。

Table cell shuffle

テーブルのセル配置をシャッフルすると…
…絶対位置指定の RanoreXPath は、Thomas という名前ではなく、セルの位置のみを考慮しているため、期待する結果になりません。

セル コンテンツを指定した RanoreXPath

accessiblename 属性を使用してセルを識別する代わりに、セル内のテキストを参照する、text 属性を使用します。

しかし、Thomas というテキストを含むセルは 2 つあるため、これはまだ堅牢と言える解決方法ではありません。

Cell content specification

識別にセル コンテンツを使用することで、セルのシャッフルに対して堅牢になりますが…
…指定したコンテンツを含むすべてのセルが識別されてしまいます。

さらなる絞り込み

FirstName 列が Thomas であるセルのみが識別されるようにする必要があります。セルの accessiblename に関する別の属性を、述語に追加します。

Narrowed cell specification

RanoreXPath の述語に 2 つの属性を指定して絞り込んだセル
FirstName 列が Thomas である、1 個のセルのみを識別

tipp icon

ヒント

場合によっては、さらに属性や軸指定子を追加して、RanoreXPath をさらに詳細化する必要があります。

絶対指定から相対指定へ

FirstName に Thomas を含むセルを堅牢な形で識別できたことで、Thomas の年齢 (age) のセルを識別することができます。

これは、パスを相対指定することでおこないます。つまり、parent 軸指定子 (省略系: ..) を使用し、アンカー ポイント (Thomas セル) から行 (row) へ戻り、そこから Age のセルへ移動します。これにより、Age のセルが Thomas のセルの位置に関連付けられ、常に正しく識別されるようになります。

Relative cell specification

parent 軸指定子と accessiblename 属性を使用した、相対位置指定の RanoreXPath
Thomas Bach の年齢 (42) のセルを正しく識別