Xcode12からStoreKit Configurationが追加され、今まで自前でモックを作成していたようなStoreKit周りの処理を簡単に記述できるようになりました。
XCTestはこれで難なく進めていけるのですが、XCUITestで処理を進めようと思うとAppleの標準シートが表示され、購入への確認操作を要求されます。しかし、インスタンス化したテスト対象のXCUIApplication
からは操作ができません。
この操作は以下のようにSpringBoard
を操作することで実行可能です。
let springboardApp = XCUIApplication(bundleIdentifier: "com.apple.springboard")
springboardApp.buttons["Confirm"].tap()
他にも、iCloud連携をしているアプリケーションではアカウントへのログインを要求するダイアログが表示されるのですが、同じようにspringBoardApp
の要素にアクセスすることでアクセス可能です。
let signInAlert = springboardApp.alerts.element
signInAlert.buttons["Cancel"].tap()
推測
おそらくですが、XCUITestの実行中に表示されるAppleの標準ダイアログなどは全て上記のSpringBoard経由で操作できるのではと考えています。異なるケースあれば、教えていただけると助かります。
ちなみに、このSpringBoardを操作すれば、アプリ削除の自動テストも実行できるようです。
https://qiita.com/bbq-all-stars/items/be63ecddea15ec7453cc
注意
シミュレーター実行時のみ使えるテクニックなので、実機では動きません。
参照
一次情報を探したのですが見つからずでした。