Как найти все элементы Div одного класса для печати текстового содержимого? Ватир, Chromedriver

Я пытаюсь напечатать текстовое содержимое каждого 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

person djangodev    schedule 11.09.2018    source источник
comment
Какое исключение вы получили при выполнении browser.divs(:class => "results_row")? #divs - это правильно, когда нужно получить коллекцию совпадающих элементов div. Я написал кое-что о расположении элементов и коллекций в книге если это поможет.   -  person Justin Ko    schedule 11.09.2018
comment
Может быть, ошибка неопределенного метода не из divs напрямую, а что вы с ней делали? Код должен быть похож на puts browser.divs(class: 'results_row').map(&:text)   -  person Justin Ko    schedule 11.09.2018
comment
Вау, ты прав, Джастин. Исключение составил текстовый метод block in <main>': undefined method text для #‹Watir::DivCollection:0x00000005193160› (NoMethodError). Я думал, что это метод results_row. Большое спасибо.   -  person djangodev    schedule 11.09.2018
comment
и ваша книга выглядит как раз то, что мне нужно. Спасибо   -  person djangodev    schedule 11.09.2018
comment
Вам не нужно передавать ключ удаления   -  person Rajagopalan    schedule 11.09.2018
comment
@KevinGraham, поскольку это та же основная проблема, что и некоторые из старых вопросов на сайте, я отмечу это как дубликат.   -  person Justin Ko    schedule 11.09.2018
comment
Хорошо, спасибо @justin-ko, кстати, можно ли включить дочерний элемент в локатор div, чтобы я получал весь вывод текстового содержимого? Я пытаюсь записать в csv, но получаю текст только в элементах a div results_row. Мне также нужен текст из дочернего div results_subrow. Я думаю что-то вроде: search_results = browser.divs(class: 'results_row', 'results_subrow').map(&:text) csv << search_results   -  person djangodev    schedule 11.09.2018
comment
да. #divs создает коллекцию элементов, которые вы можете перебирать при проверке. Например, получение дочернего элемента div будет выглядеть так: browser.divs(class: 'results_row').map { |parent_div| parent_div.div(class: 'results_subrow').text }. Аналогично можно сделать для получения ссылок.   -  person Justin Ko    schedule 11.09.2018