Bagaimana cara menguji dialog konfirmasi dengan Mentimun?


Jawaban:


62

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 confirmmetode 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')

Ini sepertinya tidak berfungsi lagi di Firefox 4 ... Solusi @ derek-ekins di bawah, dari apa yang dikatakan Google kepada saya, tampaknya lebih kompatibel ke depan, meskipun saya belum bisa mengonfirmasi (saya terjebak di Capybara 0.3.9).
carpeliam

1
Lihat jawaban di bawah untuk menggunakan "page.driver.browser.switch_to ..."
Thorbjørn Hermansen

134

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

2
Untuk siapa pun yang mengikuti ini - harap perhatikan bahwa jawaban Derek memang berfungsi di mana saya menemukan bahwa kode dalam dokumentasi Selenium resmi tidak (mentimun / Selenium). Perhatikan kehadiran page.driver.browserdalam jawaban Derek
Peter Nixey

Peter - kode di sini dirancang khusus untuk menggunakan kapibara sedangkan kode di dokumen adalah untuk saat Anda menggunakan selenium-webdriver secara langsung - Saya menulis contoh itu juga jadi saya harap ini berfungsi!
Derek Ekins

Ahh. Ya, poin yang bagus dan saya benar-benar terlewat. Dalam hal ini terima kasih untuk kedua contoh tersebut.
Peter Nixey

39

Saya telah menerapkan dua langkah web ini di /features/step_definitions/web_steps.rb:

When /^I confirm popup$/ do
  page.driver.browser.switch_to.alert.accept    
end

When /^I dismiss popup$/ do
  page.driver.browser.switch_to.alert.dismiss
end

8

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

2
Solusi keren! Saya membaliknya sedikit yang terasa lebih alami bagi saya: gist.github.com/727614
Mat Schaffer

Dan inilah versi lain dari kode itu yang mendukung kotak peringatan dan konfirmasi, gist.github.com/919116
Matthew O'Riordan

3

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



2
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

1

Prickle menambahkan beberapa metode praktis yang berguna untuk bekerja dengan popup di selenium dan webkit


0

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.


0

Mencoba jawaban di atas tidak berhasil. Pada akhirnya ini berhasil untuk saya:

@browser.alert.ok
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.