ロケーターの構文

Silk4J では、UI コントロールを特定するために、XPath クエリ言語のサブセットをサポートしています。

以下の表に、Silk4J がサポートする構成子を一覧します。

注: <a> は、Web ページのハイパーリンクを表す HTML タグです。
サポートするロケーター構成子 説明
// //a

現在のオブジェクトより下層にあるオブジェクトを識別します。

この例は、Web ページのハイパーリンクを識別します。

/ /a

現在のオブジェクトの直下にあるオブジェクトを識別します。それより下層にあるオブジェクトは解決されません。

この例は、現在のオブジェクトの直下にある Web ページのハイパーリンクを識別します。

属性

例 1: //a[@textContents='Home']

例 2: //div[@textContents='Price: * USD']

特定の属性によってオブジェクトを識別します。属性値には、ワイルドカード * および ? を使用できます。

例 1 は、テキスト Home を持つハイパーリンクを識別し、例 2 は、ワイルドカードを使って任意の価格を持つ div を識別します。

インデックス

例 1: //a[3]

例 2: //a[@textContents='Home'][2]

複数のオブジェクトがある場合に、インデックスを指定して特定のオブジェクトを識別します。ロケーターのインデックスは 1 から始まります。

例 1 は、3 番目のハイパーリンクを識別し、例 2 は、テキスト Home を持つ 2 番目のハイパーリンクを識別します。
論理演算子:and、or、not、=、!=

例 1: //a[@textContents='Remove' or @textContents='Delete']

例 2: //a[@textContents!='Remove']

例 3: //a[not(@textContents='Delete' or @id='lnkDelete') and @href='*/delete']

論理演算子を使って、属性を組み合わせてオブジェクトを識別します。

例 1 は、RemoveDelete のテキストを持つハイパーリンクを識別し、例 2 は、 Remove 以外のテキストを持つハイパーリンクを識別し、例 3 は、複数の論理演算子を組み合わせた例を示しています。

ancestor

例 1: //input[@id='username']/ancestor::form

例 2: //input[@id='username']/ancestor::div[@className='container']

現在のオブジェクトより上層にあるオブジェクトを識別します。

例 1 は、識別子 username を持つ input 要素を子に持つ form 要素を識別し、例 2 は、識別子 username を持つ input 要素を子に持ち、クラス名が container を持つ div を識別します。

..

例 1: //a[@textContents='Edit']/..

例 2: //a[@textContents='Edit']/..//a[@textContents='Delete']

オブジェクトの親を識別します。

例 1 は、テキスト Edit を持つハイパーリンクの親を識別し、例 2 は、テキスト Edit を持つハイパーリンクと同列にあるテスト Delete を持つハイパーリンクを識別します。

following-sibling

例: //td[@textContents='John']/following-sibling::td[2]

現在のオブジェクトより後ろにある同列オブジェクトを識別します。

この例は、テキスト John を持つテーブル セルの右側から 2 番目にあるテーブル セルを識別します。

preceding-sibling

例: //td[@textContents='John']/preceding-sibling::td[2]

現在のオブジェクトより前にある同列オブジェクトを識別します。

この例は、テキスト John を持つテーブル セルの左側から 2 番目にあるテーブル セルを識別します。

*

例 1: //*[@textContents='Home']

例 2: /*/a

オブジェクトの型(ハイパーリンク、テキスト フィールド、ボタンなど)を考慮せずにオブジェクトを識別します。

例 1 は、オブジェクトの型は任意で、指定したテキストを持つオブジェクトを識別し、例 2 は、現在のオブジェクトより 2 つ下層にあるハイパーリンクを識別します。

以下の表には、Silk4J がサポートしないロケーター構成子を一覧します。

サポートしないロケーター構成子
右辺、左辺ともに属性を指定して比較する。 //a[@textContents = @id]
属性名を右辺に指定することはサポートされません。属性名は左辺に指定する必要があります。 //a['abc' = @id]
複数のロケーターを and あるいは or で結合する。 //a[@id = 'abc'] or ..//Checkbox
複数の属性をかぎ括弧で指定する。 //a[@id = 'abc'] [@textContents = '123']

(代わりに //a [@id = 'abc' and @textContents = '123'] を使用)

複数のインデックスをかぎ括弧で指定する。 //a[1][2]
クラスあるいはクラス名の一部にワイルドカードを含むクラス ワイルドカードを明示的に指定しない構成子。 //[@id = 'abc']

(代わりに //*[@id = 'abc'] を使用)

"//*//a[@id='abc']"