2016-04-08 41 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選擇器,更短:

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

我不同意CSS定位器更短。在正確書寫時,它們通常具有相同的長度:'.// svg/g' – djangofan

+0

@djangofan,如果「.//svg/g」正在工作,那麼您的陳述將爲真,但事實並非如此。 –

-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'.

NOTE2:另一個類似的問題在這裏:XPath Error - The default (no prefix) Namespace URI for XPath queries is always ''

+0

XPath表達式是我嘗試的第一個表達式,但它沒有返回任何元素。我從https://stackoverflow.com/questions/14592213/獲得了'name()=「svg」'snippet – gwg

相關問題