Todos los paquetes de código abierto
HerramientasSwift

iOS-Testing-Automation-Framework

Robots, locators autorreparables, diffs de screenshots, auditorías de accesibilidad e informes de CI para XCUITest.

3EstrellasÚltima versión: v2.0.0 · Actualizado: 15 de octubre de 2026
Plataformas:iOS 17macOS 14

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

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}

Instalación

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]

Capturas de pantalla

Tres screenshots de teléfono lado a lado: el catálogo con precios, el catálogo con los precios ocultos, y una imagen de diferencia difuminada en la que solo los precios y el switch están resaltados en azul
La pantalla de catálogo de la app de ejemplo en un simulador de iPhone: un switch Show prices, una hora de actualización y cuatro artículos de equipo de preparación con sus precios

Cronología

  1. Repositorio abierto como un framework de automatización de tests; la mayor parte de la semana siguiente se dedicó a documentación

  2. 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

  3. 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

  4. 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

Enlaces

Repositorios fusionados

Artículo relacionado

Leer el artículo (English)