Pengujian data kendoGrid menggunakan timun kapibara

Saya mencoba menulis beberapa tes mentimun/capybara untuk memvalidasi data dalam komponen UI KendoGrid dan saya mengalami kesulitan dalam menentukan cara memilih dan memvalidasi data pada halaman.

Saya telah menemukan tutorial dasar dan contoh penggunaan mentimun/capybara dengan data tabel tetapi tampaknya KendoGrid menggunakan konfigurasi tabel dan datanya yang sedikit berbeda di mana 1.) tidak ada "id" untuk memilih grid dengan mudah di halaman dan 2.) ada beberapa tabel (satu untuk header) dan satu lagi untuk data aktual itu sendiri.

Berikut adalah kutipan data kendoGrid saya saat ini yang ingin saya periksa:

<div id="item_grid" data-role="grid" class="k-grid k-widget k-secondary" style="">
  <div class="k-grid-header" style="padding-right: 17px;">
    <div class="k-grid-header-wrap">
      <table role="grid">
        <colgroup>
          <col>
          <col>
          <col>
        </colgroup>
        <thead>
          <tr>
            <th role="columnheader" data-field="ItemA" data-title="Item A" class="k-header" data-role="sortable">
              <a class="k-link" href="/id#">Item A</a>
            </th>
            <th role="columnheader" data-field="ItemB" data-title="Item B" class="k-header" data-role="sortable">
              <a class="k-link" href="/id#">Item B</a>
            </th>
            <th role="columnheader" data-field="ItemC" data-title="Item C" class="k-header" data-role="sortable">
              <a class="k-link" href="/id#">Item C</a>
            </th>
          </tr>
        </thead>
      </table>
    </div>
  </div>
  <div class="k-grid-content">
  <table role="grid">
    <colgroup>
      <col>
      <col>
      <col>
    </colgroup>
    <tbody>
      <tr data-uid="2c77ea57-50ea-474d-950a-8379b3690936" role="row">
        <td role="gridcell">A</td>
        <td role="gridcell">223.63</td>
        <td role="gridcell">0</td>
      </tr>
      <tr class="k-alt" data-uid="979534bc-7dea-47e9-9471-088c5bffe5b5" role="row">
        <td role="gridcell">B</td>
        <td role="gridcell">223.63</td>
        <td role="gridcell">180</td>
      </tr>
      <tr data-uid="4d4c31e7-4daf-44ad-b6c1-20ffdfde57c4" role="row">
        <td role="gridcell">C</td>
        <td role="gridcell">143.58</td>
        <td role="gridcell">0</td>
      </tr>
      <tr class="k-alt" data-uid="8d315558-b014-4219-b21b-dbe52cc6dd18" role="row">
        <td role="gridcell">D</td>
        <td role="gridcell">143.58</td>
        <td role="gridcell">180</td>
      </tr>
    </tbody>
  </table>
  </div>
</div>

Di mana tempat terbaik untuk memulai tes menulis untuk mencakup skenario ini?

Saya telah melakukan beberapa permainan tambahan dengan Telerik Test Studio dan menguji skenario khusus ini dalam aplikasi itu sangatlah mudah!


person user2776987    schedule 19.11.2013    source sumber
comment
Bisakah Anda menjelaskan apa yang ingin Anda lakukan - yaitu kontrol apa yang Anda perlukan bantuan untuk mengekstraksi dengan Kapibara?   -  person Justin Ko    schedule 19.11.2013
comment
Saya ingin dapat memvalidasi bahwa kontennya tampak seperti baris dengan data seperti ... A | 223.63 | 0,B | 223.63 | 180, C | 143,58 | 0,D | 143,58 | 180   -  person user2776987    schedule 19.11.2013
comment
Jadi, Anda memerlukan bantuan dalam mengekstraksi nilai (yaitu bagian Kapibara) atau bagian validasi (yaitu bagian Mentimun)?   -  person Justin Ko    schedule 19.11.2013
comment
Saya rasa yang saya cari adalah cara terbaik untuk melakukan pendekatan ekstraksi dan validasi. Perlu diingat bahwa nilai id data bersifat dinamis dan tidak bertahan di antara pemuatan. Satu-satunya konstanta yang dapat Anda andalkan adalah ‹div id=item_grid› yang sama.   -  person user2776987    schedule 20.11.2013


Jawaban (1)


Salah satu pendekatannya adalah mengumpulkan tabel data ke dalam array 2D menggunakan:

data_rows = page.all(:css, 'div#item_grid div.k-grid-content tr')
data = data_rows.collect do |tr|
  tr.all(:css, 'td').collect(&:text)
end
p data
#=> [["A", "223.63", "0"], ["B", "223.63", "180"], ["C", "143.58", "0"], ["D", "143.58", "180"]]

Kemudian dengan data tersebut (dan dengan asumsi Anda mengetahui data apa yang seharusnya ada dalam tabel), Anda dapat memvalidasi array data:

# If you want to validate the entire table and row order matters:
expect(data).to eql([["A", "223.63", "0"], ["B", "223.63", "180"], ["C", "143.58", "0"], ["D", "143.58", "180"]])

# If you want to validate the entire table and row order does not matter:
expect(data).to match_array([["B", "223.63", "180"], ["A", "223.63", "0"], ["D", "143.58", "180"], ["C", "143.58", "0"]])    

# If you want to validate a specific row exists:
expect(data).to include(["B", "223.63", "180"])
person Justin Ko    schedule 19.11.2013
comment
Justin, saya mencobanya dalam aplikasi pengujian saya dan sekarang saya mendapatkan kesalahan yang mengatakan koleksi sebenarnya berisi [] dan tidak ada data yang benar. Saya kira ini ada hubungannya dengan pilihan css yang tidak mengambilnya dengan benar? Saya mengutak-atik 'div#item_grid div.k-grid-content table tr' dan sepertinya tidak ada bedanya. Ada pemikiran? - person user2776987; 20.11.2013
comment
Anehnya, kode tersebut berfungsi dengan baik ketika saya membuat halaman dengan html yang disediakan. Apakah Anda yakin Anda menguji pada halaman yang benar - yaitu apakah Anda mendapatkan html yang sama dengan yang Anda posting ketika Anda melakukan p page.html? - person Justin Ko; 20.11.2013
comment
Saya rasa saya menemukan masalah saya di sini. Masalahnya adalah elemen yang saya uji adalah komponen UI kendoGrid yang tidak selalu terlihat di layar. Beberapa langkah sebelum validasi membuat item tersebut terlihat. Masalahnya adalah ada kondisi balapan di mana ia memeriksa konten yang tidak terlihat ... Saya telah memvalidasi ini hanya dengan memberi jeda dan melangkah perlahan dan memberikan waktu kepada sistem untuk menampilkan data sebelum memvalidasi. Sepertinya saya perlu memoles cara menunggunya ;-). Terima kasih! - person user2776987; 20.11.2013
comment
Begitu ya, all tidak menunggu seperti find. Untuk memastikan bahwa setidaknya ada 1 baris tabel yang dimuat (dan dengan asumsi bahwa satu baris tabel dimuat berarti semuanya dimuat), Anda dapat menambahkan page.find(:css, 'div#item_grid div.k-grid-content tr', :match => :first) sebelum mendapatkan baris data. - person Justin Ko; 20.11.2013