从selenium客户端中的所有匹配元素中收集特定属性?

时间:2010-10-01 19:33:16

标签: xpath selenium

我正在使用selenium-client来测试网站。我希望获得与特定选择器匹配的所有标签,然后将href属性返回到数组中。谁能告诉我怎么做到这一点?例如,这将返回第一个匹配的“a”标记的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"

我收到一条错误消息说 Selenium :: CommandError:OR:元素/后代:: a [包含(@ 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") }

1 个答案:

答案 0 :(得分:4)

这是常见问题。这样:

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

表示:任何a是第二个a孩子,其属性id包含friendImageLink

//运算符的优先级高于谓词

你需要:

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