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

如何在XCTestCase中修改iOS辅助功能Button Shapes的启用状态

在XCTestCase中控制Button Shapes辅助功能

直接修改属性(高效推荐方式)

UIAccessibility暴露的buttonShapesEnabled属性支持读写,你可以在测试代码中直接修改它,但必须在主线程操作这类UI相关属性:

func testButtonShapesEnabledScenario() {
    // 开启Button Shapes功能
    DispatchQueue.main.async {
        UIAccessibility.buttonShapesEnabled = true
        // 等待界面完成刷新(可按需调整超时时间)
        let refreshExpectation = self.expectation(description: "等待界面更新")
        DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
            refreshExpectation.fulfill()
        }
        self.waitForExpectations(timeout: 1)
        
        // 执行截图、UI校验等测试操作
        // 示例:let screenshot = XCUIScreen.main.screenshot()
    }
    
    // 测试结束后恢复默认状态,避免影响其他用例
    addTeardownBlock {
        DispatchQueue.main.async {
            UIAccessibility.buttonShapesEnabled = false
        }
    }
}

模拟用户操作(真实场景测试)

如果需要还原用户手动在设置中开关的流程,可以用XCUITest的UI交互方式:

func testToggleButtonShapesViaSettings() {
    let testApp = XCUIApplication()
    testApp.launch()
    
    // 返回主屏幕并打开设置应用
    XCUIDevice.shared.press(.home)
    let settingsApp = XCUIApplication(bundleIdentifier: "com.apple.Preferences")
    settingsApp.launch()
    
    // 导航到按钮形状设置项并切换状态
    settingsApp.tables.cells["辅助功能"].tap()
    settingsApp.tables.cells["按钮形状"].tap()
    settingsApp.switches["按钮形状"].tap()
    
    // 返回测试应用继续执行测试逻辑
    testApp.activate()
    
    // 后续测试操作
}

关键注意事项

  • 直接修改属性时必须在主线程执行,否则属性变更可能不生效。
  • 使用addTeardownBlock恢复属性默认值,保证测试用例的独立性。
  • 界面刷新需要短暂等待,可通过XCTest的期望API实现同步。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 12:45:44