2012-02-09 28 views
5

Estoy probando una extensión de Chrome usando Cucumber junto con Capybara y Selenium-Webdriver.Cómo reiniciar el navegador después de cada escenario de prueba

Mi prueba es muy simple:

@chrome_extension 
    @javascript 
     Scenario: Test1 
     Given I open a browser 
     And I close the browser 
     When I do nothing 
     Then nothing happens 

donde se definen los pasos como:

require 'selenium-webdriver' 

Given /^I open a browser$/ do 
    visit 'http://google.com' 
    STDERR.puts self 
end 

Given /^I close the browser$/ do 
    page.driver.browser.quit 
end 

Given /^I do nothing$/ do 

end 

Given /^nothing happens$/ do 

end 

Cuando llamo page.driver.browser.quit, no dejó de salir de la sesión del navegador . Pero entonces ocurre el siguiente error:

Connection refused - connect(2) (Errno::ECONNREFUSED) 
     /Users/rui/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/net/http.rb:644:in `initialize' 
     /Users/rui/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/net/http.rb:644:in `open' 
     /Users/rui/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/net/http.rb:644:in `block in connect' 
     /Users/rui/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/timeout.rb:44:in `timeout' 
     /Users/rui/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/timeout.rb:87:in `timeout' 
     /Users/rui/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/net/http.rb:644:in `connect' 
     /Users/rui/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/net/http.rb:637:in `do_start' 
     /Users/rui/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/net/http.rb:626:in `start' 
     /Users/rui/.rvm/gems/[email protected]/gems/webmock-1.7.8/lib/webmock/http_lib_adapters/net_http.rb:90:in `request_with_webmock' 
     /Users/rui/.rvm/gems/[email protected]/gems/selenium-webdriver-2.3.2/lib/selenium/webdriver/remote/http/default.rb:73:in `response_for' 
     /Users/rui/.rvm/gems/[email protected]/gems/selenium-webdriver-2.3.2/lib/selenium/webdriver/remote/http/default.rb:41:in `request' 
     /Users/rui/.rvm/gems/[email protected]/gems/selenium-webdriver-2.3.2/lib/selenium/webdriver/remote/http/common.rb:34:in `call' 
     /Users/rui/.rvm/gems/[email protected]/gems/selenium-webdriver-2.3.2/lib/selenium/webdriver/remote/bridge.rb:406:in `raw_execute' 
     /Users/rui/.rvm/gems/[email protected]/gems/selenium-webdriver-2.3.2/lib/selenium/webdriver/remote/bridge.rb:384:in `execute' 
     /Users/rui/.rvm/gems/[email protected]/gems/selenium-webdriver-2.3.2/lib/selenium/webdriver/remote/bridge.rb:228:in `deleteAllCookies' 
     /Users/rui/.rvm/gems/[email protected]/gems/selenium-webdriver-2.3.2/lib/selenium/webdriver/common/options.rb:67:in `delete_all_cookies' 
     /Users/rui/.rvm/gems/[email protected]/gems/capybara-1.1.2/lib/capybara/selenium/driver.rb:81:in `reset!' 
     /Users/rui/.rvm/gems/[email protected]/gems/capybara-1.1.2/lib/capybara/session.rb:70:in `reset!' 
     /Users/rui/.rvm/gems/[email protected]/gems/capybara-1.1.2/lib/capybara/dsl.rb:87:in `block in reset_sessions!' 
     /Users/rui/.rvm/gems/[email protected]/gems/capybara-1.1.2/lib/capybara/dsl.rb:87:in `each' 
     /Users/rui/.rvm/gems/[email protected]/gems/capybara-1.1.2/lib/capybara/dsl.rb:87:in `reset_sessions!' 
     /Users/rui/.rvm/gems/[email protected]/gems/capybara-1.1.2/lib/capybara/cucumber.rb:10:in `After' 

¿Cuál es la forma correcta de reiniciar el navegador después de cada escenario? Necesito que cada prueba sea lo más parecida posible.

¡Gracias de antemano!

+0

He añadido una respuesta a continuación. La clave es que cuando configura esto solo necesita asegurarse de que su enlace @Después destruye completamente el controlador WebDriver cada vez. – MikeJRamsey56

Respuesta

0

Puede haber una forma más elegante de hacer esto, pero yo consideraría que cada escenario en su propia tarea rastrillo y el uso de etiquetas de pepino, de este modo:

desc "Run scenario 1" 
task :scenario_1 do 
cmd = "cucumber --tags @1" 
`#{cmd}` 
end` 

Hacer esto llevaría a cabo exactamente lo que Estamos después, ya que Cucumber apoya esto de fábrica con el argumento --tag.

1

Usando Watir-webdriver, que es muy similar al selenio.

Puede hacerlo utilizando un gancho. Investigue un poco sobre los ganchos para obtener una mejor comprensión, pero en su directorio de soporte para su proyecto, querrá crear un archivo hook. Estoy usando ruby ​​y rubymine para ejecutar mis pruebas, por lo que en su entorno puede ser diferente.

Su archivo de gancho puede ser algo como esto.

require 'watir-webdriver' 



Before do 
    @browser = Watir::Browser.new :chrome 
end 


After do 
    @browser.close 
end 

Entonces, antes de que se corrió cada escenario, se abrirá una instancia del navegador y cerrar el navegador cuando se hace el escenario.

0

Borrar las cookies y actualizar el navegador en un enlace posterior. Por ejemplo, uso esto en Watir-Webdriver

After do |scenario| 
    browser.cookies.clear 
    browser.refresh 
end 
0

Ejemplo de java eliminado.

Capybara está tratando de salvarte anticipando lo que quieres hacer. El carpincho cierra la sesión después de cada paso. Si cierra la sesión del navegador explícitamente, cuando el capibara intenta limpiar las cookies, no hay sesión para limpiar.

Si no desea que el carpincho se encargue de este tipo de cosas, hágalo usted mismo sin carpincho.

+0

Puede ver lo anterior con más detalle en mi página de GitHub [aquí] (https://github.com/mikejramsey56/cuc_jav_webdriver.git). – MikeJRamsey56

+0

Por la apariencia de su mensaje de error, está usando Ruby. No estoy seguro de que la implementación de Java lo ayudaría en este caso. –

+0

@JarodAdair Buen punto. – MikeJRamsey56

Cuestiones relacionadas