まだ手動テストで消耗してるの? Selenium WebDriver編

最近はやりの自動テストツール。
そんな中から人気のあるSelenium WebDriverの導入から簡単な使い方までを紹介したいと思います。
Java, C#, Python, Ruby, JavaScript(Node.js)がサポートされていますが、今回はRubyを使用します。
時間があればNode.jsもやります!
ブラウザはFireFoxを使用します。
Chromeを使用したい場合は
GitHub - SeleniumHQ/selenium-google-code-issue-archive: Archive, please see main selenium repo
こちらからChrome Driverをインストールする必要があります。
決してめんどくさいわけではないです。


Selenium WebDriverの導入

gem install selenium-webdriver

まずはインストール

簡単なコード

require 'selenium-webdriver'

# ブラウザ起動
driver = Selenium::WebDriver.for :firefox
# URLにアクセス
driver.navigate.to "http://yahoo.co.jp"

# name属性に'p'がある要素を取得(今回は検索フォーム)
search = driver.find_element(:name, 'p')
# 検索フォームに'Selenium'を入力
search.send_key 'Selenium'
# id属性の'srchbtn'を取得してクリックする
driver.find_element(:id, 'srchbtn').click

# スクリーンショットを撮る
driver.save_screenshot('search.png')

# ブラウザを閉じる
driver.quit

検索してスクリーンショットを撮るぐらいな動作だとこんな感じになります。
他にもスクレイピングをしたりなど様々なことができるので、用途に合わせてコードを書けば良いです。

テストにおける注意点

Seleniumは非常に便利ですが、非同期処理を行う際には注意が必要です。
なぜなら、非同期処理の終了を待たずに次々処理をしてしまう可能性があるからです。

簡単に対処するなら、sleepを使うのが楽です。
sleep 10
この1行を足すだけで10秒間処理を遅らせることができます。

正しく書いているのに、動きがおかしくなったりとバグが起きたらこのことを1つ意識してみると良いかもしれません。