2

次のコードを使用してリンクにアクセスしています(phpunit/selenium用):

//td[normalize-space() ='Test title 2']/following-sibling::td[3]/a[.='delete']

FireFox で XPath チェッカーを使用すると、7 つの要素が返されます (「テスト タイトル 2」に一致する 7 つのリンクがあるため) が[1]、最後に追加すると:

//td[normalize-space() ='Test title 2']/following-sibling::td[3]/a[.='delete'][1]

それでも 7 つのリンクが返されます。ここで何が間違っていますか?

4

2 に答える 2

6

[1]式の最後に追加すると、aそれぞれの最初の子...td[3](つまり、7aつの子ノード) が選択されます。クエリを次のように変更できます。

xpath=(//td[normalize-space() ='Test title 2']/following-sibling::td[3]/a[.='delete'])[1]

または、webdriver を使用する場合 (xpath プレフィックスは必要ありません):

(//td[normalize-space() ='Test title 2']/following-sibling::td[3]/a[.='delete'])[1]

これにより、要素の子のaセット全体から最初の要素が選択されます。a...td[3]

その他のチュートリアルについては、 XPath の例を参照してください。

于 2012-04-30T16:03:41.550 に答える
0

仕様が言うように:

ロケーション パス//para[1]は、ロケーション パスと同じ意味ではありません/descendant::para[1]。後者は最初の子孫 para要素を選択します。前者は、親の最初の子であるすべての子孫para要素を選択します。para

したがって、

//td[normalize-space() ='Test title 2']/following-sibling::td[3]/descendant::a[.='delete'][1]

あなたの場合により良い仕事をします。

于 2012-05-01T11:33:13.887 に答える