UIテスト自動化 メンテナンスコストを下げたい人のためのXPath作成

UIテスト自動化において、世の中にある多くのテストツールが、アプリのオブジェクトを特定するためにXPathを使用しており、アプリの内部情報（WebであればHTMLタグや属性など）を基にして、ロケーションパスによってオブジェクトを認識するためのXPathを生成しています。

アプリによっては、以下のような、メンテナンス性が低い、または正常に動作しないXPathが生成される場合があります。通常、このようなパスが生成された場合、パスの修正が必要となります。

* アプリの内部情報が動的であるため、アプリが実行されるたびにパスが変わる
* 特定のオブジェクトを一意のパスとして生成できない（1つのパスで複数オブジェクトが認識される）
* テストスクリプトの実行環境によってアプリの内部情報が変わる（OSやバージョンが異なるなど）
* パスの情報にインデックス番号が使用される（n番目の要素として認識される）

UIテスト自動化ツールの[***Ranorex***](https://ranorex.techmatrix.jp/ "Ranorex Home")では、XPathの生成において、パス内で使用される属性情報を[***重み付けルール***](https://support2.ranorex.com/ja/userguide/ranorex-studio-expert/mapping-dynamic-ui-elements/attribute-weights/)機能で管理しています。この機能では、各属性に対して***重み付け***が設けられており、各属性に割り当てられている重み付けの値が高いほど優先的に使用されます。この値は、ユーザーが自由にルール設定できるため、上記のケースに対応したXPathを生成することができます。

たとえば、テスト自動化の学習用の練習サイトの[***Hotel Planisphere***](https://hotel-example-site.takeyaqa.dev/ja/index.html)にある***ログイン***のボタンをRanorexを使用してXPathを生成したものが以下のパスになります。<br>
　<img width="650" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3826232/5205c36a-7dfe-4d73-b5f3-d411d53debf2.png">

***A***タグに設定されている***href***属性の優先度を上げるようにルールを設定した後に、Ranorexを使用してXPathを再生成したパスが以下になります。
　<img width="650" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3826232/fa3c7613-b92a-423a-971b-497434c8c7f4.png"><br><br>


<details>
  <summary>重み付けルールの設定方法</summary>
  
1．***Ranorex Studio***を起動し、メニューバーから***設定***（＝）をクリックします。
　<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3826232/dcbbe972-9a31-4269-b6ee-22371bdd4b15.png"><br>

2．***詳細***タブを開き、***重み付けルールの編集***をクリックします。
　<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3826232/3e8527e5-479a-4649-be65-1867db27d755.png"><br>

3．表示される***重み付けルールの編集***画面にてルールを追加します。
　<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3826232/af7bf118-1abe-439e-8eff-28ddbe4e3aa5.png"><br>

ルール一覧には既存ルールが設定されており、***追加***をクリックすることで新規にルールを作成することができます。作成したルールは***有効化***または、***無効化***を選択することでルールの状態を有効/無効にすることができます。
　<img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3826232/0cdf147e-49b1-4113-bf48-a13f2a636760.png"><br>

新規ルールにて、必要な情報を設定してルールを作成します。
　<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3826232/3709290b-6705-4380-a654-a1e40c9e4f38.png"><br>

・***名前***：***ルール名***を指定します。
・***機能***：重み付けを設定したい***属性の機能名***を指定します。
・***属性***：重み付けを設定したい***属性名***を指定します。
・***重み付け***：重み付けを設定したい属性が持つ***重み付けの値***を指定します。

:::note info
***機能名***
機能名は、***Ranorex Spy***ツールを使用することで確認できます。
Ranorex Spyツールで対象オブジェクト（要素）を選択したときに、***概要**タブに表示される属性の青色の名前がその属性がカテゴライズされている機能名になります。
     
***Ranorex Spyの使用方法***
***https://ranorex.techmatrix.jp/blog/2022/11/04/ranorex_spy/***
<br><img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3826232/a2470e7c-1dfa-45a4-9ef2-5652819cf9d5.png">
:::

:::note
***重み付けの値***
各続映に設定されている重み付けの値は、***属性の一覧の表示***をクリックすることで確認できます。数値が大きいほどXPathを生成する際に使用される優先度が高く、数値が小さいほど優先度が低くなります。<br>
<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3826232/4ac30f43-8ede-4331-b8cf-3c4839f65434.png"><br><br>
:::

4．ルールを設定後、***適用***、***OK***の順にクリックし、***重み付けルールの編集***画面を閉じます。
　<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3826232/b07e0711-711d-40b3-b64b-0ae96aa83df5.png"><br><br>

:::note
***ルール条件***
ルール条件を使用することで、属性の条件を細かく設定することもできます。条件は複数指定でき、すべての条件に一致するか、もしくはいずれか1つの条件に一致するかをマッチ条件で選択することができます。動的な値で値のフォーマットを正規表現で指定したい場合などに使用できます。<br>
<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3826232/1c09b20a-5a9d-464b-ac7a-d6a7fb67b84d.png"><br><br>
:::
</details>

<br>

アプリによって、生成されるXPathをユーザーが自由にカスタマイズすることができるため、事前にルールを設定しておくことでアプリの画面変更に強いパスが作れそうです。