はじめに
T-DASHではWebアプリ、Windowsアプリ、モバイルアプリをひとつのプラットフォームでテスト自動化できます。
テスト自動化を進める上で、UI要素を正確に特定するためのXPath取得は欠かせない工程です。
しかし、多くの人が以下のような課題を抱えています。
- 要素の階層が深く、XPathを手動で記述するのが大変
- 動的に生成される要素に対応できない
こうした課題を解決するために、T-DASHで採用しているFlaUIでのXPath取得方法を紹介します。
対象環境
T-DASHでは以下の環境をサポートしています。
-
サポートするフレームワーク
- Win32
- WinForms
- WPF
-
主な技術
- FlaUI
XPath指定方法
- UI要素特定
FlaUIではXPathに以下のようなプロパティを活用します。
プロパティ名 | 内容 |
---|---|
ControlType | UI要素の種類を表します(例: ボタン、テキストボックス、リストなど)。 |
ControlIndex | 同じ種類のコントロールが複数存在する場合のインデックス番号です。 特定の要素を一意に識別するために使用します。 |
AutomationId | 開発者が設定する一意の識別子で、最も安定した要素特定に使用されます。 ただし、全ての要素に設定されているわけではなく、動的に生成される場合もあります。 |
Name | UI要素の表示名やラベルを表します。 特定の要素を識別する際に便利ですが、同じ名前を持つ要素が複数存在する場合もあります。 |
ClassName | 要素のクラス名を示します。カスタムコントロールや独自に定義されたUI要素を特定する際に役立ちます。 |
HelpText | UI要素に関連付けられた補助テキスト(例: ツールチップやアクセシビリティの説明)。操作ガイドや詳細情報の確認に利用できます。 |
プロパティを活用して、動的要素や階層が深い要素を簡単に特定できます。
T-DASHではWinツール画面の以下の部分でプロパティを確認できます。
- 特定の要素に柔軟に対応する方法
例えば、以下のようなWindowsアプリ画面のRightClick
ボタンをXPathで指定する場合
要素のツリー構造としては以下になっています。
この場合、XPathのフルパスとしては以下のように記述できます。
/Window/Tab/TabItem/Button
このXPathをいくつかの条件を組み合わせて作成します。
1. ボタンのIndexを指定する
ControlIndex
を利用して、特定のインデックスを指定できます。例えば、Button[3]
と指定すると、3番目のボタンを特定します。
/Window/Tab/TabItem/Button[3]
ControlIndexを利用して、Winツール上で1/1
になっているか確認できます。
2. プロパティを組み合わせてand
条件で組み合わせて指定する
XPathでand
を使用して、複数の条件を組み合わせることができます。例えば、Name
とClassName
の両方を条件に指定することができます。
/Window/Tab/TabItem/Button[@Name='RightClick' and @ClassName='Button']
3. //
を利用して、階層内の子要素どこかにある要素を指定する
//
を使うことで、指定した要素がどの階層にあっても検索することができます。これにより、深い階層の要素を特定できます。
/Window//Button[@Name='RightClick' and @ClassName='Button']
4. *
を利用する
*
を使うことで、ControlType
を指定せずに、任意のコントロールタイプを対象にできます。これにより、ControlType
が動的に変わる要素にも対応することができます。
/Window//*[@Name='RightClick' and @ClassName='Button']
この方法で、ControlType
を特定せず、Name
とClassName
のみで要素を特定することができます。
最後に
FlaUIでは、WebのXPathのようにUI要素を特定することができますが、動的な要素や深い階層の要素を取り扱う際に、プロパティを活用することでより柔軟かつ安定したテスト自動化を実現できます。
T-DASHでWindowsアプリ自動化を行う際にXPathで悩まれている方の参考になれば幸いです。