2010-11-04 72 views
1

我正在從Watir移植到Selenium-RC的幾個腳本,以查看組織的變化有多困難。用於Ruby和Xpath選擇器的Selenium客戶端的問題 - 來自單個表的多個鏈接

我有一個表'全局列表',其中包含4列,每列有無序列表,每個列表元素包含一個單詞與超鏈接。

在的Watir,我會簡單地使用:

@browser.table(:class, /global-list/).links.each {|link| puts link.text,link.href}

硒似乎沒有成爲這樣一個簡單的方法來做到這一點。我需要來自該單個表格的所有鏈接(href和文本)。起初我以爲我的Xpath是不正確的,因爲它只會顯示第一列(4)或第一個href元素。

puts @browser.get_xpath_count("//table[@class='global-list']//a[@href]")
- 給我的64個鏈接的結果(在所有4級TR的和/或UL的總數)。

puts @browser.get_text("//table[@class='global-list']//a[@href]")
- 給我一個文本結果(只是第一個tr中的第一個td)。

puts @browser.get_text("//ul[@class='global-list']")
- 給我第一列文字(第一個tr中的第一個ul)。

我是新來的Selenium,但我已閱讀文檔和可用方法(http://selenium-client.rubyforge.org/),但尚未看到一個簡單的解決方案。

我也嘗試過DOM定位器方法,但是如果get_text或get_attribute是我唯一的選擇,那麼我無法通過這種方式提高我的結果。

回答

1

你說得對,沒有一種方法可以在Se中做到這一點。但你是最重要的。

# get the number of links 
num_links = @browser.get_xpath_count("//table[@class='global-list']//a[@href]") 
# and now iterate over them 
for i in 1 .. num_links do 
    puts @browser.get_text("//table[@class='global-list']//a[@href][" + i + "]) 
end 

注意迭代器作爲xpath的一部分。現在,你甚至可以更有趣地遍歷列的數量,然後遍歷使用相同技巧的鏈接的數量。

當然,如果你使用2.0a7,你可以使用Sizzle庫提供的CSS,它具有引用特定項目的替代方式(儘管不解決get_xpath_count部分)。

+0

謝謝,這是我失蹤的作品。我將不得不對子元素做一些更復雜的迭代,因爲不幸的是鏈接ID不是恆定的,最高達到64.我在運行循環時也遇到以下錯誤 - 「範圍的錯誤值」。我確實添加了一條關閉的報價單,並將其確認爲num_links爲「64」。否則,不會做任何更改。插入值「64」可以解決錯誤。再次感謝! – 2010-11-05 06:32:37

相關問題