Bagaimana Menemukan Semua Elemen Div dari Kelas yang Sama untuk Mencetak Konten Teks? Watir, Chromedriver [duplikat]

Saya mencoba mencetak konten teks dari setiap div kelas tertentu: "results_row". Saya akan menemukan setiap div dengan pencari lain seperti judul dan id jika saya hanya memerlukan teks dari dua div ini, tetapi div tersebut adalah hasil pencarian untuk nomor seri dari sebuah array. Saya ingin dapat mencetak teks dari setiap div setelah mencari sehingga saya dapat mengulangi serangkaian serial.

Ini HTML saya:

<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="/id/products/fuji/" title="Fuji, Inc.">FUJI</a>
        <a href="/id/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="/id/products/fuji/" title="Fuji, Inc. 2">FUJI</a>
        <a href="/id/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>

Dan ini kode saya:

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

Saya perlu memanggil semua div kelas itu ketika saya mendefinisikan metode result_row sebelum mencetak sehingga tidak hanya mengambil div pertama kelas itu di halaman dan melanjutkan ke serial berikutnya. Saya merasa ada solusi sederhana seperti menjadikan div jamak saat mendefinisikan metode result_row results_row = browser.divs(:class => "results_row")tetapi hal itu membuat metode tersebut tidak terdefinisi.

Mungkin ada cara untuk mengulangi setiap div di div "bodytag" seolah-olah mereka adalah lis di ul. Untuk itu saya sedang mempertimbangkan sesuatu seperti ini:

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 sumber
comment
Pengecualian apa yang Anda dapatkan saat melakukan browser.divs(:class => "results_row")? #divs adalah waktu yang tepat untuk mendapatkan koleksi div yang cocok. Saya telah menulis beberapa hal tentang menemukan elemen vs koleksi di buku jika itu membantu.   -  person Justin Ko    schedule 11.09.2018
comment
Mungkin kesalahan metode yang tidak ditentukan bukan berasal dari divs secara langsung, tetapi apa yang Anda lakukan dengannya? Kodenya harus seperti puts browser.divs(class: 'results_row').map(&:text)   -  person Justin Ko    schedule 11.09.2018
comment
Wow, kamu benar Justin. Pengecualiannya adalah untuk metode teks block in <main>': undefined method text' untuk #‹Watir::DivCollection:0x00000005193160› (NoMethodError). Saya pikir itu adalah metode result_row. Terima kasih banyak.   -  person djangodev    schedule 11.09.2018
comment
dan buku Anda sepertinya yang saya butuhkan. Terima kasih   -  person djangodev    schedule 11.09.2018
comment
Anda tidak harus meneruskan kunci hapus   -  person Rajagopalan    schedule 11.09.2018
comment
@KevinGraham, karena ini adalah akar masalah yang sama dengan beberapa pertanyaan lama di situs ini, saya akan menandai ini sebagai duplikat.   -  person Justin Ko    schedule 11.09.2018
comment
Oke terima kasih @ justin-ko, tapi apakah mungkin untuk menyertakan elemen anak di pencari lokasi div sehingga saya mendapatkan semua keluaran konten teks? Saya mencoba menulis ke csv tetapi hanya mendapatkan teks di elemen div result_row. Saya juga memerlukan teks dari div anak result_subrow. Saya sedang memikirkan sesuatu seperti: search_results = browser.divs(class: 'results_row', 'results_subrow').map(&:text) csv << search_results   -  person djangodev    schedule 11.09.2018
comment
Ya. #divs membuat kumpulan elemen yang dapat Anda ulangi melalui pemeriksaan. Misalnya, mendapatkan div turunan adalah: browser.divs(class: 'results_row').map { |parent_div| parent_div.div(class: 'results_subrow').text }. Hal serupa dapat dilakukan untuk mendapatkan tautan.   -  person Justin Ko    schedule 11.09.2018