0

私はJavaとSeleniumを使ってテストを行っています。私のDOMには、2つのsvgタグがあります。それらのうちの1つが2つの内側のpathタグを持っています。私は私が使用このsvgを取得する必要があります:count()関数を使用して特定の数の内部タグを持つ要素を取得する方法

wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath(
         "//*[local-name() = 'svg' and count(.//path)>'2']"))); 

または

wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath(
          "//*[local-name() = 'svg'] [count(.//path)>'2']"))); 

が、それは動作しません。私はそれが間違っていることを知る必要がありますので、他の方法を提供してください。ありがとう。問題は、あなたがSVG要素である .//pathを見つけようとしているある

//*[local-name() = 'svg' and count(.//*[local-name() = 'path' ])>'1'] 

または

//*[local-name() = 'svg'][ count(.//*[local-name() = 'path' ])>'1'] 
+1

HTMLの関連部分を投稿します。誰もxpathが動作する理由を伝えることはできませんが、対応するHTML/XMLを知らなくても他のxpathは動作しません。 – har07

+0

ちょうどフレンドリーなヒントです。このページを読むことができます:[How-To-Ask Guide](https:// stackoverflow。 com/help/how-to-ask)ので、質問が簡単に答えることができ、できるだけ明確であることを常に確認することができます。あなたが抱えている問題を修正するためにあなたがした努力と、それらの修正を試みたときに何が起こったのかを必ず含めてください。ショーコードとエラーメッセージも忘れないでください! –

答えて

0

:それは働いた方法によって

。私が知る限り、SVG要素は異なる名前空間にあるため、これを行うことはできません。あなたの質問で言及したように、[local-name() = 'path' ]を使用して修正することができます。回避策は、JSExecutorを使用してメソッドdocument.evaluate()を実行するので、SVGの名前空間を指定できます。このpostの例を参照してください。

関連する問題