Help us understand the problem. What is going on with this article?

Selenium WebDriver入門

More than 5 years have passed since last update.

はじめに

Seleniumの一部の知識まとめからjenkinsで実行させるところまで記載します。
rubyを使用したいと思います。

Seleniumとは

Webブラウザを使いWebアプリケーションをテストするツール。
人の手を使ってテストしていた部分をSeleniumがブラウザ操作してくれる。

Selenium WebDriverとは

Selenium RCとWebDriverを統合したもの。

Selenium RCとは

HTML形式で記述されていたスクリプト1にJava,Rubyなどプログラミング言語を追加し高度なスクリプト生成を可能にした。
Selenium RCでは、ローカルPC上で中継サーバー(Selenium Server)を起動し、この中継サーバ上でrubyなどのスクリプトが動作しJavaScriptのコードをWebページに埋め込んでいた。
これによりWebサーバー上にスクリプトを置かなくても済むようになった。1
だがJavaScriptで操作する際に、ブラウザのセキュリティ制限によって多くの動作に制約を受けていた。

WebDriverとは

WebDriverでは、テスト実行時にブラウザ操作をブラウザ拡張機能や、OSのネイティブ機能を使って行うようにした。そのため中継サーバが不要になりセキュリティの制約を受ける問題も解決した。

この2つを統合したものが、Selenium WebDriverです。
Selenium2とも呼ばれているようです。

実践

Selenium WebDriverには、各ブラウザ毎にドライバが用意されているようです。

ドライバの準備

今回はChromeを使用します。
Chromeの場合は、Chrome Driverをインストールする必要があるので、こちらからダウンロードします。

※自分はhomebrewを使っているのでbrew install chromedriverでインストールしました。

これだけだとSeleniumが定義しているRESTful API(JSON Wire Protocol)に従いHTTPリクエストを発行し、返って来たレスポンスを解釈して用途に合わせてまたHTTPリクエストを発行...と結構大変そうです。

公式からクライアントのライブラリ2が出ているらしく、それを使うと良いようです。下記が提供されている言語らしいです。

  • Java
  • Ruby
  • Python
  • C#
  • JavaScript(Node.js)

クライアントライブラリの準備

rubyでやるのでその環境を用意します。(Node.jsにしようかな...
gem install selenium-webdriver

コードを書いてみる

手順
  1. vi test.rb 打つ
  2. 下記を書く
require "selenium-webdriver"

# Chrome用のドライバを指定
driver = Selenium::WebDriver.for :chrome

# Googleの画像検索にアクセス
driver.navigate.to "https://www.google.co.jp/imghp"

# name属性にqが設定されている要素を取得
inputElement = driver.find_element(:name, 'q')

# 取得した要素にパンケーキを設定
inputElement.send_keys "パンケーキ"

# name属性にbtnGが設定されている要素を取得
submitElement = driver.find_element(:name, 'btnG')

# 取得した要素をクリック
submitElement.click

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

# テストを終了
driver.quit

3.ruby test.rb 打つ

と以下画像が実行プログラムのカレントディレクトリに出来ていると思います。
tabetai.png

環境の作成、実行が複雑じゃないので良いですね、、

jenkinsで実行させるところまで書きたかったんですが、次の更新で書きますm(_ _)m


  1. Selenium Coreを調べてください。Seleniumの原型です 

  2. 各クライアントライブラリは対応していないドライバがある可能性もあり、その場合はSelenium Serverを使うらしいです。これはJavaで書かれているらしい。 

yulily@github
まだまだ初心者で日々勉強です。間違った内容や別の方法などありましたら教えていただけると嬉しいですm( _ _ )m
http://yulily.github.io/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away