SuperAPI AI 工具集

axiom-ui-testing

测试与质量

查看项目

更新于 10-15 14:28

技能介绍

用途

axiom-ui-testing 用于指导编写稳定、可维护的 UI 测试,重点解决测试中的竞态条件、时序依赖和结果不一致问题。其核心原则是:等待条件,而不是猜测操作需要多长时间。任意超时(如 sleep)是测试不稳定的主要来源,基于条件的等待可以消除竞态条件。

该技能面向以下典型问题:

  • UI 测试在本地 Mac 上通过,但在 CI 中失败(设备与速度差异导致的时序差异)。
  • 测试有时通过、有时失败(竞态条件)。
  • 测试使用 sleep(2)、sleep(5) 等任意延迟,仍然不稳定。
  • 测试报“UI 元素未找到”,重试后又通过。
  • 测试在 iPhone 上通过,在 iPad 上失败(跨设备尺寸差异)。
  • 使用 Xcode 26 的 Recording UI Automation 录制测试后,需要回看视频并调试失败。

主要能力

基于条件的等待

技能提供多种等待模式:

  • 等待元素出现:使用 waitForExistence(timeout:),而不是 sleep()。
  • 等待元素消失:使用 XCTNSPredicateExpectation 配合 exists == false 谓词。
  • 等待特定状态:例如等待按钮变为可用(isEnabled == true)。
  • 网络请求延迟:等待加载指示器消失后再验证数据。
  • 动画处理:等待目标视图出现,必要时才额外等待动画稳定。

可访问性优先

技能强调使用 accessibility identifier 而非硬编码文本标签,因为标识符不随本地化变化,且在 UI 更新中保持稳定。示例包括 SwiftUI 的 .accessibilityIdentifier("submitButton") 与 UIKit 的 button.accessibilityIdentifier = "submitButton"。对于动态内容,建议使用实例化标识符(如 landmark-\(landmark.id))。

快速决策树

技能给出排查路径:元素未找到时使用 waitForExistence;本地通过但 CI 失败时用条件轮询替换 sleep;动画导致问题时等待动画完成而非禁用动画;网络请求时序问题使用 XCTestExpectation 或 waitForExistence。

Recording UI Automation(Xcode 26 新增)

分为三个阶段:

  • 录制:将点击、滑动、硬件按钮等交互捕获为 Swift 代码。
  • 回放:跨多设备、语言、地区、方向运行。
  • 回看:观看视频录制、分析失败、查看 UI 元素叠加层。

支持平台包括 iOS、iPadOS、macOS、watchOS、tvOS 以及 Designed for iPad 的 visionOS。

高级自动化 API

技能覆盖设备状态设置(方向、外观模式、模拟位置)、启动参数与环境变量、自定义 URL Scheme 打开应用、在测试中执行可访问性审计(performAccessibilityAudit),以及使用 Test Plans 管理多语言、多地区配置和截图/视频捕获设置。

使用方式

  1. 为所有交互元素添加 accessibility identifier,避免硬编码标签。
  2. 在 Xcode 中创建 UI Testing Bundle 目标。
  3. 使用 Xcode 26 的“Start Recording”按钮录制交互,生成 Swift 测试代码。
  4. 录制后审查每行查询,优先选择最短、最稳定的查询方式(标识符优先)。
  5. 添加断言:使用 waitForExistence、wait(for:toEqual:timeout:) 等验证预期行为。
  6. 在本地运行测试 10 次以捕获不稳定性,并在最慢的支持设备和 CI 环境中运行。
  7. 使用 Test Plans 配置多语言、多地区、外观模式等测试矩阵。

适用场景

  • 编写新的 UI 测试。
  • 录制交互并生成测试代码。
  • 排查测试中的竞态条件、时序依赖和不一致通过/失败行为。
  • 将 XCTest UI 测试迁移到更可靠的等待模式。
  • 跨设备、跨语言、跨地区的 UI 测试。
  • 通过视频回看调试失败的 UI 测试。

限制

  • 技能内容主要面向 Apple 平台(iOS、iPadOS、macOS、watchOS、tvOS、visionOS)与 Xcode 工具链。
  • Recording UI Automation 需要 Xcode 26。
  • UI 自动化独立于应用运行,无法直接访问应用模型或数据。
  • 技能未提供具体的收费、价格或平台授权信息。
  • 技能未提供安装命令或包管理信息。