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