【问题标题】:Turn off screenshots in Rails system tests在 Rails 系统测试中关闭屏幕截图
【发布时间】:2025-12-29 20:10:12
【问题描述】:

我在 Rails 5.1 中使用系统测试,我想关闭失败案例的自动屏幕截图。通常,失败消息足以让我弄清楚发生了什么——值得注意的是,webdriver 浏览器窗口总是聚焦以截取屏幕截图,这在我处理代码(或尝试做任何其他事情)时很烦人)。

Capybara 配置中是否有内置方法可以关闭屏幕截图?我浏览了文档,找不到任何明确说明的内容,但由于这是主流 Rails 的新补充,我认为这并不一定意味着它不存在。

【问题讨论】:

    标签: ruby-on-rails capybara


    【解决方案1】:

    在 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
    

    【讨论】:

    • 谢谢!我可能会为此在 ActionDispatch 上打开 PR。似乎这应该是可配置的,无需覆盖方法。
    • @dfaulken 是的 - 这似乎是系统测试 API 中的一个疏忽,最初的意思是你必须将 take_failed_screenshot 添加到你自己的 after_teardown 中 - 但后来他们移动了它进入 AD::SystemTestCase 并忽略了一种禁用方法
    【解决方案2】:

    我认为重写 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
    

    【讨论】:

      【解决方案3】:
      Capybara::Screenshot.autosave_on_failure = false
      

      我认为这会解决你的问题。

      尝试查找要导入此库的文件。或者找到 capybara-screenshot/lib/capybara-screenshot.rb 并将 self.autosave_on_failure = true 更改为 false

      【讨论】: