Domanda

Sto usando Ruby on Rails con cetriolo e Capybara.

Come potrei fare per testare un semplice comando confirm ( "Sei sicuro?")?

Inoltre, dove posso trovare ulteriore documentazione su questo tema?

È stato utile?

Soluzione

Sembra che non c'è modo di farlo in Capybara, purtroppo. Ma se si sta eseguendo i test con il driver selenio (e probabilmente altri driver che supportano JavaScript), è possibile modificarlo. Poco prima di eseguire l'azione che avrebbe portato la finestra di dialogo di conferma, l'override del metodo confirm per tornare sempre vero. In questo modo non sarà mai visualizzata la finestra di dialogo, e le vostre prove può continuare come se l'utente avesse premuto il pulsante OK. Se si desidera simulare il contrario, è sufficiente modificare a restituire false.

page.evaluate_script('window.confirm = function() { return true; }')
page.click('Remove')

Altri suggerimenti

Il driver selenio ora supporta questo

Da Capybara si accedere in questo modo:

page.driver.browser.switch_to.alert.accept

o

page.driver.browser.switch_to.alert.dismiss

o

 page.driver.browser.switch_to.alert.text

Ho implementato questi due passaggi web in /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

Se si desidera verificare in particolare il messaggio che viene visualizzato, ecco un modo particolarmente hacky per farlo. Io non condivido come codice bello, ma ottiene il lavoro fatto. Avrai bisogno di caricare http://plugins.jquery.com/node/1386/release, o modificarlo per fare i biscotti in modo nativo, se non si vuole jQuery.

Utilizzare questo tipo di storia:

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

E questi passaggi

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

L'aggiornamento di queste per le versioni attuali di Capybara. La maggior parte dei piloti Capybara oggi supportano l'API modale. Per accettare un modale conferma fareste

accept_confirm do  # dismiss_confirm if not accepting
  click_link 'delete'  # whatever action triggers the modal to appear
end

Questo può essere usato in Cetriolo con qualcosa come

When /^(?:|I )press "([^"]*)" and confirm "([^"]*)"$/ do |button, msg|
  accept_confirm msg do
    click_button(button)
  end
end

che fare clic sul pulsante di nome e quindi accettare una scatola di conferma con la corrispondenza del testo msg

Il capibara-webkit supporta conducente anche questo.

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 aggiunge alcuni metodi di convenienza a portata di mano per lavorare con i popup in selenio e webkit

Questo succo ha gradini per testare una finestra di conferma JS in Rails 2 e 3 con qualsiasi driver Capybara.

E 'un adattamento di un precedente risposta, ma non ha bisogno del plugin jQuery Cookie.

Ho cercato le risposte di cui sopra senza fortuna. Alla fine questo ha funzionato per me:

@browser.alert.ok
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top