2010-10-01 39 views
1

我使用硒客戶端來測試網站。我想要獲得所有匹配特定選擇器的標籤,然後將href屬性返回到數組中。任何人都可以告訴我我該如何做到這一點?例如,這返回第一個匹配的一個標籤的href:從硒客戶端中的所有匹配元素收集一個特定的屬性?

browser.get_attribute "//a[contains(@id,'friendImageLink')]/@href" 
=> "http://asite/some-path" 

我可以做上述並用HREF字符串數組結束?這感覺就像它應該很容易,但我不能工作了:/如果我這樣做的螢火

$x("//a[contains(@id,'friendImageLink')]/@href") 

我得到對象的數組回來,所以感覺就像我接近。

感謝,最大

編輯 - 我以爲計數匹配的元素,然後通過他們迭代的,但我似乎無法選擇的第n個元素的。例如,有問題的網頁有38個標籤匹配「包含」的條件,但如果我這樣做

browser.get_attribute "//a[contains(@id,'friendImageLink')][2]/@href" 

我得到一個錯誤信息說 硒:: CommandError:OR:元/後裔::一[包含(@ id,'friendImageLink')] [2] /未找到

編輯 - 我只是想出了一個辦法。 @browser.get_all_links返回數組中頁面上所有鏈接的所有id。然後,我可以找出我想要的,並遍歷結果過濾數組,獲取每個鏈接,然後得到它的href。例如

@browser.get_all_links.grep(/friendImageLink/).collect{|link_id| @browser.get_attribute("//a[@id='#{link_id}']/@href") } 

回答

4

這是常見問題。這:

//a[contains(@id,'friendImageLink')][2] 

方式:任何a是第二a孩子具有含friendImageLink

//操作屬性id有更多的優先級比謂語

您需要:

(//a[contains(@id,'friendImageLink')])[2]/@href 
+0

+1以獲得正確的解釋。 – 2010-10-03 20:38:38

+0

aaahhhh ...謝謝。 – 2010-10-04 10:23:42

+0

@Max Williams:你很好。 – 2010-10-04 13:22:03

相關問題