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