【问题标题】:iOS development -- check that all UI objects have accessibility label/identifier?iOS 开发——检查所有 UI 对象是否具有可访问性标签/标识符?
【发布时间】:2016-04-02 10:17:14
【问题描述】:

我正在使用 XCode 构建一个 iOS 应用程序。我目前正在使用去年添加的framework 定义 UI 测试。在一个示例测试中,我有:

XCUIApplication().segmentedControls["genderSegmentedControl"].buttons["Girl"];

字符串“genderSegementedControl”是我在其对应的视图控制器中定义的可访问性标签:

genderSegmentedControl.accessibilityLabel = "genderSegmentedControl";

我的问题是,我有什么办法可以编写一个脚本来检查我的所有 UI 对象并验证它们是否分配了可访问性标签?我似乎无法在 Xcode 中找到我可以查看我正在使用的故事板的内部结构。如果我可以获取所有对象的数组,并遍历该数组并断言 .accessibilityLabel 或 .accessibilityIdentifier 属性不为零,我会很高兴。

我想要这个,以便我可以验证我实际上已经在测试中包含了我的所有 UI 组件。 (如果你愿意的话,某种代码覆盖率。)

【问题讨论】:

标签: ios xcode swift


【解决方案1】:

您所说的 UI 对象可能是指子视图,因为可以放置在 Storyboard 中的每个可见元素都是 UIView 的子类。

在这种情况下,您想要获取 ViewController 的 View 的 subviews。但是,这样做只会返回第一级 UIView,而不是嵌套的。因此,正如this answer 建议的那样,您应该使用递归算法。

此函数应递归循环遍历作为编写此代码的 ViewController 后代的每个 UIView:

func checkSubviews(view: UIView) -> Bool {
    if view.accessibilityLabel == nil && view.accessibilityIdentifier == nil {
        return false
    }
    for subview in view.subviews {
        if !checkSubviews(view) {
            return false
        }
    }
    return true
}

如果有任何 UIView(包括视图控制器的视图本身)缺少 accessibilityLabelaccessibilityIdentifier,现在调用以下函数应该返回 false:

checkSubviews(self.view)

【讨论】:

    猜你喜欢
    • 2019-05-25
    • 1970-01-01
    • 2019-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多