この記事は「Robot Framework Advent Calendar 2017 - Qiita」の3日目の記事です。
Robot Frameworkはドキュメントが充実しているため、きちんと読めばゼロから始められます。
ただ、ドキュメント量が多いため、最初のテストコードを書くまでに時間がかかるかもしれません。
そのため、今回はドキュメントへの参照リンクを付けながら、Mac/Windowsでゼロから始めるRobot Framework + SeleniumLibraryのテストコードを書いていきます。
目次
環境構築
Robot Framework + Selenium Library を使うためには、以下が必要です。
- Python 3.x
- Robot Framework
- Selenium Library
- Seleniumを動かすためのブラウザ
- 今回はChrome
- Selenium WebDriver
- 今回はChromeなので、ChromeDriver
順番に準備します。
Python3のインストール
Robot Frameworkを動かすためには、Pythonが必要です。
今のところRobot FrameworkはPython2/3のどちらでも動きますが、今回はPython3を使います。
MacやWindowsへPythonをインストールする方法は、Python Boot Campのドキュメントに書かれていますので、そちらを参照してインストールしてください。
1. Pythonをはじめる前に — Python Boot Camp Text 2016.04.28 ドキュメント
今回使用するディレクトリの準備
任意の場所にディレクトリを用意しておきます。
今回は hello_robot
ディレクトリの中で作業します。
# ディレクトリの作成 mkdir hello_robot # 移動 cd hello_robot
Pythonのvenv環境の構築
先ほどインストールしたPython環境にRobot Frameworkを入れてもよいです。
ただ、他でもPython環境を使う可能性があるため、今回はvenvを使ってPythonの仮想環境にRobot Frameworkを入れることにします。
Python Boot Campのテキストを参考に、venv環境を作り、有効化(activate)しておきます。
6.2. venvとは - 6. サードパーティ製パッケージと venv — Python Boot Camp Text 2016.04.28 ドキュメント
# venv環境を、rfenvという名前で作成 python -m venv rfenv # 有効化 ## Mac $ source rfenv/bin/activate ## Windows >rfenv\Scripts\activate.bat # 有効化されている (rfenv) $ (rfenv) >
Robot FrameworkとSeleniumLibraryをインストール
本体をインストールします。
(rfenv) pip install robotframework-seleniumlibrary Collecting robotframework-seleniumlibrary Using cached robotframework_seleniumlibrary-3.0.0-py2.py3-none-any.whl Collecting robotframework>=2.8.7 (from robotframework-seleniumlibrary) Using cached robotframework-3.0.2.tar.gz Collecting selenium>=2.53.6 (from robotframework-seleniumlibrary) Using cached selenium-3.8.0-py2.py3-none-any.whl Installing collected packages: robotframework, selenium, robotframework-seleniumlibrary Running setup.py install for robotframework ... done Successfully installed robotframework-3.0.2 robotframework-seleniumlibrary-3.0.0 selenium-3.8.0
ChromeDriverのインストール
今回はブラウザとしてChromeを使います。
ChromeをSeleniumから操作するために、ChromeDriverをインストールします。現時点の最新版は、2.33です。
Macの場合はHomebrewでインストールします。
$ brew install chromedriver
Windowsの場合は、ChromeDriverをダウンロードします。
Downloads - ChromeDriver - WebDriver for Chrome
今回は簡単に使うだけなので、hello_robot
ディレクトリに、解凍したchromedriver.exe
を入れておきます。
以上で環境構築は完了です。
テストコードの作成
今回は以下のPython + Seleniumのテストコードの内容をRobot Frameworkで書いていきます。
from selenium.webdriver import Chrome from selenium.webdriver.common.keys import Keys import unittest class TestGoogle(unittest.TestCase): def test_GoogleでSeleniumLibraryを検索する(self): browser = Chrome() browser.get('https://google.co.jp') query_input = browser.find_element_by_name('q') query_input.send_keys('SeleniumLibrary' + Keys.ENTER) # 結果出力と検証 links = browser.find_elements_by_css_selector('h3 > a') for link in links: print(link.text) self.assertEqual(len(links), 10) browser.quit()
テストコードのファイル形式の選択と作成
Robot Frameworkのテストコードのファイル形式については、公式ドキュメントの以下のページに記載があります。
- http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#supported-file-formats
- http://robotframework-ja.readthedocs.io/ja/latest/userguide/CreatingTestData/TestDataSyntax.html#supported-file-formats
以下のファイル形式が使えます。
- HTML
- TSV
- プレーンテキスト (.robot, .txt)
- reST
今回はWeb上でよく見かける、プレーンテキスト(拡張子は .robot
)を使います。
なお、プレーンテキストの場合、
- スペース区切り方式
- スペース・パイプ区切り方式
のどちらかを選べますが、今回は前者のスペース区切り方式を選択します。
また、Robot Frameworkでは、テストデータテーブルという概念でテストコードを書きます。
- http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#test-data-tables
- http://robotframework-ja.readthedocs.io/ja/latest/userguide/CreatingTestData/TestDataSyntax.html#test-data-tables
テストデータテーブルは、以下の4つの区分で構成されます。
- Settings
- Variables
- Test Cases
- Keywords
それぞれの使い方については、後述します。
以上より、今回はテストコードをtest_selenium.robot
として作成し、hello_robot
ディレクトリの中に保存します。
ここまでのディレクトリ構成は以下の通りです。
hello_robot/ ├── test_selenium.robot ├── chromedriver.exe (Windowsの場合のみ) └── rfenv/
参照するライブラリの指定
Pythonのコードでは import
でライブラリ(モジュール)を指定しています。
Robot Frameworkでも参照するライブラリを指定します。
- http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#using-library-setting
- http://robotframework-ja.readthedocs.io/ja/latest/userguide/CreatingTestData/UsingTestLibraries.html#library
今回はSettingsにて Library
設定を記述します。
*** Settings *** Library SeleniumLibrary
テストコードの実装
基本的な構文は以下に記載があります。
- http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#basic-syntax
- http://robotframework-ja.readthedocs.io/ja/latest/userguide/CreatingTestData/CreatingTestCases.html#id2
TestCaseとテストケースの記述
まずは、 TestCases
とテストケース名を記述します。テストケース名には日本語を使用できます。
*** TestCases *** GoogleでSeleniumLibraryを検索するテスト
テストケースの詳細を実装
続いてSeleniumを操作するキーワードを記述します。
SeleniumLibraryで使えるキーワードは公式ドキュメントを参照します。
- http://robotframework.org/SeleniumLibrary/SeleniumLibrary.html
- http://selenium2library-ja.readthedocs.io/ja/latest/reference.html
まずは
# Chromeを起動する browser = webdriver.Chrome() # Googleへ遷移する browser.get('https://google.co.jp') # 検索枠に入力してEnterキーを押す query_input = browser.find_element_by_name('q') query_input.send_keys('SeleniumLibrary' + Keys.ENTER)
をRobot Frameworkで記述します。
Open Browser https://google.co.jp Chrome Input Text name=q SeleniumLibrary Press Key name=q \\13
ちなみに、\\13
については、SeleniumLibraryでEnterキーを押すためのコードです。
http://robotframework.org/SeleniumLibrary/SeleniumLibrary.html#Press%20Key
なお、Pythonと異なり、今のところ「SeleniumLibrary + Enterキー」を同時に入力する方法は実装されていません。
https://github.com/robotframework/SeleniumLibrary/issues/498
次に、メソッドを実行して変数として受け取る部分です。
links = browser.find_elements_by_css_selector('h3 > a')
Robot Frameworkの変数は以下に記載があります。
- http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#variables
- http://robotframework-ja.readthedocs.io/ja/latest/userguide/CreatingTestData/Variables.html
今回は、 ${}
を使います。
${links} = Get Webelements css=h3 > a
続いて、forループと検証です。
for link in links: print(link.text) self.assertEqual(len(links), 10)
Robot Frameworkでforループを使う場合は、以下に記述があります。
- http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#for-loops
- http://robotframework-ja.readthedocs.io/ja/latest/userguide/CreatingTestData/AdvancedFeatures.html#for-loops
これによると、
:For ${} in @{}
構文を使う- 変数
${}
をリスト(配列)として扱えるよう、@{}
という表記にする - forループのブロックは改行・インデントし、
\
で継続行であることを示す
のようです。
つまり、
:For ${link} In @{links} \ ${text} = Get Text ${link}
となります。
次に、
- コンソールに結果を出力 (print)
- リンク数を検証 (self.assertEqual)
をRobot Frameworkで実装します。
これらはRobot Frameworkの組込みライブラリであるBuiltinライブラリにあるため、そちらのドキュメントを参照します。
- http://robotframework.org/robotframework/latest/libraries/BuiltIn.html
- http://robotframework-ja.readthedocs.io/ja/latest/lib/BuiltIn.html
それらは
\ Log To Console ${text} Length Should Be ${links} 10
となります。
最後にブラウザを閉じる(browser.quit())です。
Close Browser
これで全体ができました。test_selenium.robot
全体のソースコードは以下の通りです。
*** Settings *** Library SeleniumLibrary *** TestCases *** GoogleでSeleniumLibraryを検索するテスト Open Browser https://google.co.jp Chrome Input Text name=q SeleniumLibrary Press Key name=q \\13 # 結果出力と検証 ${links} = Get Webelements css=h3 > a :For ${link} In @{links} \ ${text} = Get Text ${link} \ Log To Console ${text} Length Should Be ${links} 10 Close Browser
テストの実行
Python + Seleniumの場合、以下のように実行します。
(rfenv) $ python -m unittest test_selenium.py GitHub - robotframework/SeleniumLibrary: Web testing library for ... SeleniumLibrary - Robot Framework robotframework-seleniumlibrary 3.0.0rc2 : Python Package Index - PyPI Python3で動く、Robot Framework の SeleniumLibrary 3.0 のリリース ... RobotFrameworkのSelenium2Libraryの名前が、SeleniumLibraryへと ... robotframework-seleniumlibrary - Demo.wiki - Google Code Archive ... Maven Repository: org.jboss.test.richfaces-selenium.library Selenium with Python — Selenium Python Bindings 2 documentation Selenium IDE: RobotFramework Formatter :: レビュー :: Firefox 向け ... Selenium - Web Browser Automation . ---------------------------------------------------------------------- Ran 1 test in 8.426s OK
Robot Frameworkの場合、 robot
コマンドで実行します。
- http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#synopsis
- http://robotframework-ja.readthedocs.io/ja/latest/userguide/ExecutingTestCases/BasicUsage.html#synopsis
(rfenv) $ robot test_selenium.robot ================== Hello Selenium ================== GoogleでSeleniumLibraryを検索するテスト .... GitHub - robotframework/SeleniumLibrary: Web testing library for ... SeleniumLibrary - Robot Framework Python3で動く、Robot Framework の SeleniumLibrary 3.0 のリリース ... RobotFrameworkのSelenium2Libraryの名前が、SeleniumLibraryへと ... robotframework-seleniumlibrary 3.0.0rc2 : Python Package Index - PyPI robotframework-seleniumlibrary 2.8.1 : Python Package Index robotframework-seleniumlibrary 3.0.0a1 : Python Package Index robotframework-seleniumlibrary - Demo.wiki - Google Code Archive ... Maven Repository: org.jboss.test.richfaces-selenium.library Selenium with Python — Selenium Python Bindings 2 documentation GoogleでSeleniumLibraryを検索するテスト | PASS | ------------------------- Hello Selenium | PASS | 1 critical test, 1 passed, 0 failed 1 test total, 1 passed, 0 failed ================== Output: /path/to/hello_robot/output.xml Log: /path/to/hello_robot/log.html Report: /path/to/hello_robot/report.html
実行後、ログファイルが出力されましたので、それぞれ確認してみます。
log.html
report.html
テストコードを修正する
上記のテストコードでは、テストデータテーブルの
- Variables
- Keywords
を使っていなかったため、それを使うように修正してみます。
Variablesを使う
Variablesは、変数を事前に定義する時に使います。
- http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#variable-table
- http://robotframework-ja.readthedocs.io/ja/latest/userguide/CreatingTestData/Variables.html#id16
こんな感じで定義します。
*** Variables *** ${検索キーワード} SeleniumLibrary
定義した変数 ${検索キーワード}
を使うように修正します。
# Input Text name=q SeleniumLibrary Input Text name=q ${検索キーワード}
Keywordsを使う
Keywordsは、自作のキーワード(ユーザーキーワード)を作成する時に使います。
- http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#creating-user-keywords
- http://robotframework-ja.readthedocs.io/ja/latest/userguide/CreatingTestData/CreatingUserKeywords.html
こんな感じで定義します。
*** Keywords *** Chromeを起動する Open Browser https://google.co.jp Chrome
定義したキーワードを使うように変更します。
# Open Browser https://google.co.jp Chrome Chromeを起動する
テストの全体は以下となりました。
*** Settings *** Library SeleniumLibrary *** Variables *** ${検索キーワード} SeleniumLibrary *** Keywords *** Chromeを起動する Open Browser https://google.co.jp Chrome *** TestCases *** GoogleでSeleniumLibraryを検索するテスト Open Browser https://google.co.jp Chrome Input Text name=q SeleniumLibrary Press Key name=q \\13 # 結果出力と検証 ${links} = Get Webelements css=h3 > a :For ${link} In @{links} \ ${text} = Get Text ${link} \ Log To Console ${text} Length Should Be ${links} 10 Close Browser GoogleでSeleniumLibraryを検索するテスト2 Chromeを起動する Input Text name=q ${検索キーワード} Press Key name=q \\13 # 結果出力と検証 ${links} = Get Webelements css=h3 > a :For ${link} In @{links} \ ${text} = Get Text ${link} \ Log To Console ${text} Length Should Be ${links} 10 Close Browser
以上が、ひと通りの流れとなります。
その他資料
BuitInライブラリやSeleniumLibraryのその他の書き方については、以下にも書きました。
- 受け入れテストのフレームワークRobot Frameworkで、組込機能であるBuiltin Libraryを使ってみた - メモ的な思考的な
- Robot Framework + Selenium2Libraryで、静的HTMLをテストする - メモ的な思考的な
- Robot Framework + Selenium2Libraryで、HTMLフォームまわりをテストする - メモ的な思考的な
- Robot Framework + Selenium2Libraryで、HTML + JavaScriptまわりをテストする - メモ的な思考的な
ソースコード
GitHubに上げました。 selenium_getting_started
ディレクトリの中が、今回のファイルです。
https://github.com/thinkAmi-sandbox/RobotFramework-sample