Selenium2Libraryでは、 Go To キーワードを使って引数のURLに移動します。
Go To | Selenium2Library
今までのサンプルでは、localhostへの移動はURIスキームを省略した localhost:8084 みたいな値を引数として渡していました。
しかし、通常のChromeとHeadlessなChromeでは挙動が異なったため、Go Toを使う時はURIスキームを付けておくべきと感じました。
その例をメモしておきます。
2017/9/2追記
Selenium2Libraryですが、バージョン3からは SeleniumLibrary へと名称が変更されています。詳しくはこちらに書きました。
RobotFrameworkのSelenium2Libraryの名前が、SeleniumLibraryへと変更されてた - メモ的な思考的な
なお、本文はSelenium2Libraryのままにしてあります。
2017/9/2追記ここまで
目次
環境
- Mac OS X 10.11.6
- Python 3.6.2
- Google Chrome 60.0.3112.78 (stable)
- ChromeDriver 2.31 (stable)
- RobotFramework 3.0.2
- Selenium2Library 1.8.1dev1
- Selenium 3.4.3
- Bottle 0.12.13
- Webアプリ用
キーワードの用意
今回、通常のChromeとHeadlessなChromeでの挙動を比較するため、以下のキーワードを用意します。
*** Keywords ***
URIスキーム無しでlocalhostへアクセスする
go to localhost:8084/
location should be http://localhost:8084/
URIスキームありでlocalhostへアクセスする
go to http://localhost:8084/
location should be http://localhost:8084/
URIスキーム無しでGoogleへアクセスする
go to www.google.co.jp/
location should be https://wwww.google.co.jp/
URIスキームありでGoogleへアクセスする
go to https://www.google.co.jp/
location should be https://www.google.co.jp/
キーワード「${キーワード}」が失敗することを確認する
${エラー有無} ${エラーメッセージ} = run keyword and ignore error ${キーワード}
should be equal ${エラー有無} FAIL
log to console エラーメッセージ:\n${エラーメッセージ}\n_______________
通常のChromeの場合
通常のChromeの場合、localhostへはURIスキームの有無に関係なくアクセスできます。一方、Googleへはアクセスできません。
ノーマルなChromeでURIスキームを扱う
create webdriver Chrome
log to console ${SPACE}
URIスキーム無しでlocalhostへアクセスする
URIスキームありでlocalhostへアクセスする
キーワード「URIスキーム無しでGoogleへアクセスする」が失敗することを確認する
URIスキームありでGoogleへアクセスする
実行結果です。
ノーマルなChromeでURIスキームを扱う .
...エラーメッセージ:
WebDriverException: Message: unknown error: unhandled inspector error: {"code":-32000,"message":"Cannot navigate to invalid URL"}
(Session info: chrome=60.0.3112.90)
(Driver info: chromedriver=2.31.488774 (7e15618d1bf16df8bf0ecf2914ed1964a387ba0b),platform=Mac OS X 10.11.6 x86_64)
_______________
HeadlessなChrome
通常のChromeと異なり、localhostの場合にもURIスキームが必要になります。
HeadlessなChromeでURIスキームを扱う
${options} = evaluate sys.modules['selenium.webdriver'].ChromeOptions() sys
call method ${options} add_argument --headless
create webdriver Chrome chrome_options=${options}
log to console ${SPACE}
キーワード「URIスキーム無しでlocalhostへアクセスする」が失敗することを確認する
URIスキームありでlocalhostへアクセスする
キーワード「URIスキーム無しでGoogleへアクセスする」が失敗することを確認する
URIスキームありでGoogleへアクセスする
実行結果です。
HeadlessなChromeでURIスキームを扱う ...
.エラーメッセージ:
Location should have been 'http://localhost:8084/' but was 'data:,'
_______________
..エラーメッセージ:
WebDriverException: Message: unknown error: unhandled inspector error: {"code":-32000,"message":"Cannot navigate to invalid URL"}
(Session info: headless chrome=60.0.3112.90)
(Driver info: chromedriver=2.31.488774 (7e15618d1bf16df8bf0ecf2914ed1964a387ba0b),platform=Mac OS X 10.11.6 x86_64)
_______________
これらより、キーワード Go To を使う場合はURIスキームを付けるほうが、エラーが出ることなく移動できることが分かりました。
ソースコード
GitHubに上げました。selenium2_library_sample/tests/の中にあるselenium_uri_scheme_test.robotファイルが今回のテストファイルです。
thinkAmi-sandbox/RobotFramework-sample