我想在网页上找到以下代码:
...
<p class="tags-link">
<a href="/search?q=test1" rel="nofollow">test1</a>
<a href="/search?q=test2" rel="nofollow">test2</a>
<a href="/search?q=test3" rel="nofollow">test3</a>
</p>
....
<p class="tags-link">
<a href="/search?q=test4" rel="nofollow">test4</a>
<a href="/search?q=test5" rel="nofollow">test5</a>
<a href="/search?q=test6" rel="nofollow">test6</a>
</p>
...
我使用Watir-webdriver和page-object。我需要通过“tags-link”类获取与块相关的所有链接。
我有以下代码:
element(:tags, :p, :css => "tags-link a")
tags_element仅返回第一个链接。
以下代码将仅提供与第一个块相关的3个链接:
element(:tags, :p, :css => "tags-link")
tags_element.element.links.each do |elm|
puts elm
end
但我需要获得所有标签块
现在我有以下代码可行,但我想成为“页面对象”:
@browser.elements(:css =>".tags-link a").each do |tag|
puts tag
end
你能帮助我......使用页面对象获取页面上与“tags-link”相关的所有链接
谢谢, 安娜
答案 0 :(得分:6)
您可以使用links
class MyPage
include PageObject
links(:tag_link, :css =>".tags-link a")
end
这将创建一个collection_name_elements
方法,该方法返回一组匹配的页面对象元素。您可以迭代它以对每个元素执行操作。例如,要输出每个链接的文本:
page.tag_link_elements.each do |link|
puts link.text
end
#=> test1
#=> test2
#=> test3
#=> test4
#=> test5
#=> test6
答案 1 :(得分:2)
这就是你需要做的所有事情:
ary_of_tests = @browser.ps(:class, 'tag-links').map do |t|
t.as.map do |x|
x.text
end
end
=> [["test1", "test2", "test3"], ["test4", "test5", "test6"]]
如果你不喜欢动态数组,你总是可以使用flatten方法使它成为一维或to_s方法,使其成为一个字符串。定义一个新类并指定场景对我来说似乎有些过分,但对他自己来说似乎有点过分了。
注意:ps(:class,'tag-links)是所有p元素的集合,在给定页面的DOM中具有属性类和值标记链接。