Я пытаюсь напечатать текстовое содержимое каждого div определенного класса: «results_row». Я бы нашел каждый div по другим локаторам, таким как заголовок и идентификатор, если бы мне просто нужен был текст из этих двух div, но div — это результаты поиска серийного номера из массива. Я хочу иметь возможность печатать текст из каждого div после поиска, чтобы я мог перебирать массив сериалов.
Вот мой HTML:
<div class="bodytag" style="padding-bottom:30px; overflow:visible">
<h2>Search Results for "serialnum3"</h2>
<div id="results_banner">
Products
<span>Showing 1 to 2 of 2 results</span>
</div>
<div class="pg_dir"></div>
<div class="results_row">
<a href="/products/fuji/" title="Fuji, Inc.">FUJI</a>
<a href="/products/fuji/50mm lens/" title="Fuji, Inc.">50mm lens</a>
<div class="results_subrow">
<p>more product info</p>
</div>
</div>
<div class="results_row">
<a href="/products/fuji/" title="Fuji, Inc. 2">FUJI</a>
<a href="/products/fuji/50mm lens/" title="Fuji, Inc.">50mm lens</a>
<div class="results_subrow">
<p>more product info 2</p>
</div>
</div>
<div class="pg_dir"></div>
</div>
И вот мой код:
SERIALS = ["s1","s2","s3"]
SERIALS.each do |item|
browser.span(:id => "search").click
browser.send_keys [:control, 'a']
browser.send_keys :delete
browser.send_keys "#{item}"
browser.send_keys :return
puts "sleeping 3"
sleep(3)
#Scrape text from results_row divs
results_row = browser.div(:class => "results_row")
puts results_row.text
end
Мне нужно каким-то образом вызвать все div этого класса, когда я определяю метод results_row перед печатью, чтобы он не просто брал первый div этого класса на странице и переходил к следующему сериалу. Я чувствую, что есть простое решение, такое как создание множественного числа div при определении метода results_row results_row = browser.divs(:class => "results_row")
, но это оставляет метод неопределенным.
Возможно, есть способ перебрать каждый div в div «bodytag», как если бы они были lis в ul. Для этого я рассматриваю что-то вроде этого:
BodyTag = browser.div(:class => "bodytag")
BodyTag.divs.each_with_index do |e|
results_row = browser.div(:class => "results_row")
puts results_row.text
end
browser.divs(:class => "results_row")
?#divs
- это правильно, когда нужно получить коллекцию совпадающих элементов div. Я написал кое-что о расположении элементов и коллекций в книге если это поможет. - person Justin Ko   schedule 11.09.2018divs
напрямую, а что вы с ней делали? Код должен быть похож наputs browser.divs(class: 'results_row').map(&:text)
- person Justin Ko   schedule 11.09.2018block in <main>': undefined method
text для #‹Watir::DivCollection:0x00000005193160› (NoMethodError). Я думал, что это метод results_row. Большое спасибо. - person djangodev   schedule 11.09.2018search_results = browser.divs(class: 'results_row', 'results_subrow').map(&:text) csv << search_results
- person djangodev   schedule 11.09.2018#divs
создает коллекцию элементов, которые вы можете перебирать при проверке. Например, получение дочернего элемента div будет выглядеть так:browser.divs(class: 'results_row').map { |parent_div| parent_div.div(class: 'results_subrow').text }
. Аналогично можно сделать для получения ссылок. - person Justin Ko   schedule 11.09.2018