- 印刷
- ダークライト
画像認識で要素選択が安定しない場合は、XPathかAccessibility IDを利用することで安定して要素を選択できる可能性があります。ここでは、具体的なXPathやAccessibility IDの利用方法をお伝えします。
XPath
ロケータにXPathを選択した場合、Autifyは自動でXPathを生成します。
自動生成されたXPathは要素の種類と表示されている順番のみを使用しますが、手がかりとなる情報追加したり余分な情報を削除することで安定性を向上させることができます。
例:
種類 | 値の例 | |
---|---|---|
/XCUIElementTypeApplication/XCUIElementTypeWindow[1]/XCUIElementTypeOther/XCUIElementTypeOther/<>XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeTable/XCUIElementTypeCell[2]/XCUIElementTypeOther[1]/XCUIElementTypeOther/XCUIElementTypeSecureTextField | ||
手動による調整後 | //XCUIElementTypeCell[contains(@value, “Password”)]//XCUIElementTypeSecureTextField | 選択したい要素にとって重要な情報だけを取り入れることができ、安定性が向上する。学習にはある程度の試行錯誤が必要 |
以下によく使われるXPathの例を示します。
属性に関わるもの
クイック要素更新画面で、対象の要素やその親子要素に特徴的な属性がついていた場合、それをXPathに含めることで安定性を向上させることができます。ここではvalue属性を利用する例を紹介します。
XPath | 指定する要素 |
---|---|
//XCUIElementTypeButton[@value=”OK”] | valueが “OK” であるボタン |
//*[contains(@name, ‘限定’)] | nameに “限定” を含む要素 |
//*[starts-with(@name, “2024”)] | nameが “2024” で始まる要素 |
//*[ends-with(@name, “ログイン”)] | nameが “ログイン” で終わる要素 |
順番に関わるもの
XPathにマッチする要素が複数ある際に、任意の順番の要素を選択することができます
XPath | 指定する要素 |
---|---|
//XCUIElementTypeButton[3] | 3番目のボタン |
//XCUIElementTypeTextField[last()] | 最後のテキストフィールド |
複合的なロケータ
選択したい要素そのものに特徴が少ない場合、他の要素との相対的な関係で要素を選択することができます。
XPath | 指定する要素 |
---|---|
//*[@value=”登録”]//XCUIElementTypeButton | valueが “登録” である要素の中にあるボタン |
//*[value=”Check out”] ~ XCUIElementTypeButton | valueが “Check out” である要素の並びにあるボタン |
//*[@name=”List”]/ *[5] | nameが “List” である要素の直下にある要素の5番目 |
Accessibility ID
他の手法で安定的に要素が選択できない場合は、Accessibility IDの設定をお勧めします。
クイック要素更新の画面で、対象要素に iOSの場合は “name” 属性、 Androidの場合は “content-desc” 属性が設定されていた場合、Accessibility IDに属性の値を設定することで対象の要素が選択できます。
対象要素がAccessibility IDを持っていなかった場合、アプリケーションのコードを変更する必要があります。
Accessibility IDの設定方法
iOS ネイティブ
対象要素に accessibilityIdentifier 属性を追加します。
Android ネイティブ
対象要素に contentDescription を追加します。
Flutter
(iOS)対象要素にSemanticsのidentifier属性を設定します。
(Android) 現時点ではご利用いただけません。要素に対してSemanticsのidentifier属性を設定すると、Page source中では “resource-id” という属性として表示されるので、XPath中で使用できます。
ReactNative
(iOS)対象要素に testID 属性を設定します。
(Android) 現時点ではご利用いただけません。要素に対してtestID属性を設定すると、Page source中では “resource-id” という属性として表示されるので、XPath中で使用できます。