Saya menggunakan RSpec2 dan Capybara untuk pengujian penerimaan.
Saya ingin menegaskan bahwa tautan dinonaktifkan atau tidak di Kapibara. Bagaimana saya bisa melakukan ini?
ruby-on-rails
rspec
capybara
kriysna
sumber
sumber
Solusi sederhana lainnya adalah mengakses atribut HTML yang Anda cari
[]
:find('#my_element')['class'] # => "highlighted clearfix some_other_css_class" find('a#my_element')['href'] # => "http://example.com # or in general, find any attribute, even if it does not exist find('a#my_element')['no_such_attribute'] # => ""
Perhatikan bahwa
Capybara
secara otomatis akan mencoba menunggu permintaan asinkron selesai, tetapi mungkin tidak berfungsi dalam beberapa kasus:Berikut ini satu solusi jika Anda mengalami masalah dengan pernyataan pada elemen yang diperbarui secara asinkron:
sumber
find('a#my_element[href]')
, apakah mungkin untuk mengambil nilai atribut ini? Mencoba dengan ekspresi sepertifind('a#my_element[href]').value
tetapi sepertinya tidak berhasil :(find('a#my_element[href]').text
ataufind('a#my_element[href]').native
. Beri tahu saya jika salah satu dari mereka memberikan hasil yang Anda harapkan.Agak berantakan untuk menemukan xpath yang benar, ini yang benar,
menggunakan kapibara 0.4.1.1
# <a href="https://stackoverflow.com/clowns?ordered_by=clumsyness" class="weep">View Clowns</a> page.should have_xpath("//a[@class='weep'][@href='/clowns?ordered_by=clumsyness']", :text => "View Clowns")
Jika Anda hanya memiliki link tanpa kelas, gunakan
page.should have_link('View Clowns', :href => '/clowns?ordered_by=clumsyness')
Sesuatu seperti ini sayangnya tidak akan berhasil:
page.should have_link('This will not work!', :href => '/clowns?ordered_by=clumsyness', :class => "weep")
Opsi kelas akan diabaikan.
sumber
Saya merekomendasikan penggunaan
have_link
danfind_link(name)[:disabled]
dalam dua pernyataan terpisah. Meskipun melakukan pernyataan kedua saja lebih sederhana, ini membuat pesan kesalahan tentang tautan yang hilang terlihat lebih bagus, membuat hasil pengujian Anda lebih mudah dibaca.expect(page).to have_link "Example" expect(find_link("Example")[:disabled]).to be false
Perhatikan bahwa
"Example"
dapat diubah menjadi nama atau id link.sumber
page.should have_link('It will work this way!', {:href => '/clowns?ordered_by=clumsyness', :class => "smile"})
has_link mengharapkan hash opsi yang kosong jika Anda tidak menyediakannya. Anda dapat menentukan atribut apa pun yang harus dimiliki tautan - cukup pastikan Anda meneruskan semua opsi dalam SATU hash.
Semoga ini membantu
PS: Untuk atribut seperti metode data Anda harus meneruskan nama atribut sebagai string karena tanda hubung memecah simbol.
sumber
class:
tidak validBila memungkinkan, Anda harus mencoba menggunakan pembungkus yang disediakan Capybara yang akan bekerja lebih konsisten di seluruh driver.
Untuk kasus tertentu
disabled
, pembungkus diperkenalkan di 2.1: https://github.com/jnicklas/capybara/blob/fc56557a5463b9d944207f2efa401faa5b49d9ef/History.md#version-210Jika Anda menggunakannya, Anda akan mendapatkan hasil yang masuk akal di RackTest dan Poltergeist:
HTML:
<input type="text" id="disabled-false" ></div> <input type="text" id="disabled-true" disabled></div> <input type="text" id="disabled-js-true" ></div> <input type="text" id="disabled-js-false" disabled></div> <script> document.getElementById('disabled-js-true').disabled = true document.getElementById('disabled-js-false').disabled = false </script>
Tes:
!all(:field, 'disabled-false', disabled: false).empty? or raise all(:field, 'disabled-false', disabled: true ).empty? or raise all(:field, 'disabled-true', disabled: false).empty? or raise !all(:field, 'disabled-true', disabled: true ).empty? or raise all(:field, 'disabled-js-true', disabled: true ).empty? or raise all(:field, 'disabled-js-false', disabled: false).empty? or raise Capybara.current_driver = :poltergeist !all(:field, 'disabled-false', disabled: false).empty? or raise all(:field, 'disabled-false', disabled: true ).empty? or raise all(:field, 'disabled-true', disabled: false).empty? or raise !all(:field, 'disabled-true', disabled: true ).empty? or raise !all(:field, 'disabled-js-true', disabled: true ).empty? or raise !all(:field, 'disabled-js-false', disabled: false).empty? or raise
Perhatikan bagaimana dengan menggunakan ini alih-alih pemilih CSS, tes Javascript akan bekerja tanpa perubahan apa pun jika Anda mulai menggunakan driver berkemampuan Js.
File pengujian yang dapat dijalankan di sini .
sumber
bowsersenior , terima kasih atas petunjuknya
Berikut ini contohnya:
let(:action_items) { page.find('div.action_items') } it "action items displayed as buttons" do action_items.all(:css, 'a').each do |ai| expect(ai[:class]).to match(/btn/) end end
sumber
Menggunakan sintaks Rspec3 saya melakukannya dengan cara ini:
expect(page).not_to have_selector(:link_or_button, 'Click here')
sumber
Cukup Anda bisa menggunakan
page.has_css?
metodepage.has_css?('.class_name')
ini akan kembali
true
jika ada elemen.Lakukan beberapa tindakan berdasarkan validasi.
page.has_css?('.class_name') do #some code end
sumber
Menurut dokumen, Anda dapat menggunakan sintaks aksesor [atribut]:
find('#selector')['class'] => "form-control text optional disabled"
Untuk penyandang cacat, Anda juga bisa melakukan ini:
expect(find('#selector').disabled?).to be(true)
sumber