Javascript 使用capybara捕获浏览器控制台日志
我需要使用Ruby和Capybara捕获浏览器的控制台日志(类别:info)。到目前为止,我一直在尝试使用Javascript 使用capybara捕获浏览器控制台日志,javascript,ruby,selenium,capybara,console.log,Javascript,Ruby,Selenium,Capybara,Console.log,我需要使用Ruby和Capybara捕获浏览器的控制台日志(类别:info)。到目前为止,我一直在尝试使用driver.manage.logs.get(:browser)或(:client),但使用它,结果并不是我想要的。它给出了selenium和browser之间的交互结果,我可以在其中看到发送执行的javascript语句,但无法捕获结果输出。使用selenium时日志是否可用取决于使用selenium的浏览器。如果你使用的是Firefox,那你就不走运了,因为它不支持日志检索API,但是因
driver.manage.logs.get(:browser)
或(:client)
,但使用它,结果并不是我想要的。它给出了selenium和browser之间的交互结果,我可以在其中看到发送执行的javascript语句,但无法捕获结果输出。使用selenium时日志是否可用取决于使用selenium的浏览器。如果你使用的是Firefox,那你就不走运了,因为它不支持日志检索API,但是因为你使用的是Chrome,所以它们是可以访问的。您遇到的问题是,默认情况下,只捕获警告或错误级别的日志。您可以通过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
这样,您就可以在测试中使用
page.driver.browser.manage.logs.get(:browser)
答案是正确的,但现在如果你使用chrome作为你的驱动程序,你应该使用它
Selenium::WebDriver::Remote::Capabilities.chrome( "goog:loggingPrefs": { browser: 'ALL' } )
注意goog:loggingPrefs
而不是loggingPrefs
只有使用此解决方案,我才能在日志中打印console.log
我花了一段时间,在几次令人沮丧的尝试后从这里得到了它。您在Selenium上使用的是什么浏览器?我现在使用的是chrome浏览器。如果有帮助,您可以查看一下。谢谢回复@Thomas Walpole。我试图实现您的解决方案,但我不断得到未初始化的常量Selenium::WebDriver::Chrome::Options(NameError)。您有什么解决方案可以让我更快地实现它吗。@VivekKhurana您使用的是什么版本的selenium?@VivekKhurana更新您的
selenium webdriver
gem-在3.4.1中添加了Chrome::Options
类。当前版本是3.5.2,升级到3.5.2。你救了我一天。在谷歌Chrome 85.0.4183.83
和ChromeDriver 85.0.4183.83
NoMethodError:private method'log'调用了#我相信Chrome 75+就是这样的,原始配置最多适用于Chrome 74。在Google Chrome 85.0.4183.83
和ChromeDriver 85.0.4183.83
NoMethodError:调用私有方法“log”
Selenium::WebDriver::Remote::Capabilities.chrome( "goog:loggingPrefs": { browser: 'ALL' } )