Seleniumでクリック操作後に待機させる対応

More than 3 years have passed since last update.


はじめに


  • 以下の環境下でのテストをしたところ、クリック操作後にページのロードを待たずにコケてた


    • OS:Mac OS X Mavericks

    • ブラウザ:Safari 7.0

    • selenium-webdriver:2.39.0

    • capybara:2.1.0

    • cucumber:1.3.10




解析


  • Seleniumを使って他にもFirefox,Chromeでのテストを行っているが同じコードを使用してもこの現象が見られるのはSafariのみ

  • 以下のどちらのやり方でも同じ結果だった


    • find('#id').click

    • click_link 'ログイン' #名前は適当



  • click操作を書いているすぐ後に、sleepを入れたら通った


    • そうだろうとうすうす感づいていたが悲しかったm(__)m




対応


  • capybaraの設定を書いているファイル(私の場合はsupport/capybara_config.rb)に以下を追記

class Selenium::Webdriver::Element

def click
bridge.clickElement @id
sleep 1 #ここはページロードを待つとかでも何でもいい
end
end


  • ちなみに、以下の設定をしてもだめだった

# Selenium側の設定

client = Selenium::Webdriver::Remote::Http::Default.new
client.timeout = 100 #100sec

# Capybara側の設定
Capybara.default_wait_time = 10


~ただの宣伝~


  • 全国のSeleniumer必読

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