🧪
AppiumによるiOSアプリのE2Eテスト実現のために実施したCapability設定
前提
- 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設定を上から参照していき、必要そうなものを選んで書いていった。
Discussion