Techioz Blog

Ruby を使用して Selenium-webdriver 4 を使用してブラウザ ログにアクセスする

概要

gem selenium-webdriver をバージョン 3 から 4 に更新しています。

以下は、JavaScript テストを実行するための Chrome ドライバーのセットアップです。

Capybara.register_driver :chrome do |app|
  options = Selenium::WebDriver::Chrome::Options.new(
    args: [
      'headless',
      'disable-gpu',
      'no-sandbox',
      '--window-size=2560,1440',
      '--disable-web-security',
      '--allow-running-insecure-content',
      "--enable-logging", # Enables logging
      "--log-level=0", # Enables all logging
      "--v=1" # Sets the verbosity level of logging
    ]
  )

  # browser_logging_path = "/tmp/chromedriver.log"
  # options.add_argument("--log-path=#{browser_logging_path}")


  # In Selenium 4, `add_option` is replaced by `add_preference` for setting browser-specific preferences.
  # However, for capabilities like loggingPrefs, you should use `add_option` with correct nesting under 'goog:loggingPrefs'.
  options.add_option('goog:loggingPrefs', { browser: 'ALL' })

  Capybara::Selenium::Driver.new(app, browser: :chrome, options: options)
end

私が抱えている問題は、テストが失敗した場合にブラウザーのログにアクセスすることです。

  config.after do |example|
    if example.exception && example.metadata[:js]
       browser_logs = page.driver.browser.logs.get(:browser)
       puts browser_logs
    end
  end

次の 2 つの方法のいずれかを使用してログにアクセスしようとしていますが、どれも機能しません。

page.driver.browser.logs.get(:browser)

または

page.driver.browser.manage.logs.get(:browser)

これらの呼び出しでは両方とも、「NoMethodError Exception: unknown method ‘logs’ for #<Selenium::WebDriver::Manager」というエラーが発生します。

テストが失敗した場合にブラウザのログにアクセスするにはどうすればよいですか?

解決策

解決策は、新しいヘッドレス オプションを使用することです。

  options = Selenium::WebDriver::Chrome::Options.new(
    args: [
      'headless=new',
      'disable-gpu',
      'no-sandbox',
      '--window-size=2560,1440',
      '--disable-web-security',
      '--allow-running-insecure-content',
      "--enable-logging", # Enables logging
      "--log-level=0", # Enables all logging
      "--v=1" # Sets the verbosity level of logging
    ]
  )