iOS-Testing-Automation-Framework
Robots, locators autorreparables, diffs de screenshots, auditorías de accesibilidad e informes de CI para XCUITest.
Licencia: MIT
Un paquete Swift sin dependencias para los UI tests y unit tests de apps de iOS y macOS. En XCUITest añade robots, búsquedas que sobreviven a un accessibility identifier renombrado, una auditoría de accesibilidad, comparación de screenshots con una imagen de diferencia, e informes JUnit y Markdown para CI. En cualquier test target, con Swift Testing o XCTest, añade snapshots de SwiftUI, esperas con polling, retries, spies y datos de test con seed. Las reglas detrás de estos helpers son Swift puro y están cubiertas por unit tests; la capa de XCUITest se ejercita con los UI tests de una app de ejemplo en un simulador de iPhone.
Características
- Robots: una clase por pantalla cuyas actions esperan hasta que el elemento sea hittable, aparecen como steps con nombre en el test report de Xcode e informan los fallos en la línea del test
- Búsquedas autorreparables: Locator y LocatorHealer recurren al label, al placeholder o al identifier más parecido, registran la corrección en HealingLog y se niegan a adivinar entre dos coincidencias igual de buenas
- Auditoría de accesibilidad con cinco reglas (labels ausentes, imágenes sin label, touch targets por debajo de 44 × 44 pt, labels que repiten el tipo de elemento, identifiers duplicados), opcionalmente combinada con performAccessibilityAudit() de Apple
- Comparación de screenshots y snapshots de SwiftUI contra PNGs baseline, con una tolerancia, regiones ignoradas y una imagen de diferencia; un baseline ausente se registra y el test falla
- junit.xml y un resumen de job en Markdown reescritos después de cada test, con los secrets registrados y los patrones de credenciales enmascarados, además de FlakinessAnalyzer para los resultados de varias ejecuciones de CI
- typeSecret pega las contraseñas en lugar de escribirlas, de modo que los activity titles del propio XCTest nunca las contienen; CI busca las contraseñas de test en el result bundle
- Helpers para unit tests: Wait.until, RetryPolicy, Spy y ThrowingSpy, Fixtures con seed y Benchmark
- Sin dependencias y sin import de Swift Testing, por lo que el paquete enlaza en bundles de UI test; 118 tests de Swift Testing, 9 UI tests en la app de ejemplo AutomationShowcase, y un catálogo DocC con cuatro artículos
Inicio rápido
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}Instalación
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]Capturas de pantalla


Cronología
Repositorio abierto como un framework de automatización de tests; la mayor parte de la semana siguiente se dedicó a documentación
v1.0.0 publicada con una lista de funciones basada en el README, tras el trabajo de README, issue template y CI/CD que empezó el 28 de enero; los cambios de README y docs continuaron hasta el 5 de febrero
Las fuentes se sustituyeron por código placeholder: un motor de regresión visual que no comparaba nada, un auditor de accesibilidad que solo imprimía, y un test target que ya no compilaba
v2.0.0: reconstruido sobre Swift 6 con reglas probadas detrás de cada UI helper, una app de ejemplo con UI tests en CI, DocC, y las partes útiles de iOSTestingTools fusionadas