watir-rspec记者的自定义截图

时间:2015-03-11 11:23:54

标签: rspec watir watir-webdriver

我正在从使用rspec的watir-webdriver迁移到watir-rspec(这不是一个很大的改变)。但是现在我想利用记者将我拍摄的截图链接到截图宝石。我正在努力解决这个问题,我不想使用标准截图,因为我有另一个辅助功能,可以对图像做一些工作,屏幕截图gem允许我获取特定元素的截图。

在watir-rspec文档中,它声称我们只需添加这三行,但我不知道在何处以及如何更改它以适应我的自定义图像生成。

uploaded_file_path = Watir::RSpec.file_path("uploaded.txt")
File.open(uploaded_file_path, "w") {|file| file.write "Generated File Input"}
file_field(:name => "upload-file").set uploaded_file_path

2 个答案:

答案 0 :(得分:2)

使用Watir::RSpec.file_path方法添加报告的文件链接。基本上你:

  1. 调用file_path方法,该方法告诉报告添加链接并返回预期文件的路径。
  2. 使用file_path返回的路径创建文件,在本例中为屏幕截图。
  3. 在以下示例中,After hook显示了如何使用file_path方法添加链接:

    require_relative "spec_helper"
    
    describe "Google" do
      before { goto "http://google.com" }
    
      it "allows to search" do
        text_field(:name => "q").set "watir"
        button(:id => "gbqfb").click # This will fail to locate the element
        results = div(:id => "ires")
        results.should be_present.within(2)
        results.lis(:class => "g").map(&:text).should be_any { |text| text =~ /watir/ }
        results.should be_present.during(1)
      end
    
      after do
        # Call Watir::RSpec.file_path to:
        #  1. Tell the report to add a link
        #  2. Determine the file path/name the report will link to
        screenshot_file_path = Watir::RSpec.file_path("custom_screenshot.jpg")
        #=> "C:/Scripts/Misc/Programming/watir-rspec/spec/tmp/spec-results/custom_screenshot_104027_1_1.jpg"
    
        # Create the screenshot to the path specified in screenshot_file_path
        # This would be dependent on your screenshot gem
      end
    end
    

    有一些限制:

    1. 链接的图像应位于结果文件夹中。
    2. 链接的图像应具有特定的生成名称。
    3. 虽然您始终可以创建屏幕截图,但只有在测试失败时才会链接到报告。
    4. 默认屏幕截图链接也将存在。

答案 1 :(得分:0)

感谢@JustinKo提示,我设法修复它覆盖HtmlFormatter类中的extra_failure_content(exception)方法。我用自定义调用替换了save_screenshot调用以获取我自己的屏幕截图,它运行得很好。我将它们保存在同一目录中以使其更容易。

这是HtmlFormatter原始代码的链接。 https://github.com/watir/watir-rspec/blob/master/lib/watir/rspec/html_formatter.rb

class MyHtmlFormatter < Watir::RSpec::HtmlFormatter
 def my_custom_function(description)
  file_name = file_path("your_file.png", description)
  old = File.absolute_path("your_file.png") 
  File.rename(old, file_name)
  file_name
 end

 def extra_failure_content(exception)
    browser = example_group.before_all_ivars[:@browser] || $browser
    return super unless browser && browser.exists?
    my_custom_function args
    save_html browser
    (...)
 end