Saya menggunakan Ruby on Rails dengan Cucumber dan Capybara.
Bagaimana saya akan menguji perintah konfirmasi sederhana ("Apakah Anda yakin?")?
Selain itu, di mana saya dapat menemukan dokumentasi lebih lanjut tentang masalah ini?
Saya menggunakan Ruby on Rails dengan Cucumber dan Capybara.
Bagaimana saya akan menguji perintah konfirmasi sederhana ("Apakah Anda yakin?")?
Selain itu, di mana saya dapat menemukan dokumentasi lebih lanjut tentang masalah ini?
Jawaban:
Sepertinya tidak ada cara untuk melakukannya di Capybara, sayangnya. Tetapi jika Anda menjalankan pengujian dengan driver Selenium (dan mungkin driver lain yang mendukung JavaScript), Anda dapat meretasnya. Tepat sebelum melakukan tindakan yang akan memunculkan dialog konfirmasi, ganti confirm
metode untuk selalu mengembalikan nilai true. Dengan begitu, dialog tidak akan pernah ditampilkan, dan pengujian Anda dapat dilanjutkan seolah-olah pengguna telah menekan tombol OK. Jika Anda ingin mensimulasikan kebalikannya, cukup ubah menjadi false.
page.evaluate_script('window.confirm = function() { return true; }')
page.click('Remove')
Driver selenium sekarang mendukung ini
Dari Kapibara Anda akan mengaksesnya seperti ini:
page.driver.browser.switch_to.alert.accept
atau
page.driver.browser.switch_to.alert.dismiss
atau
page.driver.browser.switch_to.alert.text
page.driver.browser
dalam jawaban Derek
Jika Anda ingin secara khusus menguji pesan yang ditampilkan, berikut ini cara yang sangat hack untuk melakukannya. Saya tidak mendukungnya sebagai kode yang indah, tetapi itu menyelesaikan pekerjaan. Anda harus memuat http://plugins.jquery.com/node/1386/release , atau mengubahnya untuk melakukan cookie secara native jika Anda tidak menginginkan jQuery.
Gunakan cerita semacam ini:
Given I am on the menu page for the current booking
And a confirmation box saying "The menu is £3.50 over budget. Click Ok to confirm anyway, or Cancel if you want to make changes." should pop up
And I want to click "Ok"
When I press "Confirm menu"
Then the confirmation box should have been displayed
Dan langkah-langkah ini
Given /^a confirmation box saying "([^"]*)" should pop up$/ do |message|
@expected_message = message
end
Given /^I want to click "([^"]*)"$/ do |option|
retval = (option == "Ok") ? "true" : "false"
page.evaluate_script("window.confirm = function (msg) {
$.cookie('confirm_message', msg)
return #{retval}
}")
end
Then /^the confirmation box should have been displayed$/ do
page.evaluate_script("$.cookie('confirm_message')").should_not be_nil
page.evaluate_script("$.cookie('confirm_message')").should eq(@expected_message)
page.evaluate_script("$.cookie('confirm_message', null)")
end
Memperbarui ini untuk rilis Kapibara saat ini. Kebanyakan pengemudi Kapibara saat ini mendukung API modal. Untuk menerima modal konfirmasi yang akan Anda lakukan
accept_confirm do # dismiss_confirm if not accepting
click_link 'delete' # whatever action triggers the modal to appear
end
Ini bisa digunakan di Mentimun dengan sesuatu seperti
When /^(?:|I )press "([^"]*)" and confirm "([^"]*)"$/ do |button, msg|
accept_confirm msg do
click_button(button)
end
end
yang akan mengklik tombol bernama dan kemudian menerima kotak konfirmasi dengan pesan pencocokan teks
The capybara-webkit sopir mendukung ini juga.
Scenario: Illustrate an example has dialog confirm with text
#
When I confirm the browser dialog with tile "Are you sure?"
#
=====================================================================
my step definition here:
And(/^I confirm the browser dialog with title "([^"]*)"$/) do |title|
if page.driver.class == Capybara::Selenium::Driver
page.driver.browser.switch_to.alert.text.should eq(title)
page.driver.browser.switch_to.alert.accept
elsif page.driver.class == Capybara::Webkit::Driver
sleep 1 # prevent test from failing by waiting for popup
page.driver.browser.confirm_messages.should eq(title)
page.driver.browser.accept_js_confirms
else
raise "Unsupported driver"
end
end
Prickle menambahkan beberapa metode praktis yang berguna untuk bekerja dengan popup di selenium dan webkit
Inti ini memiliki langkah-langkah untuk menguji dialog konfirmasi JS di Rails 2 dan 3 dengan driver Capybara.
Ini adalah adaptasi dari jawaban sebelumnya, tetapi tidak membutuhkan plugin jQuery Cookie.
Mencoba jawaban di atas tidak berhasil. Pada akhirnya ini berhasil untuk saya:
@browser.alert.ok