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

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

需要帮忙!!!

使用selenium时是否可以使用日志取决于您使用Selenium的浏览器。 如果你使用的是Firefox,那你就不幸了,因为它不支持日志检索API,但是因为你使用的是Chrome,所以它们是可访问的。 您遇到的问题是,默认情况下,仅捕获WARN或ERROR级别日志。 您可以通过loggingPrefsfunction在驱动程序注册中更改此设置

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) 

我用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 } }