Tous les paquets open source
OutillageSwift

iOS-Testing-Automation-Framework

Robots, locators auto-réparants, diffs de captures d'écran, audits d'accessibilité et rapports CI pour XCUITest.

3ÉtoilesDernière version: v2.0.0 · Mis à jour: 15 octobre 2026
Plateformes:iOS 17macOS 14

Licence: MIT

Un package Swift sans dépendance pour les tests UI et les tests unitaires des apps iOS et macOS. Dans XCUITest, il ajoute des robots, des recherches qui survivent au renommage d'un accessibility identifier, un audit d'accessibilité, une comparaison de captures d'écran avec une image de différence, et des rapports JUnit et Markdown pour la CI. Dans n'importe quelle target de test, Swift Testing ou XCTest, il ajoute des snapshots SwiftUI, des attentes par polling, des retries, des spies et des données de test seedées. Les règles derrière ces helpers sont du Swift simple et couvertes par des tests unitaires ; la couche XCUITest est exercée par les tests UI d'une app d'exemple sur un simulateur iPhone.

Fonctionnalités

  • Robots : une classe par écran dont les actions attendent que l'élément soit hittable, apparaissent comme des étapes nommées dans le rapport de test d'Xcode et signalent les échecs à la ligne du test
  • Recherches auto-réparantes : Locator et LocatorHealer se replient sur le label, le placeholder ou l'identifiant le plus similaire, journalisent la correction dans HealingLog et refusent de deviner entre des correspondances également bonnes
  • Audit d'accessibilité avec cinq règles (labels manquants, images sans label, cibles tactiles sous 44 × 44 pt, labels qui répètent le type d'élément, identifiants dupliqués), optionnellement combiné avec performAccessibilityAudit() d'Apple
  • Comparaison de captures d'écran et de snapshots SwiftUI avec des PNG de référence (baseline), avec une tolérance, des régions ignorées et une image de différence ; une baseline manquante est enregistrée et le test échoue
  • junit.xml et un résumé de job Markdown réécrits après chaque test, avec les secrets enregistrés et les motifs d'identifiants masqués, plus FlakinessAnalyzer pour les résultats de plusieurs runs de CI
  • typeSecret colle les mots de passe au lieu de les taper, afin que les titres d'activité propres à XCTest ne les contiennent jamais ; la CI recherche les mots de passe de test dans le result bundle
  • Helpers de tests unitaires : Wait.until, RetryPolicy, Spy et ThrowingSpy, Fixtures seedées et Benchmark
  • Aucune dépendance et aucun import de Swift Testing, afin que le package se linke dans les bundles de tests UI ; 118 tests Swift Testing, 9 tests UI dans l'app d'exemple AutomationShowcase, et un catalogue DocC avec quatre articles

Démarrage rapide

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]

Captures d'écran

Trois captures d'écran de téléphone côte à côte : le catalogue avec les prix, le catalogue avec les prix masqués, et une image de différence délavée où seuls les prix et le switch sont surlignés en bleu
L'écran catalogue de l'app d'exemple sur un simulateur iPhone : un switch Show prices, une heure de mise à jour et quatre articles de matériel de brassage avec leurs prix

Chronologie

  1. Dépôt ouvert en tant que framework d'automatisation de tests ; la majeure partie de la semaine suivante a été consacrée à la documentation

  2. v1.0.0 publiée avec une liste de fonctionnalités pilotée par le README, après un travail sur le README, les issue templates et la CI/CD débuté le 28 janvier ; les changements du README et de la doc se sont poursuivis jusqu'au 5 février

  3. Sources remplacées par du code espace réservé : un moteur de régression visuelle qui ne comparait rien, un auditeur d'accessibilité qui se contentait d'imprimer, et une target de test qui ne compilait plus

  4. v2.0.0 : reconstruit sur Swift 6 avec des règles testées derrière chaque helper UI, une app d'exemple avec des tests UI en CI, DocC, et les parties utiles d'iOSTestingTools fusionnées

Liens

Dépôts fusionnés

Article associé

Lire l'article (English)