Capybara重定向stderr

时间:2013-10-22 14:27:11

标签: ruby rspec capybara capybara-webkit

在运行自动化测试脚本时,我经常会收到以下警告信息和其他信息:

QFont::setPixelSize: Pixel size <= 0 (0)
QNetworkReplyImplPrivate::error: Internal problem, this method must only be called once.

我一直在搜索,这些输出与我的测试脚本无关。它们不会以任何方式影响结果。因此,我不希望看到它们。

在寻找解决这个问题的方法时,我找到了应该将stderr重定向到将过滤掉特定消息的类的代码。但是,当我尝试使用此代码时,我的脚本都不起作用。

抑制警告的类:

class WarningSuppressor

    # array to hold warnings to suppress
    SUPPRESS_THESE_WARNINGS = [
        'QFont::setPixelSize: Pixel size <= 0 (0)',
        'QNetworkReplyImplPrivate::error: Internal problem, this method must only be     called once.'
    ]

    class << self
        def write(message)
            if suppress_warning? message
                0
            end
        end

        def suppress_warning? message
            SUPPRESS_THESE_WARNINGS.any? { |suppressable_warning| message.chomp.include? suppressable_warning }
        end
    end
end

应该重定向stderr的配置代码:

Capybara.configure do |config|
    config.default_driver = :webkit
    config.javascript_driver = :webkit
    config.run_server = false # prevents Capybara from booting up a rack application automatically
    config.app_host = 'http://local.xxxxxxxx.com'

    # Sends output to a custom warning supressor
    config.register_driver :webkit do |app|
      Capybara::Driver::Webkit.new(app, stderr: WarningSuppressor)
    end

    # 10 second wait for ajax to finish
    config.default_wait_time = 10
  end

如果我在阻止声明中插入binding.pry,则appnilCapybara::Driver::Webkit存在。

有没有人有更好的方法/方法来解决这个问题;在运行自动脚本时隐藏某些警告的方法吗?

0 个答案:

没有答案