web-dev-qa-db-ja.com

capybaraでブラウザコンソールログをキャプチャする

Ruby&Capybaraを使用して、ブラウザのコンソールログ(カテゴリ:情報)をキャプチャする必要があります。これまで、driver.manage.logs.get(:browser)または(:client)しかし、これを使用すると、結果は私が望むものではありません。 Seleniumとブラウザー間の相互作用の結果が表示され、実行のために送信されたjavascriptステートメントを確認できますが、結果の出力はキャプチャされません。

7
Vivek Khurana

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)
20
Thomas Walpole

Thomas Walpole 答えは正しいですが、最近はchromeをドライバーとして使用している場合は、使用する必要があるようです

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

このソリューションでのみ、loggingPrefsの代わりにgoog:loggingPrefsに注意してください。ログにconsole.logを出力できました。

しばらくして、ここから取得しました https://intellipaat.com/community/5478/getting-console-log-output-from-chrome-with-Selenium-python-api-bindings afterいくつかの苛立たしい試み。

0
0Ds0