Доступ к одним и тем же элементам в Watir Ruby

0

Я пытаюсь получить доступ к последовательным элементам и не знаю, как продвигать скрипт на странице. Итак, вот фрагмент кода.

<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 в файле в хеше.

Спасибо, и я ценю всю помощь.

Теги:
watir

3 ответа

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
0

Как показывают другие ответы, проблема в том, что строка:

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

Всегда будет щелкнуть по первой соответствующей ссылке. Использование индекса: позволяет переопределить первое совпадение по умолчанию. Однако я бы сказал, что лучшим решением является получение коллекции совпадающих ссылок и повторение этого. Это избавит вас от ручной обработки индекса.

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
0

это должно быть добавлено в код.

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

теперь все работает нормально.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню