すべてのオープンソースパッケージ
ツールSwift

iOS-Testing-Automation-Framework

XCUITest 向けの robot、自己修復する locator、スクリーンショットの差分比較、アクセシビリティ audit、CI レポート。

3スター数最新リリース: v2.0.0 · 更新日: 2026年10月15日
対応プラットフォーム:iOS 17macOS 14

ライセンス: MIT

iOS・macOS アプリの UI テストとユニットテストのための依存関係のない Swift パッケージです。XCUITest では robot、accessibility identifier の変更に耐えるルックアップ、accessibility audit、差分イメージ付きのスクリーンショット比較、CI 用の JUnit および Markdown レポートを追加します。Swift Testing でも XCTest でも、任意の test target に SwiftUI のスナップショット、ポーリングによる wait、retry、spy、シード済みのテストデータを追加します。これらのヘルパーの裏側のルールは普通の Swift で書かれ、ユニットテストでカバーされています。XCUITest 層は、iPhone シミュレータ上のサンプルアプリの UI テストで検証されています。

機能

  • Robot: 画面ごとに1つの class で、その action は要素が hittable になるまで待ち、Xcode のテストレポートに名前付きのステップとして表示され、失敗はテストの行として報告されます
  • 自己修復するルックアップ: Locator と LocatorHealer は label、placeholder、または最も近い identifier にフォールバックし、修正を HealingLog に記録し、同程度に良いマッチが複数ある場合は推測を拒否します
  • 5つのルール(label の欠落、label のない画像、44×44pt未満のタップ領域、要素の種類を繰り返す label、重複した identifier)による accessibility audit で、Apple の performAccessibilityAudit() と併用することもできます
  • baseline の PNG とのスクリーンショットおよび SwiftUI スナップショット比較で、tolerance、無視する領域、差分イメージに対応します。baseline が存在しない場合は記録され、テストは失敗します
  • テストごとに書き直される junit.xml と Markdown の job summary で、登録済みの secrets や credential のパターンはマスクされます。さらに複数回の CI 実行結果向けの FlakinessAnalyzer があります
  • typeSecret はパスワードを入力ではなく貼り付けで扱うため、XCTest 自身の activity title にパスワードが含まれません。CI は result bundle 内にテスト用パスワードが含まれていないか検索します
  • ユニットテスト向けのヘルパー: Wait.until、RetryPolicy、Spy と ThrowingSpy、シード済みの Fixtures、Benchmark
  • 依存関係も Swift Testing の import もないため、UI テストバンドルにもリンクできます。118件の Swift Testing テスト、サンプルアプリ AutomationShowcase 内の9件の UI テスト、4本の記事からなる DocC カタログがあります

クイックスタート

swift
1import XCTest
2import iOSTestingAutomationFramework
3 
4final class CounterRobot: Robot {
5 var label: XCUIElement { app.staticTexts["counter.label"] }
6 var button: XCUIElement { app.buttons["counter.button"] }
7}
8 
9final class CounterUITests: XCTestCase {
10 @MainActor
11 func testTappingCounts() {
12 let app = XCUIApplication()
13 app.launch()
14 
15 let counter = app.on(CounterRobot.self)
16 counter
17 .tap(counter.button)
18 .tap(counter.button)
19 .assertLabel(of: counter.label, equals: "Tapped 2 times")
20 }
21}

インストール

Xcode (File › Add Package Dependencies…)

text
1https://github.com/muhittincamdali/iOS-Testing-Automation-Framework.git

Swift Package Manager

swift
1dependencies: [
2 .package(url: "https://github.com/muhittincamdali/iOS-Testing-Automation-Framework.git", from: "2.0.0")
3],
4targets: [
5 .testTarget(name: "YourAppTests", dependencies: [
6 .product(name: "iOSTestingAutomationFramework", package: "iOS-Testing-Automation-Framework")
7 ])
8]

スクリーンショット

並べられた3枚のスマートフォンのスクリーンショット: 価格表示のあるカタログ、価格を非表示にしたカタログ、価格とスイッチだけが青色でハイライトされた淡い差分イメージ
iPhone シミュレータ上のサンプルアプリのカタログ画面: Show prices のスイッチ、更新時刻、価格付きの抽出器具4点

タイムライン

  1. テスト自動化フレームワークとしてリポジトリが公開されました。翌週の大半はドキュメント作成に費やされました

  2. 1月28日に始まった README、issue テンプレート、CI/CD の作業の後、README 主導の機能一覧を伴う v1.0.0 がリリースされました。README とドキュメントの変更は2月5日まで続きました

  3. ソースが placeholder のコードに置き換えられました: 何も比較しない visual regression engine、print するだけの accessibility auditor、もうコンパイルできない test target

  4. v2.0.0: Swift 6 上で作り直され、すべての UI ヘルパーの裏側にテスト済みのルールを備え、CI 上で UI テストを行うサンプルアプリ、DocC を加え、iOSTestingTools の有用な部分を統合しました

リンク

統合されたリポジトリ

関連記事

記事を読む (English)