Android実機上のChromeを使うテストをRobotFrameworkで書く機会があったため、メモを残します。
なお、環境構築などは以下が参考になりました。ありがとうございました。
目次
環境
- Mac OS X 10.11.6
- Python 3.6.2
- Google Chrome 60.0.3112.113 (stable)
- ChromeDriver 2.31 (stable)
- RobotFramework 3.0.2
- SeleniumLibrary 3.0.0a2
- Android実機 Nexus7 2012 Android 4.4.4
- Android SDK Tools 26.0.1
- Android SDK platform-tools 26.0.0
なお、このMacにはJDK1.8がインストール済です。必要かどうか分かりませんが、うまくいかない場合はJDKも入れてみてください。
準備
Android接続環境の構築
手元のMacにはAndroid接続環境がなかったため、環境を構築します。
Slideshareの資料では、Android SDK Toolsをインストールし、 adb devices
を使ってAndroid実機が接続されているかを確認していました。
現時点でadb
コマンドを使うには Platform-tools
のインストールが必要です。
IDE および SDK ツールの更新 | Android Studio
そのため、
- Android Studioをインストールし、Platform-toolsをGUIでインストール
- Android SDK Toolsをダウンロードし、Platform-toolsをCUIでインストール
のどちらかを行います。
今回は
のため、Android SDK ToolsのCUIでインストールすることにしました。
Android SDK Toolsのダウンロード
以下のページの下部にある、「コマンドライン ツールのみ入手する」からダウンロードします。
https://developer.android.com/studio/index.html?hl=ja#downloads
今回は、 sdk-tools-darwin-3859397.zip
をダウンロードしました。
ダウンロード後、任意のディレクトリに展開しました。
platform-toolsのインストール
以下を参考に、sdkmanager
を使ってコマンドラインにてインストールします。
sdkmanager | Android Studio
# インストール可能なものを確認 $ ./bin/sdkmanager --list ... platform-tools | 26.0.0 | Android SDK Platform-Tools ... # platform-toolsをインストール $ ./bin/sdkmanager "platform-tools" # 途中でAcceptが出るので、y Accept? (y/N): y done
接続確認
以下の手順に従い、端末の接続を確認します。
ハードウェア端末上でアプリを実行する | Android Studio
なお、MacにはUSB Driverは不要のようです。
$ ./platform-tools/adb devices List of devices attached * daemon not running. starting it now at tcp:5037 * * daemon started successfully * xxxxxxxx unauthorized
この時点で実機を見ると「USBデバックを許可しますか?」が表示されるため、OKを押します
再度実行します。
$ ./platform-tools/adb devices List of devices attached xxxxxxxx device
認識されたようです。
.bashprofileの設定
以下を参考に、末尾に設定を追加します。
android sdk tools 25.3.0 に関しての備忘メモ - exception think
# for Android export ANDROID_HOME=$HOME/android/ PATH=$ANDROID_HOME/tools:$PATH PATH=$ANDROID_HOME/tools/bin:$PATH PATH=$ANDROID_HOME/platform-tools:$PATH
ChromeDriverの起動
事前にChromeDriverを起動しておくことで、Android実機上のChromeに接続できるようになります。
$ chromedriver Starting ChromeDriver 2.31.488774 (7e15618d1bf16df8bf0ecf2914ed1964a387ba0b) on port 9515 Only local connections are allowed.
以上で準備が完了しました。
テストコードの実行
RobotFrameworkのテストコードを作成
Create Webdriverについて
以前同様、GoogleでPythonを検索するテストコードを作成します。
ポイントはCreate Webdriverのところです。
options = webdriver.ChromeOptions() options.add_experimental_option('androidPackage', 'com.android.chrome') driver = webdriver.Chrome(chrome_options=options)
となる場合、RobotFrameworkでは
${options} = evaluate sys.modules['selenium.webdriver'].ChromeOptions() sys
call method ${options} add_experimental_option androidPackage com.android.chrome
create webdriver Chrome chrome_options=${options}
となります。
ソースコード全体
*** Settings *** Library SeleniumLibrary *** Keywords *** GoogleでPythonを検索してスクリーンショットを撮り、結果を出力する # 以下のコードをRobot Framework風にした # http://qiita.com/orangain/items/db4594113c04e8801aad # 以下を参考に、Chromeのオプションを追加して、Chromeを起動する # https://sites.google.com/a/chromium.org/chromedriver/getting-started/getting-started---android ${options} = evaluate sys.modules['selenium.webdriver'].ChromeOptions() sys call method ${options} add_experimental_option androidPackage com.android.chrome create webdriver Chrome chrome_options=${options} # Googleのトップ画面を開く go to https://www.google.co.jp/ # タイトルにGoogleが含まれていることを確認する ${page_title} = get title should contain ${page_title} Google # 検索後を入力してEnter input text name=q Python # Robot FrameworkではEnterキーは\\13になる # https://github.com/robotframework/Selenium2Library/issues/4 press key name=q \\13 # Ajax遷移のため、適当に2秒待つ sleep 2sec # タイトルにPythonが含まれていることを確認する ${result_title} = get title should contain ${result_title} Python # スクリーンショットを撮る capture page screenshot filename=result_google_python.png # ログを見やすくするために改行を入れる log to console ${SPACE} # 検索結果を表示する @{web_elements} = get webelements css=h3 > a :for ${web_element} in @{web_elements} \ ${text} = get text ${web_element} \ log to console ${text} \ ${href} = call method ${web_element} get_attribute href \ log to console ${href} # ブラウザを終了する close browser *** TestCases *** GoogleでPythonを検索するテスト GoogleでPythonを検索してスクリーンショットを撮り、結果を出力する
テストの実行
Android実機上でChromeが起動し、テストコードが実行されました。
$ robot google.robot ================================ Google ================================ GoogleでPythonを検索するテスト Python - ウィキペディア https://ja.wikipedia.org/wiki/Python ... GoogleでPythonを検索するテスト | PASS |
スクリーンショットもAndroid上のChromeの画面が撮れていました。
ソースコード
GitHubに上げました。 selenium_android_sample/android_chrome.robot
ファイルが今回のテストファイルです。
thinkAmi-sandbox/RobotFramework-sample: Robot Framewrok samples