工具Swift
iOS-Testing-Automation-Framework
为 XCUITest 提供 robot、自我修复的 locator、截图对比、无障碍审查和 CI 报告
3星标数最新版本: v2.0.0 · 更新时间: 2026年10月15日
支持平台:iOS 17macOS 14
许可证: MIT
一个面向 iOS 和 macOS app 的 UI 测试与单元测试、无依赖的 Swift package。在 XCUITest 中,它提供 robot、能在 accessibility identifier 改名后仍可用的查找方式、无障碍审查、带差异图的截图对比,以及供 CI 使用的 JUnit 和 Markdown 报告。在任意测试 target(Swift Testing 或 XCTest)中,它都提供 SwiftUI 快照、轮询等待、重试、spy 和带种子的测试数据。这些辅助工具背后的规则是纯 Swift 代码,并由单元测试覆盖;XCUITest 这一层由一个示例 app 在 iPhone 模拟器上的 UI 测试来验证。
功能特性
- Robot:每个界面对应一个类,其操作会等待元素变为可点击状态,在 Xcode 的测试报告中显示为具名步骤,并在失败时报告到对应的测试代码行
- 自我修复的查找:Locator 和 LocatorHealer 会回退到 label、placeholder 或最相似的 identifier,把修复记录写入 HealingLog,并在多个候选同样匹配时拒绝猜测
- 包含 5 条规则的无障碍审查(缺失 label、无 label 的图片、小于 44 × 44 pt 的触控目标、重复元素类型的 label、重复的 identifier),可选与 Apple 的 performAccessibilityAudit() 结合使用
- 截图和 SwiftUI 快照会与基线 PNG 对比,支持容差、忽略区域和差异图;缺失基线时会被记录下来,并导致测试失败
- 每次测试后都会重写 junit.xml 和一份 Markdown job summary,已注册的 secret 和凭据模式会被遮蔽,并提供 FlakinessAnalyzer 用于分析多次 CI 运行的结果
- typeSecret 会粘贴密码而不是逐字输入,因此 XCTest 自身的 activity 标题中永远不会包含密码;CI 会在结果 bundle 中搜索测试用密码
- 单元测试辅助工具:Wait.until、RetryPolicy、Spy 和 ThrowingSpy、带种子的 Fixtures,以及 Benchmark
- 无依赖,也不 import Swift Testing,因此该 package 可以链接进 UI 测试 bundle;共有 118 个 Swift Testing 测试、AutomationShowcase 示例 app 中的 9 个 UI 测试,以及一个包含 4 篇文章的 DocC catalog
快速开始
swift
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}安装
Xcode (File › Add Package Dependencies…)
text
1https://github.com/muhittincamdali/iOS-Testing-Automation-Framework.gitSwift 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]截图


时间线
仓库开放,作为一个测试自动化 framework;接下来一周的大部分时间都用在文档上
在 1 月 28 日开始的 README、issue 模板和 CI/CD 工作之后,v1.0.0 发布,附带一份以 README 驱动的功能列表;README 和文档的改动一直持续到 2 月 5 日
源码被替换为占位代码:一个什么都不比较的视觉回归引擎、一个只会打印的无障碍审查器,以及一个已经无法编译的测试 target
v2.0.0:基于 Swift 6 重建,每个 UI 辅助工具背后的规则都经过测试,配有一个在 CI 上运行 UI 测试的示例 app、DocC,并合并了 iOSTestingTools 中有用的部分