Selenium WebDriverの基礎的な使い方
少し前からSeleniumをしばしば触っているのですが、最近社内で初めて使う人向けにQiita:Teamで記事を書いたので、それの転用でブログ記事を書いてしまおうという魂胆になります。
リファレンス
- SeleniumのAPIリファレンス(Ruby)
- Selenium webdriverについてのページ
- 英語ですが、Rubyでの書き方については、Selenium Design Patterns and Best Practicesも参考に出来ます
Selenium Design Patterns and Best Practices
- 作者: Dima Kovalenko
- 出版社/メーカー: Packt Publishing
- 発売日: 2014/09/23
- メディア: Kindle版
- この商品を含むブログを見る
仕組みのイメージ
あくまでもイメージで、正確ではないかもしれませんが、Browserを動かすものとしてDriverがあって、DriverをProgramで動かすことで、Browser操作が自動化できる、みたいに考えています。
program -> selenium-webdriver -> browser
(私は最初の頃、Driverって言われてもピンと来なかったので、Browserを動かす何かのことをDriverと言うことが分かれば捗る人が少しはいらっしゃるのではないかと思ってます)
HelloWorld的なもの
まず、webdriverを生み出します 参考ドキュメント
driver = Selenium::WebDriver.for :firefox
driverを使ってブラウザを操作をします 参考ドキュメント
# 特定のURLにアクセス driver.navigate.to 'http://genius.hateblo.jp/' ## driver.navigateでNavigationクラスが取得されます。 ## Navigationクラスはブラウザ操作と似た感じのことが出来るみたいで、 ## 特定のURLに遷移したり、ブラウザバックしたり、というような操作ができます # titleを取得する driver.title # ページのソースを取得する driver.page_source # ブラウザを閉じる driver.quit
もっと色々な操作を行う
これも正確性には欠けるかもしれませんが、ページ内のボタンを押したり、プルダウンを選んだり、というような操作は、以下のようなイメージだと考えています。
driver.find_element -> Element#action
Driverがいるページから、ボタンだったりプルダウンだったり(=Element)を見つけます。そのためのメソッドがfind_element
です。find_element
で見つかったElementに対して、clickなどのElementが持つメソッドを実行して、具体的な操作を行います。
find_element
はSearchContextというモジュールで実装されていますので詳しくはこちらを参照してくださいfind_element
で見つかったElementで実施出来る操作はElementのドキュメント を参照してください
ちなみに、Element自身もfind_element
を継承していますので、一回のfind_element
で特定しきれない要素などを複数回find_element
を実行することで特定する、というようなこともできます
実装例
# ボタンをクリック driver.find_element(:id,'hogehoge').click # テキストボックスに入力 driver.find_element(:id,'hogehoge').send_keys 'HELLO WORLD' # テキストボックスを空にする driver.find_element(:id,'hogehoge').clear # ラジオボタンを選択する、チェックボックスをクリックする(elementが特定されている場合) driver.find_element(:id,'hogehoge').click # ラジオボタンを選択する、チェックボックスをクリックする(値などでクリックするものを選びたい場合) driver.find_elements(:name,'hogehoge').each do |element| element.click if element.attribute('value') == 'fugafuga' end ## radioやcheckboxの要素がidなどで特定される場合には、 ## そのidでfind_elementしてクリックすれば良いだけです。 ## そうではなくて、「値で判断してクリックするものを選びたい」場合などは、 ## find_elementsメソッドを使い、いったんradioやcheckboxを構成するelementを一通り取得してしまい、 ## それらのループの中で期待する値と同じだった場合にクリックする、というようなことをしています。 # セレクトボックスから選択する Selenium::WebDriver::Support::Select.new(driver.find_element(:id,'hogehoge')).select_by(:value,'list value1') ## リストの選択は、Selectクラスにelementを渡してnewした後、Selectクラスのメソッドを使って選択などの処理を実施します
補足
重複している内容もありますが、過去にもSeleniumについての内容を書いていますので、そちらのリンクも貼っておきます
genius.hateblo.jp genius.hateblo.jp
システムテスト自動化 標準ガイド CodeZine BOOKS
- 作者: Mark Fewster,Dorothy Graham
- 出版社/メーカー: 翔泳社
- 発売日: 2014/12/17
- メディア: Kindle版
- この商品を含むブログ (2件) を見る