我正在尝试使用selenium-client和rspec捕获有关测试失败的屏幕截图。我运行这个命令:
$ spec my_spec.rb \
--require 'rubygems,selenium/rspec/reporting/selenium_test_report_formatter' \
--format=Selenium::RSpec::SeleniumTestReportFormatter:./report.html
当一切都通过时,它会正确创建报告,因为不需要截屏。但是,当测试失败时,我收到此消息,并且报告有空白屏幕截图:
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
导致此“执行过期”错误的原因是什么?我错过了我的规格中的重要内容吗?以下是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
答案 0 :(得分:1)
我遇到了这个问题,并且能够通过设置驱动程序的超时来解决它。 这可能导致驱动程序在运行之前结束浏览器会话:after_each 您正在使用10秒,我运行正常:timeout_in_seconds => 2000
答案 1 :(得分:0)
为什么不在after功能中截取屏幕截图,但在关闭浏览器之前?
答案 2 :(得分:0)
为了获得有关错误工作的屏幕截图,我不得不稍微修改一下。
我将以下代码移出spec_helper(我在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
并将其放入我测试的setup / teardown的append_after(:each)do部分(在@ selenium_driver.close_current_browser_session行之前)。
希望这有帮助!
答案 3 :(得分:0)
看起来好像错过了"
。
it "backed up" do
page.open "/SQLDBDetails.aspx
答案 4 :(得分:0)
不确定这是否会有所帮助,https://github.com/mattheworiordan/capybara-screenshot,虽然它适用于Capybara而不是Selenium