この記事は「Robot Framework Advent Calendar 2017 - Qiita」の2日目の記事です。
今回は、Robot FrameworkでSeleniumを扱うライブラリ SeleniumLibrary
の3.0のリリースについてです。
2017/12/10追記
SeleniumLibrary 3.0.0にはバグがあったようで、現在は 3.0.1
がリリースされています。
https://groups.google.com/forum/#!topic/robotframework-users/qsZjh__Tq4k
2017/12/10追記 ここまで
目次
今までのSelenium2Library 1.8.0について
Robot FrameworkからSeleniumを使う時、今までは Selenium2Library
のリリース版である 1.8.0
を使ってきました。
そのため、テストコードで
*** Settings *** Library Selenium2Library
と、Selenium2Libraryを参照していました。
ただ、Selenium2Library 1.8.0 はPython2では動作するものの、Python3系に対応していません。そのため、Python3の環境にインストールしようとするとエラーになっていました。
# バージョン確認 (env_sl2_18) $ python --version Python 3.6.3 # pipでインストール (env_sl2_18) $ pip install robotframework-selenium2library Collecting robotframework-selenium2library Using cached robotframework-selenium2library-1.8.0.tar.gz Complete output from command python setup.py egg_info: Traceback (most recent call last): File "<string>", line 1, in <module> File "/private/var/folders/h0/l5plp4zd3517r988jpm481g00000gn/T/pip-build-tstkfayi/robotframework-selenium2library/setup.py", line 7, in <module> from ez_setup import use_setuptools File "/private/var/folders/h0/l5plp4zd3517r988jpm481g00000gn/T/pip-build-tstkfayi/robotframework-selenium2library/src/ez_setup.py", line 106 except pkg_resources.VersionConflict, e: ^ SyntaxError: invalid syntax ---------------------------------------- Command "python setup.py egg_info" failed with error code 1 in /private/var/folders/h0/l5plp4zd3517r988jpm481g00000gn/T/pip-build-tstkfayi/robotframework-selenium2library/
SeleniumLibrary 3.0 について
とはいえ、Python3系に対応するSeleniumLibraryの開発も行われていました。そして、2017/12/1に3.0.0がリリースされました。
@robotframework SeleniumLibrary 3.0 (final) is out: https://t.co/zloPQYhQvS #test #selenium
— Tatu Aalto (@AaltoTatu) 2017年12月1日
3.0.0のリリースでの変更点は以下の通りです。
- Python3系に対応
- ライブラリ名が、
Selenium2Library
からSeleniumLibrary
へと変更 - GitHubリポジトリも変更
- SeleniumLibrary: https://github.com/robotframework/SeleniumLibrary
- Selenium2Library: https://github.com/robotframework/Selenium2Library
- 内部構造はいろいろと変わってるらしい
なお、SeleniumLibrary
は昔も存在していたようですが、そのあたりの話は以下にまとまっています。
https://github.com/robotframework/SeleniumLibrary#history
過去のテストコードの扱いについて
気になるのが、過去のテストコードの扱いです。
そこで、SeleniumLibraryとSelenium2Libraryを参照しているテストコードをそれぞれ用意して試してみます。
selenium_library.robot
こちらはSeleniumLibraryを参照しています。
*** Settings *** Library SeleniumLibrary *** Test Cases *** ChromeでGoogleを開く Open Browser https://google.co.jp Chrome
selenium2_library.robot
こちらはSelenium2Libraryを参照しています。
*** Settings *** Library Selenium2Library *** Test Cases *** ChromeでGoogleを開く Open Browser https://google.co.jp Chrome
SeleniumLibrary 3.0での実行結果
SeleniumLibrary 3.0.0で両方のテストコードを流してみます。
(env_sl) $ python --version Python 3.6.3 # SeleniumLibrary 3.0.0のインストール (env_sl) $ pip install robotframework-seleniumlibrary Collecting robotframework-seleniumlibrary Using cached robotframework_seleniumlibrary-3.0.0-py2.py3-none-any.whl Collecting selenium>=2.53.6 (from robotframework-seleniumlibrary) Using cached selenium-3.8.0-py2.py3-none-any.whl Collecting robotframework>=2.8.7 (from robotframework-seleniumlibrary) Using cached robotframework-3.0.2.tar.gz Installing collected packages: selenium, robotframework, robotframework-seleniumlibrary Running setup.py install for robotframework ... done Successfully installed robotframework-3.0.2 robotframework-seleniumlibrary-3.0.0 selenium-3.8.0 # selenium_library.robot を実行 => 成功 (env_sl) $ robot selenium_library.robot ================ Selenium Library ================ ChromeでGoogleを開く | PASS | ---------------------- Selenium Library | PASS | 1 critical test, 1 passed, 0 failed 1 test total, 1 passed, 0 failed ================ # selenium_library.robot を実行 => エラー $ robot selenium2_library.robot [ ERROR ] Error in file '/path/to/selenium2_library.robot': Importing test library 'Selenium2Library' failed: ModuleNotFoundError: No module named 'Selenium2Library' Traceback (most recent call last): None PYTHONPATH: ... ================ Selenium2 Library ================ ChromeでGoogleを開く | FAIL | No keyword with name 'Open Browser' found. ---------------------- Selenium2 Library | FAIL | 1 critical test, 0 passed, 1 failed 1 test total, 0 passed, 1 failed ================
Selenium2Libraryを参照している方がエラーとなり、過去のテストが通らなくなりました。
Selenium2Library 3.0 での実行結果
Selenium2Library時代のテストコードを直さないといけないのかと思いましたが、READMEを読むと、
Those migrating from Selenium2Library can install SeleniumLibrary so that it is exposed also as Selenium2Library:
pip install --pre --upgrade robotframework-selenium2library
The above command installs the normal SeleniumLibrary as well as a new Selenium2Library version that is just a thin wrapper to SeleniumLibrary. That allows importing Selenium2Library in tests while migrating to SeleniumLibrary.
とありました。
そこで、Selenium2Library 3.0をインストールし、試してみます。
# SeleniumLibraryの仮想環境を抜ける (env_sl) $ deactivate # 仮想環境を作って有効化 $ python -m venv env_sl2_30 $ source env_sl2_30/bin/activate (env_sl2_30) $ python --version Python 3.6.3 # インストールする (env_sl2_30) $ pip install --upgrade --pre robotframework-selenium2library Collecting robotframework-selenium2library Downloading robotframework-selenium2library-3.0.0b1.tar.gz (68kB) 100% |████████████████████████████████| 71kB 456kB/s Collecting selenium>=2.53.6 (from robotframework-selenium2library) Using cached selenium-3.8.0-py2.py3-none-any.whl Collecting robotframework>=2.8.7 (from robotframework-selenium2library) Using cached robotframework-3.0.2.tar.gz Collecting robotframework-seleniumlibrary>=3.0.0a1 (from robotframework-selenium2library) Using cached robotframework_seleniumlibrary-3.0.0-py2.py3-none-any.whl Installing collected packages: selenium, robotframework, robotframework-seleniumlibrary, robotframework-selenium2library Running setup.py install for robotframework ... done Running setup.py install for robotframework-selenium2library ... done Successfully installed robotframework-3.0.2 robotframework-selenium2library-3.0.0b1 robotframework-seleniumlibrary-3.0.0 selenium-3.8.0 # SeleniumLibraryを参照しているテストコードを実行するとパスする (env_sl2_30) $ robot selenium_library.robot ================ Selenium Library ================ ChromeでGoogleを開く | PASS | ---------------------- Selenium Library | PASS | 1 critical test, 1 passed, 0 failed 1 test total, 1 passed, 0 failed ================ # Selenium2Libraryを参照しているテストコードを実行してもパスする (env_sl2_30) $ robot selenium2_library.robot ================ Selenium2 Library ================ ChromeでGoogleを開く | PASS | ---------------------- Selenium2 Library | PASS | 1 critical test, 1 passed, 0 failed 1 test total, 1 passed, 0 failed ================
両方のテストがパスしました。
内容をみると、pip installにて
Successfully installed robotframework-3.0.2 robotframework-selenium2library-3.0.0b1 robotframework-seleniumlibrary-3.0.0 selenium-3.8.0
のように、SeleniumLibraryとSelenium2Libraryの両方がインストールされているようです。
これにより、Selenium2Libraryを参照している過去のテストコードがあったとしても、Python3系のSeleniumLibraryでテストできます。
とはいえ、Selenium2LibraryはSeleniumLibraryのラッパーであり、バージョンをよく見ると robotframework-selenium2library-3.0.0b1
とベータ版のようです。
そのため、新しいテストコードではSeleniumLibraryを参照するほうが良いでしょう。