我正在使用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") }
答案 0 :(得分:4)
这是常见问题。这样:
//a[contains(@id,'friendImageLink')][2]
表示:任何a
是第二个a
孩子,其属性id
包含friendImageLink
//
运算符的优先级高于谓词
你需要:
(//a[contains(@id,'friendImageLink')])[2]/@href