在运行自动化测试脚本时,我经常会收到以下警告消息和其他消息:
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
如果我在块语句中插入一个,app
是nil
但Capybara::Driver::Webkit
存在。
有没有人有更好的方法/方法来解决这个问题?在运行我的自动化脚本时隐藏某些警告的方法?