【问题标题】:Watir, Page-objects: how to get all elements that have the same identifierWatir,页面对象:如何获取具有相同标识符的所有元素
【发布时间】:2013-06-24 13:28:21
【问题描述】:

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

...    
<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

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

谢谢, 安娜

【问题讨论】:

    标签: webdriver watir-webdriver page-object-gem


    【解决方案1】:

    您可以使用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
    

    【讨论】:

    • 是的,它有效。谢谢。刚刚修正了错字:page.tag_link_elements.each do |link|将链接文本结束
    • 谢谢,修正了答案中的错字。
    【解决方案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 元素的集合。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-13
      • 2020-08-22
      • 2012-08-23
      • 1970-01-01
      • 2019-02-19
      • 2011-09-19
      相关资源
      最近更新 更多