ブラウザテストツールの代表格と言えば「Selenium」ですが、実は、6年前にも一度調査したことがあったのです。しかしながらその当時は結局、業務で採用されることはありませんでした。
現在の「Selenium2」は、「WebDriver」というツールが統合されるなど、当時の「Selenium1」から大きく進化をしているわけですが、それでもツールの利用方法などは6年前からあまり変わっていないようです。
Selenium導入にあたって最初につまずくのは、やり方が何通りかあって「結局どれがいいの?」と迷ってしまうことかな?と思います。使い方としては大きく3通りあると思うのですが、それを簡単にまとめたのが↓の表です。(「○○向け」というのは個人的な印象です。)
概要 | テストの書き方 | 実行ブラウザ | Selenium IDE | Selenium-RC | Selenium WebDriver | |
初心者向け | GUIのみでテスト可能 | GUI(xmlでも可) | FireFox | ○ | - | - |
中級者向け | jar形式の Selenium Server を起動させる必要あり(Javaが必要) | Python, Java など | しょぼいブラウザ(コンソール付きのデバッガ) | △ | ○ | - |
上級者向け | 各言語に対応する Selenium Client から WebDriver を起動 | Python, Java など | WebDriver(FireFoxなどの各種ブラウザに対応したエミュレータ) | △ | - | ○ |
実際には、「Selenium IDE」だけであったり「Selenium-RC」をメインで業務で使うというのはあまり無いでしょうから、「Selenium Client から WebDriver を起動」するパターンがほとんどじゃないかなと思います。
ということで今回は、「Python で Selenium WebDriver を使ったブラウザテストをする方法」についてまとめておきます。
1. 事前準備
1) Python for Windows をインストール
https://www.python.org/downloads/ で、「Download the latest version for Windows」の「Download Python 2.7.6」をクリックします。
ダウンロードした「python-2.7.6.msi」をダブルクリックしてインストーラを実行。
デフォルトだと「C:\Python27」にインストールされるはず。
Windowsスタートメニューから、 [コンピューター] -> [プロパティ] -> [システムの詳細設定] -> [環境変数] で、システム環境変数の「Path」の末尾に「;C:\Python27」を追加します。
> python --version Python 2.7.6
2. Selenium IDE の設定
1)
http://docs.seleniumhq.org/download/
から、
Selenium IDE の「latest released version 2.5.0」をダウンロードします。
2)
ダウンロードした「selenium-ide-2.5.0.xpi」を、Firefoxのアドオンマネージャ画面にドラッグ&ドロップします。
3)
FireFox のメニュー [ツール] -> [Selenium IDE] から、Selenium IDEを立ち上げます。
テストを記録したら、[ファイル] -> [テストケースをエクスポート] -> [Python 2 / unittest / WebDriver] で、Python形式でテストケースをエクスポートできます。
参考
3. Selenium Client & WebDriver の設定
1)
http://docs.seleniumhq.org/download/ から、「Selenium Client & WebDriver Language Bindings」の「Python 2.41.0」をダウンロードします。
2)
ダウンロードした「selenium-2.41.0.tar.gz」を解凍し、その中から、「selenium-2.41.0\py\selenium」の「selenium」フォルダごと、「C:\Python27\Lib」の直下にコピペします。
4. テストの実行
Selenium IDE からエクスポートしたファイルを加工して、pythonテストケースとして実行します。
> python test_webdriver.py . ---------------------------------------------------------------------- Ran 1 test in 14.059s OK
test_webdriver.py
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import Select from selenium.common.exceptions import NoSuchElementException import unittest, time, re class TestWebdriver(unittest.TestCase): def setUp(self): self.driver = webdriver.Firefox() self.driver.implicitly_wait(30) self.base_url = "http://docs.seleniumhq.org/" self.verificationErrors = [] self.accept_next_alert = True def test_webdriver(self): driver = self.driver driver.get(self.base_url + "/") driver.find_element_by_link_text("Documentation").click() driver.find_element_by_link_text("Selenium WebDriver").click() driver.find_element_by_xpath("//input[@value='python']").click() driver.save_screenshot("screenshot.png") def is_element_present(self, how, what): try: self.driver.find_element(by=how, value=what) except NoSuchElementException, e: return False return True def is_alert_present(self): try: self.driver.switch_to_alert() except NoAlertPresentException, e: return False return True def close_alert_and_get_its_text(self): try: alert = self.driver.switch_to_alert() alert_text = alert.text if self.accept_next_alert: alert.accept() else: alert.dismiss() return alert_text finally: self.accept_next_alert = True def tearDown(self): self.driver.quit() self.assertEqual([], self.verificationErrors) if __name__ == "__main__": unittest.main()
(おまけ)よく使いそうな WebDriver のメソッド
driver.get()
新しいブラウザを開いて、指定したURLにアクセスする。
driver.close()
ブラウザを閉じる。
driver.switch_to_alert()
確認ダイアログの操作をする。
# 確認ダイアログのOKボタンをクリックするサンプル
alert = driver.switch_to_alert()
alert.accept()
driver.implicitly_wait()
要素が見つかるまで最大何秒待つかを定義する。
driver.set_page_load_timeout()
ページがロードし終わるまでのタイムアウト秒を定義する。
driver.maximize_window()
ブラウザのサイズを最大化する。
driver.save_screenshot()
スクリーンショットを撮る。
参考
- 温帯気候: Selenium 2 WebDriver に関するメモ(WebDriver等のメソッドに関する詳細)
- Seleniumの自動テストをCI環境(Jenkins)で快適に実施する - 日々是鍛錬
2014/10/10追記
- 作者: Satya Avasarala,Sky株式会社玉川竜司
- 出版社/メーカー: オライリージャパン
- 発売日: 2014/09/18
- メディア: 大型本
- この商品を含むブログ (1件) を見る
Selenium WebDriver の O'REILLY本が出ていたんですね。
当時はこんな本無かったなぁ。