LoginSignup
21
21

More than 5 years have passed since last update.

【Selenium】Firefoxのキャッシュを無効にしてエラーを未然に防ぐ

Last updated at Posted at 2014-07-28

はじめに

  • テストがある日急にコケ始めていてなんでだろうと調べていると、javascriptのコードが取得できていないことが原因だと判明しました
  • Jenkinsを使って複数のスレーブマシンでテストを実行していて現象はどのマシンも同じでした
  • ブラウザを立ち上げて目視で見てみると、確かにscript部分が効いていない模様
  • そこで、キャッシュを全消去してみると、期待通りにscript部分が効いてテストも通るようになりました
  • Seleniumに関わらず、古いキャッシュが残っていて最新のfaviconやcssが取得できていないためページが期待通りに表示されないということはたまにあるでしょう
  • まさに今回のケースはそれでした

やること

  • せっかくSeleniumを使っているのに再発する度に手動でキャッシュクリアなんてのは嫌なので対策を!
  • ドライバーの設定を書いているところに以下のようにキャッシュを使わない設定を書く
    • この設定を入れたかといってテストの実行速度が著しく遅くなるということはなかったです
features/support/capybara_drivers.rb
...
CAPYBARA_DRIVERS.each do |driver|
  Capybara.register_driver driver[:key] do |app|
    client = Selenium::WebDriver::Remote::Http::Default.new
    client.timeout = 100 
    opts = {browser: driver[:browser], http_client: client}
    opts[:profile] = Selenium::WebDriver::Firefox::Profile.new
    # キャッシュを使わない設定
    opts[:profile]['browser.cache.disk.enable'] = false
    opts[:profile]['browser.cache.memory.enable'] = false
    opts[:profile]['browser.cache.offline.enable'] = false
    opts[:profile]['network.http.use-cache'] = false
...

効果確認

  • 自前のアプリケーションに対して、簡単なアクセスをするテストを書いてみてサーバログを確認してみた
  • キャッシュを無効にした場合は「200 OK」なのに対して、有効にした場合は「304 Not Modified」が所々で出ていることを確認

HTTPステータスコード304について

  • ブラウザ側では304を受け取ると、ブラウザ内のキャッシュに残っているコンテンツを使ってWebページを表示する

参考

~ただの宣伝~

  • 全国のSeleniumer必読
  • Selenium, SauceLabs, Travis, Jenkinsに関するノウハウ書いているのでよかったら参考にしてみてください
21
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
21