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