RubyからSeleniumを操作する際に使うコードのチートシートです。
Seleniumを使うことでブラウザを操作した表示テストを行ったり、ブラウザをつかった操作の自動化ができます。
 🎃 ブラウザを開く
| driver = Selenium::WebDriver.for :chrome
 | 
Chromeを開くなら:chrome、Firefoxを開くなら:firefox、Internet Exploreを開くなら:ieです。
🐯 特定のURLを開く
| driver.get 'http://www.yahoo.co.jp'driver.navigate.to 'http://www.yahoo.co.jp'
 
 | 
WebDriverはロードが完了するのを待たないので必要に応じて待ち時間を設定してください。
🐝 特定の要素を取得する
- find_element:最初に見つかった要素を返す
- find_elements:見つかった要素すべてを返す
| el = driver.find_element(:id, 'some_id')
 
 
 el = driver.find_element(:class, 'some_class_name')
 
 
 el = driver.find_element(:tag_name, 'div')
 
 
 el = driver.find_element(:link, 'anchor_text')
 
 
 el = driver.find_element(:xpath, "//a[@href='/login']")
 
 
 el = driver.find_element(:css, '#some_id')
 
 | 
 🍮 要素を使った操作
要素のテキストを取得
| driver.find_element(:id, 'some_id').text
 | 
要素の属性値の取得
| driver.find_element(:id, 'some_id').attribute('class')
 | 
クリック、テキスト入力
| driver.find_element(:id, 'some_id').click
 
 
 driver.find_element(:id, 'some_field_id').send_keys 'テキスト入力'
 driver.find_element(:id, 'some_field_id').set 'テキスト入力'
 
 
 
 driver.find_element(:id, 'some_field_id').clear
 
 | 
キーボードの操作
キーボードでenterを実行する場合はこちら。
| driver.find_element(:id, '#q_name').native.send_keys(:return)driver.find_element(:id, '#q_name').native.send_keys(:enter)
 
 | 
チェックボックス・ラジオボタン
| 
 unless driver.find_element(:id, 'some_radio_id').selected?
 driver.find_element(:id, 'some_radio_id').click
 end
 
 
 driver.find_element(:id, 'some_check_box').clear
 
 | 
セレクトタグ
| select = Selenium::WebDriver::Support::Select.new(driver.find_element(:id, 'some_select_id'))
 select.select_by(:value, 'value1')
 select.select_by(:text, '表示テキスト')
 select.select_by(:index, 3)
 
 
 all_options = select.find_elements(:tag_name, 'option')
 
 | 
要素の存在確認
| driver.find_elements(:id, 'some_id').size >= 1
 
 def has_some_id?
 driver.find_element(:id, 'some_id')
 true
 rescue
 false
 end
 
 | 
 🎳 Driverに対する操作
JavaScriptの実行
| driver.execute_script('return window.location.pathname')
 | 
要素の表示を待つ
特定の要素が表示されるまで10秒を上限にwait(待ち時間を設定)ができます。
| wait = Selenium::WebDriver::Wait.new(timeout: 10)
 
 wait.new(timeout: 10).until { driver.find_element(:id, 'some_id') }
 
 
 wait.until { driver.find_element(:id, 'some_id').displayed? }
 
 
 wait.until { driver.find_element(:id, 'some_id').text == 'Ajaxで生成されたテキスト' }
 
 | 
find_elementのタイムアウトを設定する
find_elementのタイムアウト時間はimplicit_waitで設定できます。
| driver.manage.timeouts.implicit_wait = 10
 driver.get 'http://google.com'
 el = driver.find_element(:id, 'some_id')
 
 | 
Capybaraの場合はcssが表示されるまで待ってくれますが、Seleniumの場合は表示されるまでは待ってくれないので注意して使ってください。
Windowを移動する
| window_titles = driver.window_handles.map do |w|driver.switch_to.window(w)
 [w, driver.title]
 end
 
 selected_id = window_titles.find { |e1, e2| e2 == '取得したいウィンドウのタイトル' }.first
 raise 'Not found window' unless selected_id
 
 driver.switch_to.window(selected_id)
 
 | 
JSのダイアログの操作
| a = driver.switch_to.alertif a.text == '期待したテキストがある'
 a.dismiss
 else
 a.accept
 end
 
 | 
🏈 スクリーンショットを撮る
スクリーンショットの取得方法です。private APIのため動作保証はありませんのでご注意ください。
| driver.save_screenshot('path/to/filename.png')
 | 
🐮 参考リンク
🚕 Special Thanks!
職場のテストエンジニアさんに参考になる意見をたくさんいただきました。ありがとうございます!
    
    
    
    
    
    
    🖥 VULTRおすすめ
    
      「VULTR」はVPSサーバのサービスです。日本にリージョンがあり、最安は512MBで2.5ドル/月($0.004/時間)で借りることができます。4GBメモリでも月20ドルです。
      最近はVULTRのヘビーユーザーになので、「ここ」から会員登録してもらえるとサービス開発が捗ります!