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.alert if 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のヘビーユーザーになので、「ここ」から会員登録してもらえるとサービス開発が捗ります!