5

我要检查的页面上有以下代码:

...    
<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 和页面对象。而且我需要使用“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

您能帮我...使用页面对象获取与“标签链接”相关的页面上的所有链接

谢谢,安娜

4

2 回答 2

7

您可以使用以下方法在页面对象中定义链接集合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
于 2013-06-24T13:55:43.863 回答
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) 是给定页面的 DOM 中具有属性 class 和 value tag-links 的所有 p 元素的集合。

于 2013-08-08T19:06:15.613 回答