2010-05-13 10 views
5

Estoy usando rails 2.3.5 y esto es lo que hice. Tengo el último pepino, carriles de pepino y capibara instalados.capybara selenium y JavaScript Destruye

rails demo 
cd demo 
ruby script/generate cucumber --rspec --capybara 
ruby script/generate feature post title:string body:text published:boolean 
ruby script/generate scaffold post title:string body:text published:boolean 
rake db:migrate 
rake cucumber 

Todas las pruebas están pasando. Ahora quiero probar usando Javascript.

En este momento esta es la forma en escenario parece

Scenario: Delete post 
    Given the following posts: 
     |title|body|published| 
     |title 1|body 1|false| 
     |title 2|body 2|true| 
     |title 3|body 3|false| 
     |title 4|body 4|true| 
    When I delete the 3rd post 
    Then I should see the following posts: 
     |Title|Body|Published| 
     |title 1|body 1|false| 
     |title 2|body 2|true| 
     |title 4|body 4|true| 

añadí @javascript en la parte superior.

Ahora cuando ejecuto el rastrillo de pepino, veo una página de confirmación. Pero no pasa nada hasta que hago clic.

¿Qué debo hacer para que se haga clic en Aceptar automáticamente y continúe con la prueba?

Respuesta

8

bien este tipo de un corte, pero creo que en este momento es la única manera:

When /^I confirm a js popup on the next step$/ do 
    page.evaluate_script("window.alert = function(msg) { return true; }") 
    page.evaluate_script("window.confirm = function(msg) { return true; }") 
end 

Tienes que poner este paso justo en frente de la que desencadena la ventana emergente de confirmación (sigue el enlace) . Modificará la alerta estándar y confirmará el comportamiento para que siempre devuelva verdadero. Por lo tanto, no tiene que hacer clic en el botón "Aceptar" usted mismo.

+0

¡Odio tener que hacer esto, pero funciona! –

0

Gracias a Steven por su solución, así es como lo modifico para que se lea un poco mejor:

When /^I follow "([^"]*)" and click OK$/ do |text| 
    page.evaluate_script("window.alert = function(msg) { return true; }") 
    page.evaluate_script("window.confirm = function(msg) { return true; }") 
    When %{I follow "#{text}"} 
end 
2

he implementado una variación en la solución de Tobias.

quería tener medidas como When I follow the "Delete" link for customer "Alice Angry", por lo que tiene lo siguiente:

When /^(.*) and (?:|I)click "OK"$/ do |step| 
    click_ok_after { When step } 
end 

module JavascriptHelpers 
    def click_ok_after 
    begin 
     page.evaluate_script("window.alert = function(msg) { return true; }") 
     page.evaluate_script("window.confirm = function(msg) { return true; }") 
    rescue Capybara::NotSupportedByDriverError 
     # do nothing: we're not testing javascript 
    ensure 
     yield 
    end 
    end 
end 
World(JavascriptHelpers) 

La explicación completa se puede encontrar en el blog que escribí sobre ello aquí http://davidsulc.com/blog/2011/07/10/cucumber-tweaks/ (incluyendo una definición de paso útil para el contenido de las pruebas dentro de contenedores HTML).

Cuestiones relacionadas