iOS-Testing-Automation-Framework
Robots, selbstheilende Locators, Screenshot-Diffs, Accessibility-Audits und CI-Reports für XCUITest.
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
1import XCTest2import iOSTestingAutomationFramework3 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 @MainActor11 func testTappingCounts() {12 let app = XCUIApplication()13 app.launch()14 15 let counter = app.on(CounterRobot.self)16 counter17 .tap(counter.button)18 .tap(counter.button)19 .assertLabel(of: counter.label, equals: "Tapped 2 times")20 }21}Installation
Xcode (File › Add Package Dependencies…)
1https://github.com/muhittincamdali/iOS-Testing-Automation-Framework.gitSwift Package Manager
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


Zeitleiste
Repository als Test-Automation-Framework eröffnet; der Großteil der folgenden Woche ging in Dokumentation
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
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
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