代码之家  ›  专栏  ›  技术社区  ›  Zack

未使用Ruby Rspec自动生成屏幕截图

  •  0
  • Zack  · 技术社区  · 6 年前

    我正在使用Ruby Rspec测试一个不使用rails的webapp,因此我没有rails\u助手。rb,只是一个spec\u助手。rb。我可以手动触发屏幕截图,但我不知道如何在出现故障时触发屏幕截图。

    spec\u辅助对象。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\u 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
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Thomas Walpole    6 年前

    您应该能够在RSpec after block中这样做。您可以在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
    

    您需要在重置会话之前运行该块,因此需要在为执行重置而定义的任何块之后定义该块。