0

動的テーブルのアイテムを一覧表示するページがあります。テーブル上のアイテムの順序と数はランダムに変わります。

テキスト「Itemx」に基づいて項目「Itemx」の 1 つを見つけ、その XPath または CSS をコードの別の部分で取得して使用したいと考えています。

テキスト「Itemx」に基づいて要素を見つけることができます

driver.findElement(By.cssSelector("BODY")).getText().matches("^[\\s\\S]*Itemx[\\s\\S]*$");

しかし、どうすればその XPath や CSS を取得できますか?

ウェブ上で何も見つからないようです。そこにあるものはすべて、XPath を使用してテキストを検証または検索する方法を示しています。私にとっては逆です。私はテキストを持っており、その XPath を見つけたいと思っています。

4

3 に答える 3

3

XPath セレクターと CSS セレクターはどちらも任意です。一般的なケースでは、これに対する適切な答えはありません。

CSS セレクターでcの最初の選択は、 、 、 、 、、またはその他の多くのものである可能性があります。XPath と同様に、それを表す方法はたくさんあります。マークアップを変更するとどうなりますか?<a><b></b><c></c><c></c></a>c:first-of-typea > c:nth-child(2)a c:first-of-typea > b + c

それはすべて、コンテキスト、必要な安定性、偽陽性または偽陰性がより悪いかどうかに依存します (マークアップが変更された場合に破損する可能性があるように非常に厳密にすることも、マークアップが変更された場合に非常に緩くすることもできます)。間違ったものを選ぶかもしれません)とそれを行う人の気まぐれです。(上記のどの方法を選択しますか? Eeny、Meeny、Miny、Mo...)

ただし、ドキュメントの現在の状態のみを気にし、回復力を必要としない場合は、まず、そのようなセレクターが実際に必要かどうかを検討してください。おそらく代わりに DOM 要素を渡すことができます。ただし、要素を一意に識別したい場合は、DOM ツリーをたどるのがかなり簡単な方法で、レベルごとに下に移動し、ノードがどの子であるかを観察します。次のような結果になります。

:root > :nth-child(3) > :nth-child(1) > :nth-child(4)

醜いですが、それはあなたが望むものかもしれません。

于 2013-02-15T19:43:12.223 に答える
1

項目をテキストで識別できる場合は、その項目の XPath が既にあります//*[contains(., 'Itemx')

于 2013-02-15T22:55:32.133 に答える