Estou usando Ruby on Rails com Cucumber e Capybara.
Como eu testaria um comando de confirmação simples ("Tem certeza?")?
Além disso, onde posso encontrar mais documentação sobre esse problema?
automated-tests
capybara
integration-testing
Yuval Karmi
fonte
fonte
Respostas:
Parece que não há como fazer isso na Capivara, infelizmente. Mas se você estiver executando seus testes com o driver Selenium (e provavelmente outros drivers que suportam JavaScript), você pode hackea-lo. Antes de executar a ação que abriria a caixa de diálogo de confirmação, substitua 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ê quiser simular o reverso, basta alterá-lo para retornar falso.fonte
O driver de selênio agora suporta este
Da Capivara você o acessaria assim:
ou
ou
fonte
page.driver.browser
na resposta de DerekImplementei essas duas etapas da web em
/features/step_definitions/web_steps.rb
:fonte
Se você deseja testar especificamente a mensagem que está sendo exibida, aqui está uma maneira particularmente prática de fazer isso. Eu não endosso isso como um código bonito, mas ele dá conta do recado. Você precisará carregar http://plugins.jquery.com/node/1386/release ou alterá-lo para fazer cookies nativamente se não quiser jQuery.
Use este tipo de história:
E essas etapas
fonte
Atualizando isso para versões atuais do Capybara. A maioria dos drivers Capybara hoje suporta a API modal. Para aceitar um modal de confirmação, você faria
Isso pode ser usado no pepino com algo como
que irá clicar no botão nomeado e então aceitar uma caixa de confirmação com o texto correspondente à mensagem
fonte
O driver capivara-webkit também suporta isso.
fonte
fonte
Prickle adiciona alguns métodos convenientes para trabalhar com pop-ups em selênio e webkit
fonte
Esta essência contém etapas para testar uma caixa de diálogo de confirmação JS no Rails 2 e 3 com qualquer driver Capybara.
É uma adaptação de uma resposta anterior, mas não precisa do plugin jQuery Cookie.
fonte
Tentei as respostas acima sem sorte. No final, isso funcionou para mim:
fonte