【发布时间】:2025-12-29 20:10:12
【问题描述】:
我在 Rails 5.1 中使用系统测试,我想关闭失败案例的自动屏幕截图。通常,失败消息足以让我弄清楚发生了什么——值得注意的是,webdriver 浏览器窗口总是聚焦以截取屏幕截图,这在我处理代码(或尝试做任何其他事情)时很烦人)。
Capybara 配置中是否有内置方法可以关闭屏幕截图?我浏览了文档,找不到任何明确说明的内容,但由于这是主流 Rails 的新补充,我认为这并不一定意味着它不存在。
【问题讨论】:
我在 Rails 5.1 中使用系统测试,我想关闭失败案例的自动屏幕截图。通常,失败消息足以让我弄清楚发生了什么——值得注意的是,webdriver 浏览器窗口总是聚焦以截取屏幕截图,这在我处理代码(或尝试做任何其他事情)时很烦人)。
Capybara 配置中是否有内置方法可以关闭屏幕截图?我浏览了文档,找不到任何明确说明的内容,但由于这是主流 Rails 的新补充,我认为这并不一定意味着它不存在。
【问题讨论】:
在 Rails 5.1 中 ActionDispatch::SystemTestCase(ApplicationSystemTestCase 派生自)有一个默认的 after_teardown 方法
def after_teardown
take_failed_screenshot
Capybara.reset_sessions!
super
end
要阻止截屏,最简单的方法是在 ApplicationSystemTestCase 类中覆盖 take_failed_screenshot
class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
driven_by ...
# Add this method
def take_failed_screenshot
false
end
end
【讨论】:
take_failed_screenshot 添加到你自己的 after_teardown 中 - 但后来他们移动了它进入 AD::SystemTestCase 并忽略了一种禁用方法
我认为重写 supports_screenshot? 方法更优雅,就我而言,我想禁用 Heroku CI 上的屏幕截图
class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
private
# disable only on CI, i.e: HEROKU CI
def supports_screenshot?
return false if ENV['CI']
super
end
# to disable screenshots completely on every test invironment (local, CI)
def supports_screenshot?
false
end
end
【讨论】:
Capybara::Screenshot.autosave_on_failure = false
我认为这会解决你的问题。
尝试查找要导入此库的文件。或者找到 capybara-screenshot/lib/capybara-screenshot.rb 并将 self.autosave_on_failure = true 更改为 false
【讨论】: