1. Appiumの公式リソース
- Appium公式ドキュメント
- Appium GitHubリポジトリ
- Appium InspectorのGitHubページ
2. インストールと開発環境構築
2.1 Appiumサーバーの準備
Appium Desktopを使用すればインストールが簡単に行えるが、v1.22以降でセキュリティ上の問題が見つかり、保守が停止しているため、個別にAppiumサーバーをセットアップする。
2.1.1 Node.jsのインストール
AppiumサーバーはNode.jsベースのため、まずNode.jsをインストールする。
- 公式サイトからインストーラーをダウンロードしてインストール
- バージョン確認コマンド:
node -vnpm -v
- npmのレジストリ変更コマンド:
npm config set registry <ミラーURL>- 現在の設定を確認:
npm config get registry
2.1.2 Appiumと診断ツールのインストール
グローバルインストールコマンド:
npm install -g appium(Linux/macOSで権限問題がある場合はsudoを使う)npm install -g appium-doctor
診断実行:appium-doctor(一部の警告は無視しても問題ない)
2.1.3 ドライバのインストール
Appium 2.0以降はドライバが個別管理されているため、必要に応じてインストールを行う。
- 利用可能なドライバ一覧:
appium driver list - Android向けドライバのインストール:
appium driver install uiautomator2
2.2 Android SDKとデバイス接続
Android端末でのテストを行うためにはAndroid SDKと端末の認識が必要。
- Android SDKのインストール手順はOSに応じて参照(別記事)
- ノックスミューレーター使用の場合:
- 接続コマンド:
adb connect 127.0.0.1:62001 - 認識確認:
adb devices
- 接続コマンド:
- 実機使用時は開発者オプションを有効にする
2.3 動作確認コード
以下のコードでAppiumの動作を確認する。
import time
from appium import webdriver
from appium.options.common.base import AppiumOptions
設定オプション = {
"platformName": "Android",
"automationName": "uiautomator2",
"deviceName": "Android",
"appPackage": "com.android.settings",
"appActivity": ".Settings"
}
driver = webdriver.Remote('http://localhost:4723', options=AppiumOptions().load_capabilities(設定オプション))
print("設定アプリを起動")
time.sleep(5)
driver.quit()
実行手順:
- Appiumサーバー起動:
appium - 端末接続確認:
adb devices - Pythonでスクリプトを実行し、設定アプリの起動・終了が確認できれば成功
2.4 Appium Inspectorの利用
UI要素の解析や録画、要素の特定に役立つツール。
- 公式サイトからインストーラーをダウンロード
- 起動後にDesired Capabilitiesを設定:
platformName:端末のOS(Android/iOS)appium:automationName:使用するドライバ名(例:uiautomator2)appium:deviceName:任意のデバイス名appium:appPackage:対象アプリのパッケージ名appium:appActivity:対象アクティビティ名
- パッケージ名・アクティビティ名の取得方法:
adb logcat ActivityManager:I | grep "cmp"でログを取得
3. Capabilitiesの基本構造
CapabilitiesはAppiumの各ドライバを設定するためのパラメータで、JSON形式で指定する。
必須パラメータ:
platformName:端末のOSappium:automationName:使用するドライバ
名前空間付きのパラメータは以下のようにまとめて記述できる:
capabilities = {
"platformName": "Android",
"appium:options": {
"automationName": "UiAutomator2",
"noReset": true
}
}