最近Appiumについて調査し、ローカル環境にテスト環境を構築したので、その手順を記録します。
1.JDKのインストールと設定
Java開発時にJDKをインストールしましたが、Oracle公式サイトからのダウンロードではなく、Android SDKをダウンロード後にSDK Manager.exeを実行すると即座に終了する問題が発生しました。その後、Oracle公式のJDKを再ダウンロードして環境変数を設定したところ、SDK Manager.exeが正常に起動するようになりました。
2.Node.jsのインストール
Node.jsのインストール手順はネットで検索できます。ここではDesktop版のAppium-Server-GUI-windowsを使用しています。
3.Android SDKのダウンロード
URL: https://www.androiddevtools.cn/ にアクセスし、ANDROID_HOMEというシステム変数を設定します。さらに、環境変数PATHに%ANDROID_HOME%\toolsと%ANDROID_HOME%\platform-toolsを追加してください。
管理者権限でSDK Manager.exeを実行し、以下の画面にあるInstalledのパッケージを選択してダウンロードします。ダウンロードには時間がかかるため、待機してください。
4.Appium ServerとAppium Inspectorのダウンロード
ダウンロード元: https://github.com/appium からAppium ServerおよびAppium Inspectorを取得します。
5.Androidエミュレータのインストール
私は夜神エミュレータを使用しています。インストール後、コマンドプロンプトで「adb devices」を実行すると、エミュレータの一覧が表示されます。もし「list of devices attached」のようなエラーが出る場合は、adb kill-serverとadb start-serverを実行してadbサービスを再起動してください。
初期状態ではタブレットモードでしたが、設定からスマホモードに切り替えることができます。
6.Appium Doctorのインストール
コマンドラインで以下のコマンドを実行してappium-doctorをインストールします:npm -g install appium-doctor。
インストール後、appium-doctorを実行して設定が正しく行われているか確認します。warnメッセージは無視しても構いませんが、errorメッセージは注意が必要です。
7.Appium Serverの起動
テストケース内でadb shellコマンドを実行する必要があるため、「Relaxed Security」オプションを有効にする必要があります。
8.エミュレータの起動
「adb devices」コマンドを実行してエミュレータを確認します。
9.Appium Inspectorの起動
Remote Pathに/wd/hubを入力し、Capabilityを設定します。platformVersionにはエミュレータのバージョンを指定します。appPackageは連絡先アプリを指すように設定します。appPackageとappActivityの取得方法は、エミュレータ上でアプリを起動した後、adb shell dumpsys window windowsコマンドを使用します。
{
"platformName": "Android",
"appium:platformVersion": "7.1.2",
"appium:deviceName": "127.0.0.1:62001",
"appium:appPackage": "com.android.contacts",
"appium:appActivity": "com.android.contacts.activities.PeopleActivity",
"appium:noReset": true,
"appium:newCommandTimeout": "600",
"appium:autoGrantPermissions": false
}
最後に「Start Session」ボタンをクリックしてセッションを開始します。
10.Appium Inspectorの更新
最初はAppium Inspectorのページを更新する方法が分からず、左側の要素が更新されずXPathなどの情報を取得できませんでした。しかし、エミュレータとの連携が原因であることに気づき、エミュレータ上でページを開いた後に、Appium Inspectorの上部にある円形ボタンをクリックすることでページを更新できることが判明しました。これにより、新しいページの要素をXPathで取得することが可能になります。
11.Pythonライブラリのインストール
Robot Frameworkの環境構築については省略します。主に以下の2つのライブラリをインストールします。
pip install Appium-Python-Client
pip install robotframework-appiumlibrary
12.テストスクリプトの作成
まずAppiumLibraryをインポートし、ここでは連絡先を追加するためにユーザー操作を模倣します。
*** Settings ***
Library AppiumLibrary
*** Test Cases ***
test123
Open Application http://127.0.0.1:4723/wd/hub alias=myapp1 platformName=Android platformVersion=7.1.2 deviceName=127.0.0.1:62001 appPackage=com.android.contacts appActivity=com.android.contacts.activities.PeopleActivity
sleep 3
Execute Adb Shell pm grant com.android.contacts android.permission.READ_CALENDAR
Execute Adb Shell pm grant com.android.contacts android.permission.ACCESS_FINE_LOCATION
Execute Adb Shell pm grant com.android.contacts android.permission.READ_SMS
sleep 2
Click element id=com.android.contacts:id/floating_action_button
sleep 2
Click element id=com.android.contacts:id/left_button
sleep 2
Input Text xpath=//*[@resource-id='com.android.contacts:id/editors']//android.widget.EditText[@text='姓名'] cuiyw
sleep 2
Click element xpath=//android.widget.Spinner[@content-desc="电话"]/android.widget.TextView
sleep 1
Click element xpath=/hierarchy/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.ListView/android.widget.CheckedTextView[2]
sleep 1
Input Text xpath=//*[@resource-id='com.android.contacts:id/editors']//android.widget.EditText[@text='电话'] 18575533041
sleep 2
Input Text xpath=//*[@resource-id='com.android.contacts:id/editors']//android.widget.EditText[@text='电子邮件'] 18575533041@qq.com
sleep 2
Click element xpath=//android.widget.TextView[@content-desc="保存"]
sleep 2
連絡先を追加する際に、位置情報、カレンダー、SMSの3つの権限要求が発生します。これらの権限を事前に許可するため、Execute Adb Shellキーワードを使用してアプリに権限を付与します。上記のExecute Adb Shell行をコメントアウトすると、権限許可ダイアログが表示されるようになります。
このテストを実行すると、連絡先に新しい情報が追加されます。