为什么这个Selenium / XPath查询只选择第一个`g`标签?

时间:2016-04-08 14:07:29

标签: selenium xpath svg

我有一个svg元素,其中包含多个g标记。通常,当我按名称选择标签时,我会得到页面上所有标签的列表。例如,这将返回Selenium WebElement实例的列表:

browser.find_elements_by_xpath('//a')

但是当我尝试选择g元素中的所有svg标签时,我只返回第一个元素。例如:

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 个答案:

答案 0 :(得分:2)

那是因为你使用find_element_by_xpath返回第一个元素。要返回所有元素,请使用find_elements_by_xpath

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

但我会使用更短的CSS选择器:

browser.find_elements_by_css_selector('svg > g')

答案 1 :(得分:-1)

我将如何做到这一点:

使用以下XML:

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

然后使用此XPath表达式:

 //svg/g

这将返回3个节点,如此站点所示:http://www.freeformatter.com/xpath-tester.html

注意1:如果您在svg标记上引入了命名空间,您会在以上网站上看到此错误:The default (no prefix) Namespace URI for XPath queries is always '' and it cannot be redefined to 'http://www.w3.org/2000/svg'.

注2:此处有另一个类似的问题:XPath Error - The default (no prefix) Namespace URI for XPath queries is always ''