Firebugを介して相対XPathを見つけている間、次のように作成されます
.//*[@id='Passwd']
---------開始時にドットを使用しないとどうなるか?
Xpathに//*
を追加するだけです-ハイライトされます---さまざまなページ要素----------それは何を意味しますか?
以下は、GmailのパスワードフィールドのXPathです。 *
の重要性は何ですか?
.//*[@id='Passwd']
//child::input[@type='password']
これらの式はすべて異なるノードセットを選択します。
.//*[@id='Passwd ']
「。」開始は、現在の処理が現在のノードから開始することを意味します。 「*」は、「Passwd」に等しい@id
- attribute-valueを持つこの現在のノードから派生するすべての要素ノードを選択します。
最初にドットを使用しない場合、それが意味するものは何ですか?
次に、wholeドキュメントで@id
- attribute-valueが「Passwd」に等しいすべての要素ノードを選択します。
XPathに// *を追加するだけで強調表示されます---さまざまなページ要素
これにより、wholeドキュメント内のすべての要素ノードが選択されます。
以下に言及します:GmailのXPathtのパスワードフィールドは*の意味は何ですか?
.//*[@id='Passwd']
これにより、@id
- attribute-valueが「Passwd」に等しい現在のノードから降順のすべての要素ノードが選択されます。
// child :: input [@ type = 'password']
これは、@type
- attribute-valuesが「password」に等しいinput
という名前のすべての子要素ノードを選択します。 child::
軸プレフィックスは、デフォルトの動作であるため、省略できます。
適切な式を選択する構文は ここw3school.com で説明されています。
そして、Axes(処理の現在のポイント)が説明されています ここで別のw3school.comページで 。
ここで重要なXPathの概念がいくつかあります...
絶対vs相対XPath(/
vs .
)
/
は、ドキュメントのルートから始まる絶対ロケーションパスを導入します。.
は、コンテキストノードから始まる相対ロケーションパスを導入します。名前付き要素と任意の要素(ename
vs *
)
/ename
はename
ルート要素を選択します./ename
は、現在のノードのすべてのename
子要素を選択します。/*
は、名前に関係なくルート要素を選択します。./*
または*
は、名前に関係なく、コンテキストノードのすべての子要素を選択します。子孫または自己軸(//*
)
//ename
は、ドキュメント内のすべてのename
要素を選択します。.//ename
は、コンテキストノードまたはその下のすべてのename
要素を選択します。//*
は、名前に関係なく、ドキュメント内のすべての要素を選択します。.//*
は、名前に関係なく、コンテキストノードの下にあるすべての要素を選択します。これらの概念を念頭に置いて、特定の質問に対する回答を以下に示します...
.//*[@id='Passwd']
は、'Passwd'
と等しいid
属性値を持つ現在のコンテキストノード以下のすべての要素を選択することを意味します。//child::input[@type='password']
は//input[@type='password']
に単純化でき、'password'
と等しいinput
属性値を持つドキュメント内のすべてのtype
要素を選択することを意味します。XPathのドットは、"コンテキストアイテム式"と呼ばれます。式の先頭にドットを置くと、コンテキスト固有になります。つまり、「XPathで要素を検索」メソッドを呼び出しているノードのコンテキストで、id="Passwd"
を使用して要素を検索します。
*
の.//*[@id='Passwd']
は、任意の要素とid='Passwd'
を一致させるのに役立ちます。