Watir Webdriver подсчитывает количество элементов в списке UL

Я сделал несколько поисков, и я не могу найти подходящий ответ. В основном у меня есть неупорядоченный список, который может быть разной длины. Я хочу перебрать список, сделать что-то еще, а затем вернуться и выбрать следующий элемент в списке. Я могу сделать это нормально, когда я определяю, сколько раз мой цикл должен повторяться, поскольку я знаю количество элементов в списке.

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

HTML такой:

<ul id="PageContent_cat">
  <li class="sel">
    <a target="_self" href="/searchlocation.aspx?c=S1">S1</a>
  </li>
  <li>
    <a target="_self" href="/searchlocation.aspx?c=S2">S2</a>
  </li>
  <li>
    <a target="_self" href="/searchlocation.aspx?c=S3">S3</a>
  </li>
  <li>
    <a target="_self" href="/searchlocation.aspx?c=S4">S4</a>
  </li>
  <li>
    <a target="_self" href="/searchlocation.aspx?c=S5">S5</a>
  </li>
  <li>
    <a target="_self" href="/searchlocation.aspx?c=S6">S6</a>
  </li>
  <li>
    <a target="_self" href="/searchlocation.aspx?c=S7">S7</a>
  </li>
</ul>

Итак, я вижу, что в списке 7 элементов. По-видимому, в watir я мог бы использовать что-то следующее:

arr= ie.select_list(:name,'lr').getAllContents.to_a

Но не с вебдрайвером.

Я думал, что мог бы использовать «lis», но я просто получаю результат Hex:

$bob = browser.ul(:id => "PageContent_cat").lis помещает $bob

Спасибо,

Павел


person Paul Coles    schedule 30.08.2011    source источник
comment
Итак, получается, что я просто использую: $bob = browser.ul(:id => PageContent_cat).lis.length помещает $bob Который возвращает 7.   -  person Paul Coles    schedule 30.08.2011
comment
это грубая сила и угыл. См. ответ Адама ниже   -  person Chuck van der Linden    schedule 31.08.2011


Ответы (2)


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

MyList = browser.ul(:id => "PageContent_cat")

#Scrape links from the UL for visiting
MyList.links.each do |link|
  puts link
  puts link.text
  b.goto(link)
  #etc
end

#Save li items to an array for later processing
MyArray = []

MyList.lis.each do |li|
  puts li.text
  MyArray << li.text
  #etc
end

#Iterate through your array in the same method, to report/visit/etc
MyArray.each do |item|
  puts "I collected something: #{item}"
  b.goto(item)
end #
person adam reed    schedule 30.08.2011
comment
Для сбора текста li лучше использовать команду collect: MyList.lis.collect { |li | li.text } предоставляет массив - person Alister Scott; 31.08.2011
comment
Хорошо, я попробую. Я только начинаю это делать, поэтому для меня «уродливый» маршрут был единственным, который я придумал, как это сделать. - person Paul Coles; 31.08.2011
comment
@Paul - ваш подход имел смысл, но Ruby хорош в предоставлении упрощенных решений для общих целей. Как и предложение Алистера выше, всегда есть альтернативный способ сделать что-то. - person adam reed; 31.08.2011

помещает browser.ul(:id => "PageContent_cat").lis.length

person Annet    schedule 05.06.2013