Zack
Zack

Reputation: 2497

Screenshots not being auto generated with Ruby-Rspec

I am using Ruby Rspec to test a webapp that doesn't use rails, thus I don't have a rails_helper.rb, just a spec_helper.rb. I can manually trigger a screenshot but I can't figure out how to trigger the screenshots on a failure.

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

Upvotes: 0

Views: 546

Answers (1)

Thomas Walpole
Thomas Walpole

Reputation: 49900

You should be able to do that in an RSpec after block. You can define that in your RSpec configuration, etc and should basically boil down to

after(:each) do |example|
  if example.exception
     # Do whatever you want to happen on failure
     Capybara.current_session.save_and_open_screenshot
  end 
end

You'd need that block to run before you reset the session, so it needs to be defined after whatever block you have defined for doing the reset.

Upvotes: 3

Related Questions