Question

J'essaie de capturer des captures d'écran de l'échec d'un test à l'aide de sélenium-client et de rspec. Je lance cette commande:

$ spec my_spec.rb \
--require 'rubygems,selenium/rspec/reporting/selenium_test_report_formatter' \
--format=Selenium::RSpec::SeleniumTestReportFormatter:./report.html 

Il crée le rapport correctement lorsque tout passe, puisqu’aucune capture d’écran n’est requise. Cependant, lorsque le test échoue, je reçois ce message et le rapport contient des captures d'écran vierges:

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

Quelle est la cause de cette erreur "exécution expirée"? Est-ce que je manque quelque chose d'important dans mes spécifications? Voici le code pour 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
Était-ce utile?

La solution

Pour obtenir des captures d'écran des erreurs de travail, je devais modifier un peu les choses.

J'ai déplacé le code suivant dans spec_helper (que j'ai trouvé dans 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

et l'a placé dans la section append_after (: each) do de la configuration / de la suppression de mon test (avant la ligne @ selenium_driver.close_current_browser_session).

J'espère que ça aide!

Autres conseils

J'ai rencontré ce problème et j'ai pu le résoudre en configurant le délai d'attente du pilote. Cela peut amener le pilote à mettre fin à la session du navigateur avant de s'exécuter dans: after_each Vous utilisez 10 secondes, je vais bien avec: timeout_in_seconds = > 2000

Pourquoi ne pas prendre la capture d'écran dans la fonction après, mais avant de fermer le navigateur?

Je ne sais pas si cela vous aiderait, https://github.com/mattheworiordan/capybara-screenshot, bien que ce soit pour Capybara et non pas le sélénium

il semble manquer un " à cet endroit.

it "backed up" do
    page.open "/SQLDBDetails.aspx
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top