我有UIView的子类,假设它是class DemoView: UIView { }
,其中包含UILabel和UIButton。我需要对其进行分组并添加UIAccessibilityCustomAction,因此我已经覆盖了var accessibilityElements: [Any]?
并使用并集连接了这两个元素。我还为“ accessibilityLabel
”分配了“用户”字符串。
从用户的角度来看,这应该可以正常工作,VoiceOver会读取Users
,然后用户可以选择名为Edit
的自定义操作。
问题是我不知道如何从UITests触发此自定义操作。我知道XCUIElement
包含UICustomActions
的数组,我可以得到它的选择器,但是那又是什么呢?
答案 0 :(得分:1)
在WWDC19辅助功能和测试实验室期间,我与Apple工程师进行了交谈,他们说现在不可能。在测试期间无法访问的原因是出于安全考虑。他们还说,他们没有使用UITests来测试UIAccessibility,并且在创建可访问性元素时支持两种情况-当运行和不运行UITest时。
我建议使用Feedback Assistant提出建议。
答案 1 :(得分:0)
iOS 12和Xcode 10当前无法达到的目标。
UITesting框架无法像单元测试那样访问应用程序代码:在UITest中,您无法获取实例来执行选择器+自定义操作的数组为⇒⇒每个自定义操作都无法实现然后根本无法被解雇。
XCUITEST的工作归功于accessibilityIdentifier
之类的可访问性属性,但并不是绝对适合于VoiceOver (在我看来这是难以理解和难以理解的)。
我希望在下一次WWDC上对UI进行一些新的测试,以进行REAL可访问性测试。
答案 2 :(得分:0)
对于坚持这一点的其他人,如果您直接引用了有问题的 UIView
,我(好吧,我的一位同事)发现以下“黑客”工作得很好。>
let view: UIView = YourViewWithCustomAction()
let customActionName: String = "<Your custom action name here>"
let action: UIAccessibilityCustomAction = view.accessibilityCustomActions!.first(where: { $0.name == customActionName })!
_ = action.target!.perform(action.selector, with: action)
作为免责声明,这可能仅在您拥有实现其自己的 UIView
的自定义 override var accessibilityElements
子类时才有效。