2017-02-15 7 views
2

SeleniumのXPathを持つ要素を探したいのですが、これにはテキストが含まれていますが、2つの可能性があります。ここには次のものがあります。1つのXPathで2つのケースをカバーしますか?

.//li/a[contains(., 'blah')] 
.//li/a/span[contains(., 'blah')] 

1つのXPathで2つのケースをカバーする方法はありますか?

可能であれば2番目の質問どちらもspanではなく、a要素への結果ポインタとして取得したいと考えています。

また、マッチした要素のマッチ親として返す一般的な方法はありますか?

+2

最初のXPath '.// li/a [(。、 'blah')]が両方の場合をカバーしていませんか? –

答えて

4

、のXPath式が|と組み合わせることができます(例:xpath1 | xpath2)、しかし、あなたは本当に...

この場合にはそうする必要はありません。

Josh Crozierがコメントで尋ねるように、はい、.//li/a[contains(., 'blah')]は両方のケースをカバーしています。

aの文字列値は、その子孫span要素の文字列値のいずれかに"blah"が含まれている場合、必ず"blah"を含みます。

可能であれば2番目の質問 a-elementへの結果ポインタとして取得したいのですが、どちらの場合でもスパンではありません。

.//li/a[contains(., 'blah')]は、aの要素を返します。

が、それはまた

<a>xxxblah</a> 
<a><span>blah</span></a> 
<a><span>bl</span><span>ah</span></a> 

PSなどa要素を返すことに注意してください>ところで代わりに、 マッチした要素の一致親として返すための一般的な方法は何ですか?

また、XPathに/..を追加すると親が返されますが、XML要素の文字列値について知ることができます。 Testing text() nodes vs string values in XPath

-1

あなたは[含まれています(。「何とか」)]この .//のLi/*のような何かを試すことができ

2

あなたが、私はそれがより戻らないことを確認するためにあなたを与えているXPathをテストする必要がありますあなたよりマッチはしたいが、私は使用したい:一般的には//a[contains(.,'blah')]

関連する問題