Ruby-Rspec 未自动生成屏幕截图
Screenshots not being auto generated with Ruby-Rspec
我正在使用 Ruby Rspec 来测试不使用 rails 的网络应用程序,因此我没有 rails_helper.rb,只有 spec_helper.rb。我可以手动触发截图,但我不知道如何在失败时触发截图。
spec_helper.rb:
# frozen-string-literal: true
require 'rspec'
require 'capybara/rspec'
require 'capybara-screenshot/rspec'
require 'capybara/dsl'
require 'selenium-webdriver'
require 'site_prism'
Dir[File.dirname(__FILE__) + '/page_objects/*/*.rb'].each do |page_object|
require page_object
end
Capybara.register_driver :selenium do |app|
Capybara::Selenium::Driver.new(app, browser: :chrome)
end
Capybara.save_path = "#{Dir.pwd}/screenshots"
Capybara.default_driver = :selenium
Capybara.app_host = "REDACTED"
Capybara.default_max_wait_time = 20
my_spec.rb
describe 'spec' do
before(:each) do
@my_page = login_and_open_my_page
end
it "fails" do
expect(5).to eq(6)
end
end
您应该可以在 RSpec 块后执行此操作。您可以在 RSpec 配置等中定义它,基本上应该归结为
after(:each) do |example|
if example.exception
# Do whatever you want to happen on failure
Capybara.current_session.save_and_open_screenshot
end
end
在重置会话之前,您需要将该块添加到 运行,因此需要在您为重置定义的任何块之后定义它。
我正在使用 Ruby Rspec 来测试不使用 rails 的网络应用程序,因此我没有 rails_helper.rb,只有 spec_helper.rb。我可以手动触发截图,但我不知道如何在失败时触发截图。
spec_helper.rb:
# frozen-string-literal: true
require 'rspec'
require 'capybara/rspec'
require 'capybara-screenshot/rspec'
require 'capybara/dsl'
require 'selenium-webdriver'
require 'site_prism'
Dir[File.dirname(__FILE__) + '/page_objects/*/*.rb'].each do |page_object|
require page_object
end
Capybara.register_driver :selenium do |app|
Capybara::Selenium::Driver.new(app, browser: :chrome)
end
Capybara.save_path = "#{Dir.pwd}/screenshots"
Capybara.default_driver = :selenium
Capybara.app_host = "REDACTED"
Capybara.default_max_wait_time = 20
my_spec.rb
describe 'spec' do
before(:each) do
@my_page = login_and_open_my_page
end
it "fails" do
expect(5).to eq(6)
end
end
您应该可以在 RSpec 块后执行此操作。您可以在 RSpec 配置等中定义它,基本上应该归结为
after(:each) do |example|
if example.exception
# Do whatever you want to happen on failure
Capybara.current_session.save_and_open_screenshot
end
end
在重置会话之前,您需要将该块添加到 运行,因此需要在您为重置定义的任何块之后定义它。