用于Ruby和Xpath选择器的Selenium客户端的问题 - 来自单个表的多个链接

问题描述:

我正在从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是我唯一的选择,那么我无法通过这种方式提高我的结果。

你说得对,没有一种方法可以在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