Seleniumチートシート


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:見つかった要素すべてを返す
# IDが一致する要素を返す
el = driver.find_element(:id, 'some_id')
# クラス名が一致する要素を返す
el = driver.find_element(:class, 'some_class_name')
# HTMLタグの名前が一致する
el = driver.find_element(:tag_name, 'div')
# アンカーテキスト(リンクテキスト)が一致する
el = driver.find_element(:link, 'anchor_text')
# XPath形式で要素を指定する
el = driver.find_element(:xpath, //a[@href='/login'])
# cssセレクターで要素を指定する
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_radio_id').click
# チェックボックス/ラジオボタンの選択を解除する
driver.find_element(:id, 'some_check_box').clear

セレクトタグ

# セレクトタグの取得
select = driver.find_element(:id, 'some_select_id')
# すべてのオプションを取得
all_options = select.find_elements(:tag_name, 'option')
# セットしたいオプションを選択
option = all_option.find { |o| o.text == '選択したい文字列' }
option.click if option

要素の存在確認

driver.find_element(:id, 'some_id').displayed?

🚕 Driverに対する操作

JavaScriptの実行

driver.execute_script(return window.location.pathname)

要素の表示を待つ

特定の要素が表示されるまで10秒を上限にwait(待ち時間を設定)ができます。

Selenium::WebDriver::Wait.new(timeout: 10
.until { driver.find_element(:id, 'some_id') }

待ち時間を全体で設定する

要素が取得できなったときに一定時間DOMのポーリングを行うように設定できます。

driver.manage.timeouts.implicit_wait = 10
driver.get http://google.com
el = driver.find_element(:id, 'some_id')

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
driver.switch_to.window(selected_id)

JSのダイアログの操作

a = driver.switch_to.alert
if a.text == '期待したテキストがある'
a.dismiss
else
a.accept
end

🐞 参考リンク

📚 おすすめの書籍