ios – 无法设置UISegmentedControl段的accessibilityIdentifier

我发现,即使我可以设置UISegmentedControl的段的accessibilityLabel(参见: How do I set the accesibility label for a particular segment of a UISegmentedControl?),我也无法设置accessibilityIdentifier,这对我的项目同样重要.出于自动化目的,我需要针对一个段而不管其文本和accessibilityLabel.

例如,代码

Nsstring *name = [Nsstring stringWithFormat:@"Item %li",(long)idx];
segment.accessibilityIdentifier = name;
NSLog(@"ID: %@",segment.accessibilityIdentifier);

结果是:

ID: (null)

没有异常被抛出.

有没有人深入了解为什么要实现accessibilityLabel,而不是accessibilityIdentifier?

解决方法

我通过为XCUIElement编写Swift扩展来解决这个问题,该扩展添加一个方法tap(at:UInt).此方法获取元素的按钮查询,并根据其x位置对结果进行排序.这允许我们指定我们想要点击的UISegmentedControl的哪个段而不是依赖于按钮文本.
extension XCUIElement {
    func tap(at index: UInt) {
        guard buttons.count > 0 else { return }
        var segments = (0..<buttons.count).map { buttons.element(boundBy: $0) }
        segments.sort { $0.0.frame.origin.x < $0.1.frame.origin.x }
        segments[Int(index)].tap()
    }
}

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...