在Watir Ruby中访问顺序相同的元素

时间:2014-05-12 03:59:34

标签: html css ruby watir

我正在尝试访问顺序元素,并且不知道如何在页面上推进脚本。所以,这是一段代码。

<div class="card highlighted">

<div class="card-fix">
    <a class="card-remove icon" title="Don't show member again" onclick="$jq( '#search-results' ).msg( 'remove', this )" data-userid="93872246">

        X

    </a>
    <dl></dl>
    <div class="card-actions">
        <a class="quickview" title="Quick view" onclick="$jq('#dialog-profile').msg('show', '/profileinfo/SearchProfi…lTseEdmEQ==&lid=1&searchType=S&pageNumber=1'); return false;" href="#"></a>
        <a class="button button-primary" title="Favorite her!" href="/matchbook/addEntry.aspx?uid=Mu/BwYPn0nxhWlTseEdmEQ==&pn=1&rn=4&tp=S&handle=Annie5170&lid=1065"></a>
    </div>
</div>

        

<div class="card-fix">
    <a class="card-remove icon" title="Don't show member again" onclick="$jq( '#search-results' ).msg( 'remove', this )" data-userid="108272583"></a>
    <dl></dl>
    <div class="card-actions">
        <a class="quickview" title="Quick view" onclick="$jq('#dialog-profile').msg('show', '/profileinfo/SearchProfi…DA3R3daaQ==&lid=1&searchType=S&pageNumber=1'); return false;" href="#"></a>
        <a class="button button-primary" title="Favorite her!" href="/matchbook/addEntry.aspx?uid=y98x/Mj+hc+61DA3R3daaQ==&pn=1&rn=4&tp=S&handle=dancer4498&lid=1065"></a>
    </div>
</div>

换句话说,我需要继续循环浏览这些快速浏览,然后运行一个小脚本并再次完成所有操作。然后转到下一页再做一次......等等。但是,如果我现在在循环中使用它,它将只获取第一次快速视图5次。

# 5.times do |n|
#   browser.link(:title => 'Quick view').click
#   sleep (2)
#   browser.link(:class => "icon dialog-abandon").click
#   # sleep (2)
# end

所以我的问题是如何通过所有快速视图推进它,每页有18个。

能够保存它也很棒     data-user-id="93872246" 和href中句柄后的部分,即。     handle=Annie5710 也可以在哈希的文件中。

谢谢,我感谢所有的帮助。

3 个答案:

答案 0 :(得分:1)

你必须这样做:

  //get total title in a page
  totalTitleSize=browser.link(:title => 'Quick view').size

并循环播放:

 totalTitleSize.times do |n|
    browser.link(:title => 'Quick view', :index=> n).click
     sleep (2)
    //test it or use index in it If you need   
    browser.link(:class => "icon dialog-abandon").click
   sleep (2)
 end

答案 1 :(得分:0)

这应该添加到代码中。

browser.link(:title => 'Quick view', :index=> n).click

现在一切正常。

答案 2 :(得分:0)

正如其他答案所示,问题在于:

browser.link(:title => 'Quick view').click

将始终单击第一个匹配的链接。使用:index允许您覆盖默认的第一个匹配。但是,我认为更好的解决方案是获取匹配链接的集合并迭代它。它将使您免于手动处理索引。

browser.links(:title => 'Quick view').each do |link|
  link.click
  sleep (2)
  browser.link(:class => "icon dialog-abandon").click
  sleep (2)
end

请注意,我们已使用links创建了一个集合,我们使用each进行迭代。

但是,由于您还想收集其他数据,您可能希望遍历父div:

browser.divs(:class => 'card-fix').each do |parent_div|
  puts parent_div.link(:class => 'card-remove').data_userid
  #=> "93872246"

  href = parent_div.button(:class => 'button-primary').href
  puts href[/handle=([^&]+)/, 1]
  #=> "Annie5170"

  parent_div.link(:class => "quickview").click
  sleep (2)
  browser.link(:class => "icon dialog-abandon").click
  sleep (2)
end