Pergunta

Estou usando rubi nos trilhos com pepino e capybara.

Como eu testaria um comando de confirmação simples ("Você tem certeza?")?

Além disso, onde eu poderia encontrar mais documentação sobre esse assunto?

Foi útil?

Solução

Parece que não há como fazer isso em Capybara, infelizmente. Mas se você estiver executando seus testes com o driver de Selenium (e provavelmente outros drivers que suportam o JavaScript), poderá invadi -lo. Pouco antes de executar a ação que trazia a caixa de diálogo confirmar, substituir o confirm método para sempre retornar verdadeiro. Dessa forma, a caixa de diálogo nunca será exibida e seus testes podem continuar como se o usuário tivesse pressionado o botão OK. Se você deseja simular o inverso, basta alterá -lo para retornar false.

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

Outras dicas

O driver de selênio agora suporta isso

De Capybara, você acessaria assim:

page.driver.browser.switch_to.alert.accept

ou

page.driver.browser.switch_to.alert.dismiss

ou

 page.driver.browser.switch_to.alert.text

Eu implementei essas duas etapas da web em /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 você deseja testar especificamente a mensagem que está sendo exibida, aqui está uma maneira particularmente hacky de fazê -lo. Eu não o endosso como um código bonito, mas faz o trabalho. Você precisará carregar http://plugins.jquery.com/node/1386/release, ou altere -o para fazer cookies nativamente, se você não quiser jQuery.

Use esse tipo de história:

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 essas etapas

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

Atualizando isso para lançamentos atuais da Capybara. A maioria dos drivers da Capybara hoje apóia a API modal. Para aceitar um modal confirm que você faria

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

Isso pode ser usado em pepino com algo como

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

que clicará no botão nomeado e depois aceitará uma caixa de confirmação com texto correspondente à MSG

o Capybara-Webkit O motorista também suporta isso.

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

Picada Adiciona alguns métodos de conveniência úteis para trabalhar com pop -ups em Selenium e Webkit

Esta essência Tem etapas para testar um JS confirmar a caixa de diálogo nos Rails 2 e 3 com qualquer motorista da Capybara.

É uma adaptação de uma resposta anterior, mas não precisa do plugin jQuery Cookie.

Tentei as respostas acima sem sorte. No final, isso funcionou para mim:

@browser.alert.ok
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top