【问题标题】:Capture browser console logs with capybara使用 capybara 捕获浏览器控制台日志
【发布时间】:2021-09-06 06:50:11
【问题描述】:

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

【问题讨论】:

标签: javascript ruby selenium capybara console.log


【解决方案1】:

使用 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)

【讨论】:

  • 感谢@Thomas Walpole 的回复。我试图实施您的解决方案,但我不断得到 uninitialized constant Selenium::WebDriver::Chrome::Options (NameError)。您有什么解决方案,以便我可以更快地实施。
  • @VivekKhurana 你用的是什么版本的硒?
  • @VivekKhurana 更新您的 selenium-webdriver gem - Chrome::Options 类是在 3.4.1 中添加的。当前版本是 3.5.2,升级到那个。
  • 你拯救了我的一天。
  • 不适用于Google Chrome 85.0.4183.83 & ChromeDriver 85.0.4183.83 NoMethodError: private method 'log' called for #&lt;Selenium::WebDriver::Remote::Bridge:0x00007fe77c1d47``f8&gt;
【解决方案2】:

Thomas Walpole 答案是正确的,但现在看来,如果您使用 chrome 作为驱动程序,您应该使用

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

注意goog:loggingPrefs 而不是loggingPrefs 只有使用此解决方案我才能在日志中打印console.log

经过几次令人沮丧的尝试,我花了一段时间从https://intellipaat.com/community/5478/getting-console-log-output-from-chrome-with-selenium-python-api-bindings 得到它。

【讨论】:

  • 我相信 Chrome 75+ 就是这种情况,原始配置适用于 Chrome 74。
  • Google Chrome 85.0.4183.83 & ChromeDriver 85.0.4183.83 NoMethodError: private method 'log' called for #&lt;Selenium::WebDriver::Remote::Bridge:0x00007fe77c1d47``f8&gt; 对我不起作用
【解决方案3】:

不确定这是否是您想要的,但请查看https://github.com/dbalatero/capybara-chromedriver-logger

它可以帮助我识别带有动态模块import('')problem。通过显示失败的资产负载(我相信输出为console.error),在本地和 Github Actions / Circle CI 中都可以使用。

【讨论】:

    猜你喜欢
    • 2017-10-03
    • 1970-01-01
    • 2016-02-09
    • 2020-08-21
    • 2017-03-12
    • 1970-01-01
    • 1970-01-01
    • 2013-02-02
    • 2014-10-15
    相关资源
    最近更新 更多