Techioz Blog

Capybara を使用してブラウザ コンソールのログをキャプチャする

概要

Ruby と Capybara を使用してブラウザのコンソール ログ (カテゴリ: 情報) をキャプチャする必要があります。これまで、driver.manage.logs.get(:browser) または (:client) を使用しようとしましたが、これを使用すると、結果は期待どおりではありません。 Selenium とブラウザーの間の対話結果が表示され、実行のために送信された JavaScript ステートメントが表示されますが、結果の出力はキャプチャされません。

解決策

Selenium の使用時にログが利用できるかどうかは、Selenium で使用しているブラウザによって異なります。 Firefox を使用している場合は、ログ取得 API がサポートされていないため、運が悪いでしょうが、Chrome を使用しているため、アクセスできます。あなたが抱えている問題は、デフォルトでは、WARN または ERROR レベルのログのみがキャプチャされることです。これは、loggingPrefs 機能を使用してドライバー登録で変更できます。

セレン 3

    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

セレン 4

   Capybara.register_driver :logging_selenium_chrome do |app|
     options = Selenium::WebDriver::Chrome::Options.new
     options.add_option("goog:loggingPrefs", {browser: 'ALL'})

     browser_options = ::Selenium::WebDriver::Chrome::Options.new()

     Capybara.register_driver :chrome do |app|
     Capybara::Selenium::Driver.new(app,
                                 capabilities: options,
                                 browser: :chrome)
     end
   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)