要素選択を安定させるTips (XPathとAccessibility ID)

Prev Next

画像認識で要素選択が安定しない場合は、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が "ログイン" で終わる要素
//*[@name="Return"] nameが "Return" である要素
(//*[@name="Done" or "完了"]) nameが "Done" もしくは "完了" である要素

順番に関わるもの

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中で使用できます。