iOS UI Testing无法识别自定义AlertBar内UILabel问题咨询
问题根因
你为AlertBar父视图设置了isAccessibilityElement = true,当该属性为true时,系统会将父视图视作单个独立的可访问性元素,自动屏蔽所有内部子视图的可访问性,因此即使单独给UILabel配置了标识,也无法被XCTest识别。
解决方案
按以下规则修正自定义UIView类中的可访问性配置即可:
- 父视图
isAccessibilityElement必须设为false,确保系统可以遍历到其内部子元素 - 若需要限制仅暴露指定子元素,可保留
accessibilityElements配置,将需要暴露的子元素按顺序加入数组 - 保持子元素的
isAccessibilityElement和accessibilityIdentifier配置
修正后的代码示例:
// 原有代码 accessibilityIdentifier = "AlertBar" // UI测试必填配置 // 修正后的配置 isAccessibilityElement = false // 父视图不作为单个可访问元素 // 按需添加需要暴露的子元素,示例同时包含标签和按钮 accessibilityElements = [messageLabel, closeButton] messageLabel.accessibilityIdentifier = "AlertBarMessage" messageLabel.isAccessibilityElement = true // 若按钮也需要UI测试识别,补充对应配置 closeButton.accessibilityIdentifier = "AlertBarCloseButton" closeButton.isAccessibilityElement = true
验证方法
配置完成后可使用Xcode自带的Accessibility Inspector选中运行中的应用,点击AlertBar区域即可查看内部的UILabel和按钮元素,确认元素可被识别后,即可在UI测试中通过app.staticTexts["AlertBarMessage"]正常获取到目标标签。
内容的提问来源于stack exchange,提问作者drekka
相关产品推荐
相关产品推荐

