使用capybara捕获浏览器控制台日志

时间:2017-09-18 11:48:13

标签: javascript ruby selenium capybara console.log

我需要使用Ruby&获取浏览器的控制台日志(类别:信息)。水豚。直到现在我已经尝试过使用driver.manage.logs.get(:browser)或(:client),但是使用它,结果不是我想要的。它给出了selenium和浏览器之间的交互结果,我可以看到我的javascript语句被发送执行,但结果输出无法被捕获。

需要帮助!!!

3 个答案:

答案 0 :(得分:14)

使用selenium时日志是否可用取决于您使用Selenium的浏览器。如果你使用的是Firefox,那么你运气不好,因为它不支持日志检索API,但是由于你使用的是Chrome,它们是可以访问的。您遇到的问题是,默认情况下,仅捕获WARN或ERROR级别日志。您可以通过loggingPrefs功能

在驱动程序注册中更改此设置
Capybara.register_driver :logging_selenium_chrome do |app|
  caps = Selenium::WebDriver::Remote::Capabilities.chrome(loggingPrefs:{browser: 'ALL'})
  browser_options = ::Selenium::WebDriver::Chrome::Options.new()
  # browser_options.args << '--some_option' # add whatever browser args and other options you need (--headless, etc)
  Capybara::Selenium::Driver.new(app, browser: :chrome, options: browser_options, desired_capabilities: caps)
end

然后指定使用:logging_selenium_chrome作为您的驱动程序

 Capybara.javascript_driver = :logging_selenium_chrome # or however else you're specifying which driver to use

然后允许您使用

获取测试中的日志
page.driver.browser.manage.logs.get(:browser)

答案 1 :(得分:5)

this answer答案是正确的,但如今看来,如果您使用chrome作为驱动程序,则应该使用

Selenium::WebDriver::Remote::Capabilities.chrome( "goog:loggingPrefs": { browser: 'ALL' } )

仅使用此解决方案,通知goog:loggingPrefs而不是loggingPrefs,我才能够在日志中打印console.log

花了我一段时间后,经过几次令人沮丧的尝试,才从这里Thomas Walpole拿到它。

答案 2 :(得分:-1)

我是用java做的。你可以看看

public void analyzeLog() {

LogEntries logEntries = driver.manage().logs().get(LogType.BROWSER);
for (LogEntry entry : logEntries) {
    System.out.println(new Date(entry.getTimestamp()) + " " + entry.getLevel() + " " + entry.getMessage());
    //do something useful with the data
}
}