Alle Open-Source-Pakete
WerkzeugeSwift

iOS-Testing-Automation-Framework

Robots, selbstheilende Locators, Screenshot-Diffs, Accessibility-Audits und CI-Reports für XCUITest.

3SterneNeueste Version: v2.0.0 · Aktualisiert: 15. Oktober 2026
Plattformen:iOS 17macOS 14

Lizenz: MIT

Ein abhängigkeitsfreies Swift-Package für UI-Tests und Unit-Tests von iOS- und macOS-Apps. In XCUITest fügt es Robots hinzu, Lookups, die einen umbenannten Accessibility Identifier überstehen, ein Accessibility-Audit, Screenshot-Vergleiche mit einem Differenzbild sowie JUnit- und Markdown-Reports für CI. In jedem Test-Target, ob Swift Testing oder XCTest, bietet es SwiftUI-Snapshots, Polling-Waits, Retries, Spies und seedbasierte Testdaten. Die Regeln hinter diesen Helfern sind einfaches Swift und werden durch Unit-Tests abgedeckt; die XCUITest-Schicht wird durch die UI-Tests einer Beispiel-App auf einem iPhone-Simulator geprüft.

Funktionen

  • Robots: eine Klasse pro Screen, deren Actions warten, bis das Element antippbar ist, als benannte Schritte in Xcodes Testreport erscheinen und Fehler an der Zeile des Tests melden
  • Heilende Lookups: Locator und LocatorHealer greifen auf das Label, den Platzhalter oder den ähnlichsten Identifier zurück, protokollieren die Korrektur in HealingLog und raten nicht zwischen zwei gleich guten Treffern
  • Accessibility-Audit mit fünf Regeln (fehlende Labels, unbeschriftete Bilder, Touch-Targets unter 44 × 44 pt, Labels, die die Elementart wiederholen, doppelte Identifier), optional kombiniert mit Apples performAccessibilityAudit()
  • Vergleich von Screenshots und SwiftUI-Snapshots gegen Baseline-PNGs, mit Toleranz, ignorierten Bereichen und einem Differenzbild; eine fehlende Baseline wird aufgezeichnet, und der Test schlägt fehl
  • junit.xml und eine Markdown-Job-Summary werden nach jedem Test neu geschrieben, registrierte Secrets und Credential-Patterns werden maskiert, dazu FlakinessAnalyzer für Ergebnisse mehrerer CI-Läufe
  • typeSecret fügt Passwörter per Einfügen ein statt sie zu tippen, sodass sie nie in XCTests eigenen Activity-Titeln auftauchen; CI durchsucht das Result-Bundle nach den Test-Passwörtern
  • Unit-Test-Helfer: Wait.until, RetryPolicy, Spy und ThrowingSpy, seedbasierte Fixtures und Benchmark
  • Keine Abhängigkeiten und kein Swift-Testing-Import, sodass sich das Package in UI-Test-Bundles linken lässt; 118 Swift-Testing-Tests, 9 UI-Tests in der Beispiel-App AutomationShowcase und ein DocC-Katalog mit vier Artikeln

Schnellstart

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}

Installation

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]

Screenshots

Drei Smartphone-Screenshots nebeneinander: der Katalog mit Preisen, der Katalog mit ausgeblendeten Preisen und ein verblasstes Differenzbild, in dem nur die Preise und der Schalter blau hervorgehoben sind
Der Katalog-Screen der Beispiel-App auf einem iPhone-Simulator: ein Show-prices-Schalter, eine Aktualisierungszeit und vier Kaffeezubereitungs-Artikel mit Preisen

Zeitleiste

  1. Repository als Test-Automation-Framework eröffnet; der Großteil der folgenden Woche ging in Dokumentation

  2. v1.0.0 mit einer README-gestützten Feature-Liste veröffentlicht, nach README-, Issue-Template- und CI/CD-Arbeit, die am 28. Januar begann; README- und Doku-Änderungen liefen bis zum 5. Februar weiter

  3. Quellen durch Platzhaltercode ersetzt: eine Visual-Regression-Engine, die nichts verglich, ein Accessibility-Auditor, der nur ausgab, und ein Test-Target, das nicht mehr kompilierte

  4. v2.0.0: auf Swift 6 neu aufgebaut, mit getesteten Regeln hinter jedem UI-Helfer, einer Beispiel-App mit UI-Tests in CI, DocC und den nützlichen Teilen von iOSTestingTools eingebunden

Links

Zusammengeführte Repositories

Verwandter Artikel

Artikel lesen (English)