🐈‍⬛

ChromeのパスワードチェックがSeleniumの邪魔をする

に公開

概要

関連ありそうなところ変更してないのに、Seleniumのテストがコケて、確認してみたらChange your passwordというダイアログが出て、先に進めなくなっていた。

解決

ドライバー生成のところでPreferenceオプションに'profile.password_manager_leak_detection': falseを渡すとパスワードチェックをスルーできる様です。RailsのプロジェクトでCapybaraを使っていたのでコードは下記の様になります。

Capybara.register_driver :chrome do |app|
  Capybara::Selenium::Driver.new(app, browser: :chrome,
    desired_capabilities: Selenium::WebDriver::Remote::Capabilities.chrome(
      chrome_options: {
        args: %w(window-size=1680,1050),
        w3c: false,
        prefs: {
          'profile.password_manager_leak_detection': false,
        }
      },
    )
  )
end

参考

selenium How to disable or close “Change your password” popup after loginあたりで検索するとprofile.password_manager_leak_detectionfalseにすればどうにかできそうなことは出てくるのですが、言語が違って、オプションをどの様に生成すればいいのかわかりませんでした。

https://groups.google.com/g/selenium-users/c/NYk-pAMtHvs

https://stackoverflow.com/questions/78758185/is-there-any-way-to-handle-change-your-password-prompt-in-google-chrome-using-se
これはCapybara出てくるけど、生成方法が違うのであまり参考にならず。

Selenium::WebDriver::Remote::Capabilities.chromeはCapybaraではなくGoogleが提供するChromeDriverのライブラリの様で、そのドキュメントがこちら。

https://developer.chrome.com/docs/chromedriver/capabilities?hl=ja

先ほどの他言語の解説ではprofile.password_manager_leak_detectionはPreferenceに渡してるので、ここでオプションのオブジェクトのリファレンスをみてprefsにHashで渡したら認識しました。

Discussion