Capturas de pantalla de selenio usando rspec
-
10-07-2019 - |
Pregunta
Estoy tratando de capturar capturas de pantalla en caso de falla de prueba usando selenium-client y rspec. Ejecuto este comando:
$ spec my_spec.rb \
--require 'rubygems,selenium/rspec/reporting/selenium_test_report_formatter' \
--format=Selenium::RSpec::SeleniumTestReportFormatter:./report.html
Crea el informe correctamente cuando todo pasa, ya que no se requieren capturas de pantalla. Sin embargo, cuando la prueba falla, recibo este mensaje y el informe tiene capturas de pantalla en blanco:
WARNING: Could not capture HTML snapshot: execution expired
WARNING: Could not capture page screenshot: execution expired
WARNING: Could not capture system screenshot: execution expired
Problem while capturing system stateexecution expired
¿Qué está causando este error de 'ejecución caducada'? ¿Me estoy perdiendo algo importante en mi especificación? Aquí está el código para my_spec.rb:
require 'rubygems'
gem "rspec", "=1.2.8"
gem "selenium-client"
require "selenium/client"
require "selenium/rspec/spec_helper"
describe "Databases" do
attr_reader :selenium_driver
alias :page :selenium_driver
before(:all) do
@selenium_driver = Selenium::Client::Driver.new \
:host => "192.168.0.10",
:port => 4444,
:browser => "*firefox",
:url => "http://192.168.0.11/",
:timeout_in_seconds => 10
end
before(:each) do
@selenium_driver.start_new_browser_session
end
# The system capture need to happen BEFORE closing the Selenium session
append_after(:each) do
@selenium_driver.close_current_browser_session
end
it "backed up" do
page.open "/SQLDBDetails.aspx"
page.click "btnBackup", :wait_for => :page
page.text?("Pending Backup").should be_true
end
end
Solución
Para obtener capturas de pantalla en caso de error, tuve que modificar un poco las cosas.
Moví el siguiente código de spec_helper (que encontré en C: \ Ruby \ lib \ ruby ??\ gems \ selenium-client-1.2.18 \ lib \ selenium \ rspec \ spec_helper.rb):
if actual_failure?
Selenium::RSpec::SeleniumTestReportFormatter.capture_system_state(selenium_driver, self)
end
y lo coloqué en la sección append_after (: each) do de la configuración / desmontaje de mi prueba (antes de la línea @ selenium_driver.close_current_browser_session).
¡Espero que esto ayude!
Otros consejos
Me encontré con ese problema y pude resolverlo configurando el tiempo de espera para el controlador. Esto puede hacer que el controlador finalice la sesión del navegador antes de toparse con: after_each Estás usando 10 segundos, estoy funcionando bien con: timeout_in_seconds = > 2000
¿Por qué no tomar la captura de pantalla en la función after, pero antes de cerrar el navegador?
No estoy seguro de si esto ayudaría, https://github.com/mattheworiordan/capybara-screenshot, aunque es para Carpincho y no para Selenio
parece que falta un "
allí.
it "backed up" do
page.open "/SQLDBDetails.aspx