如何在XCTestCase中修改iOS辅助功能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
相关产品推荐
相关产品推荐

