You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在XCTest UI测试中设置Reduce Motion等辅助功能选项?

在XCTest UI测试中设置辅助功能选项(以Reduce Motion为例)

在XCTest UI测试中,我希望通过编程方式设置通常在Settings.app中配置的辅助功能选项,以Reduce Motion为例。目前可通过以下方式查询该设置:

// UIKit
if UIAccessibility.isReduceMotionEnabled {
    …
}

// SwiftUI
@Environment(\.accessibilityReduceMotion) private var reduceMotion

但这些均为只读属性,且我未在XCUIApplication中找到可设置这些辅助功能标记的API。请问是否遗漏了可用API?还是需要在测试中启动Settings.app并导航到Reduce Motion开关进行设置?

核心结论

没有公开的XCUI API可以直接设置系统辅助功能选项,目前官方推荐的可行方案是通过UI测试流程操作Settings.app来完成设置。

方案一:通过UI测试操作Settings.app(官方合规)

这是最稳妥的方式,模拟用户真实操作路径修改设置,不会违反App Store审核规则。以下是实现Reduce Motion开关切换的示例代码:

func testToggleReduceMotion() {
    // 启动设置APP
    let settingsApp = XCUIApplication(bundleIdentifier: "com.apple.Preferences")
    settingsApp.launch()
    
    // 导航到辅助功能页面(适配iOS 15+,不同版本路径可能需要调整)
    settingsApp.tables.cells["辅助功能"].tap()
    settingsApp.tables.cells["动态效果"].tap()
    
    // 切换Reduce Motion开关
    let reduceMotionSwitch = settingsApp.switches["减弱动态效果"]
    reduceMotionSwitch.tap()
    
    // 回到被测APP继续测试
    let testApp = XCUIApplication(bundleIdentifier: "你的APP Bundle ID")
    testApp.activate()
}

注意事项:

  • 不同iOS版本的设置页面文字或层级可能有差异,需要根据测试目标系统版本调整元素定位
  • 测试完成后建议还原设置状态,避免影响后续测试用例的执行环境

方案二:使用私有API(仅内部测试用,不推荐)

存在一些未公开的私有API可以直接修改辅助功能设置,但使用这些API会导致APP被App Store拒绝,仅适合内部测试场景。示例代码(非公开API,随时可能失效):

// 私有方法,仅作示例,请勿在上线代码中使用
UIAccessibility.setValue(true, forKey: "isReduceMotionEnabled")

这种方式虽然便捷,但风险极高,苹果随时可能修改或禁用这些私有接口,不建议在正式测试流程中使用。

内容的提问来源于stack exchange,提问作者Daniel Seither

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 20:33:16