🧪

AppiumによるiOSアプリのE2Eテスト実現のために実施したCapability設定

2024/01/02に公開

前提

  • AppiumのシナリオはPythonで書く
  • E2Eテストはローカルとクラウド(Bitrise)の両方で動作させる
    • ローカルの場合は、XCodeでビルドしたデバッグビルドをそのまま使用してE2Eテストを実行させる
    • クラウドの場合は、E2Eテスト用にビルドした.appファイルのパスを渡してE2Eテストを実行させる

設定したCapability一覧

設定値の例は、意図的に"(ダブルクォーテーション)を付けたり付けなかったりしている。
Capabilityによって、数値であっても文字列で設定することを要求しているものがあるため。

なお、意味の欄はドキュメントを踏まえつつ、実際に設定を適用して変化した挙動から私が推測した内容も多く含まれているので注意。

Capability 意味 設定値の例
appium:platformVersion iPhoneシミュレータのiOSバージョン "17.0"
appium:app iPhoneシミュレータにインストールするための.appファイルが保存されているパス。
appium:bundleIdで既にインストールされているアプリのバンドルIDを指定している場合はこの指定は不要
"/path/to/myapp.app"
appium:bundleId 既にインストールされているアプリを使ってE2Eテストを実行する場合に、そのアプリのバンドルIDを指定する。
appium:appで.appファイルを指定している場合はこの指定は不要
"com.example.sample"
appium:deviceName E2Eテスト実行に使用するSimulatorのデバイス名 "iPhone 15 Pro"
appium:automationName iOSのE2Eテストの場合は必ず"XCUITest"を指定する。
大文字・小文字は区別されない
"XCUITest"
appium:additionalWebviewBundleIds アプリ内でWKWebViewで実装している画面を操作するために必要な設定。
例の列に書いたid群はappiumサーバを起動しながらWKWebView製の画面を開いた時に表示されたbundle idっぽい文字列を全て書き写したものなので、アプリごとにidが異なっている可能性が高そう
["process-sample", "com.apple.amsengagementd", "com.apple.WebKit.WebContent"]
appium:nativeWebTap 説明文を読む限り、WebView製の画面でタップする挙動を再現する際にJavaScriptベースの技術を使わない設定を有効にするものっぽい。正直よくわかっていないものの、ネイティブアプリのE2Eテストのシナリオ実行時にJavaScriptベースの技術を使うのはあんまりテストにならなさそうなので有効にしている true
appium:webviewConnectTimeout WebViewの初期表示を待つ時間。
デフォルトは0なので、設定しないと高確率でWebViewの画面でテストが失敗する。
単位はミリ秒。
"10000"
appium:commandTimeouts 特定のUI部品が表れるまでに待つような実装が入っている場合に、そのUI部品が表れるまでに待機する時間 "60000"
appium:autoFillPasswords iOSによるパスワードの自動生成機能のON/OFFを切り替える。
false(=OFF)にしないとパスワード入力欄へのテキスト入力が失敗する
false

参照したリソース

以下のページに記載されているCapability設定を上から参照していき、必要そうなものを選んで書いていった。
https://appium.github.io/appium-xcuitest-driver/5.12/capabilities/

Discussion