Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用capybara捕获浏览器控制台日志_Javascript_Ruby_Selenium_Capybara_Console.log - Fatal编程技术网

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

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,但是因

我需要使用Ruby和Capybara捕获浏览器的控制台日志(类别:info)。到目前为止,我一直在尝试使用
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' } )