2016-04-08 6 views
1

svg要素があり、その中に複数のgタグがあります。通常、名前でタグを選択すると、ページ上のすべてのタグのリストが表示されます。例えば、これは、セレンWebElementインスタンスのリストを返します:なぜこのSelenium/XPathクエリは最初の `g`タグだけを選択しますか?

browser.find_elements_by_xpath('//a') 

をしかし、私は私のsvg要素内のすべてのgタグを選択しようとすると、私は最初の要素だけが返されます。たとえば、次のように

browser.find_element_by_xpath('//*[name()="svg"]/*[name()="g"]') 

そして、ここに私のマークアップ:

<svg xmlns="http://www.w3.org/2000/svg"> 
    <g>...</g> 
    <g>...</g> 
    <g>...</g> 
    ... 
</svg> 

は、どのように私はすべてのgのタグを選択することができますか?

答えて

2

これは、最初の要素を返すfind_element_by_xpathを使用したためです。すべての要素を戻すには、その後find_elements_by_xpath使用:

browser.find_elements_by_xpath('//*[name()="svg"]/*[name()="g"]') 

をしかし、私は短いCSSセレクタを使用します:以下のXMLで

:ここ

browser.find_elements_by_css_selector('svg > g') 
+0

私はCSSロケータが短いと同意しません。通常、 '.// svg/g' – djangofan

+0

@ djangofanのように、正しく書かれたときの長さは通常同じですが、" .//svg/g "が動作していれば文は真ですが、そうではありません。 –

-1

が、私はそれを行うだろうかです:

... 
<svg> 
    <g>1</g> 
    <g>2</g> 
    <g>3</g> 
</svg> 
... 

は、このXPath式を使用します。

//svg/g 

このサイトに示すように、これは、3つのノードを返します:http://www.freeformatter.com/xpath-tester.html

注1:The default (no prefix) Namespace URI for XPath queries is always '' and it cannot be redefined to 'http://www.w3.org/2000/svg'.

:あなたはsvgタグに名前空間を導入する場合は、上記のサイトからこのエラーが表示されます。 NOTE2:もう一つの似たような質問:XPath Error - The default (no prefix) Namespace URI for XPath queries is always ''

+0

XPath式は私が試した最初のものでしたが、要素は返されませんでした。私はhttps://stackoverflow.com/questions/14592213/から 'name()=" svg "'スニペットを取得しました。 – gwg

関連する問題