watir-rspec 记者的自定义屏幕截图
Custom screeshot for watir-rspec reporter
我正在从使用 rspec 的 watir-webdriver 迁移到 watir-rspec(变化不大)。不过现在我想利用记者link的截图我用截图gem。我正在努力解决这个问题,我不想使用标准屏幕截图,因为我有另一个辅助函数可以对图像进行一些处理,屏幕截图 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
将文件 link 添加到报告中是使用 Watir::RSpec.file_path
方法完成的。基本上你:
- 调用
file_path
方法,它告诉报表添加 link 和 returns 预期文件的路径。
- 创建文件,在本例中为屏幕截图,使用
file_path
返回的路径。
在以下示例中,After 挂钩显示了如何使用 file_path
方法添加 link:
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
有几个限制:
- linked 图像应该在结果文件夹中。
- linked 图像应具有特定的生成名称。
- 虽然您始终可以创建屏幕截图,但只有在测试失败时才会link编辑到报告中。
- 默认屏幕截图 link 也将存在。
感谢@JustinKo 的提示,我设法通过覆盖 HtmlFormatter class 中的 extra_failure_content(exception) 方法来修复它。我用自定义调用替换了 save_screenshot 调用以获取我自己的屏幕截图,效果很好。我将它们保存在同一目录中以使其更容易。
这里是 HtmlFormatter 的原代码 link。
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
我正在从使用 rspec 的 watir-webdriver 迁移到 watir-rspec(变化不大)。不过现在我想利用记者link的截图我用截图gem。我正在努力解决这个问题,我不想使用标准屏幕截图,因为我有另一个辅助函数可以对图像进行一些处理,屏幕截图 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
将文件 link 添加到报告中是使用 Watir::RSpec.file_path
方法完成的。基本上你:
- 调用
file_path
方法,它告诉报表添加 link 和 returns 预期文件的路径。 - 创建文件,在本例中为屏幕截图,使用
file_path
返回的路径。
在以下示例中,After 挂钩显示了如何使用 file_path
方法添加 link:
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
有几个限制:
- linked 图像应该在结果文件夹中。
- linked 图像应具有特定的生成名称。
- 虽然您始终可以创建屏幕截图,但只有在测试失败时才会link编辑到报告中。
- 默认屏幕截图 link 也将存在。
感谢@JustinKo 的提示,我设法通过覆盖 HtmlFormatter class 中的 extra_failure_content(exception) 方法来修复它。我用自定义调用替换了 save_screenshot 调用以获取我自己的屏幕截图,效果很好。我将它们保存在同一目录中以使其更容易。
这里是 HtmlFormatter 的原代码 link。 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