从 UITests 执行 UIAccessibilityCustomAction
Performing UIAccessibilityCustomAction from UITests
我有一个 UIView 的子类,假设它是 class DemoView: UIView { }
,其中包含 UILabel 和 UIButton。我需要对其进行分组并添加 UIAccessibilityCustomAction,因此我覆盖了 var accessibilityElements: [Any]?
并使用联合来连接两个元素。我还将 "Users" 字符串分配给 accessibilityLabel
.
从用户的角度来看,这正常工作,VoiceOver 读取 Users
,然后用户可以 select 自定义操作,名为 Edit
。
问题是我不知道如何从 UITests 触发这个自定义操作。我知道 XCUIElement
包含 UICustomActions
的数组,我可以得到它的 select 或者但是然后呢?
目前 iOS13 和 Xcode 11.
无法实现您想要达到的目的
UI测试框架不像单元测试那样访问应用程序代码:您无法获得执行选择器的实例 + 在 UI 中自定义操作数组为 nil测试 ⇒ 每个 自定义操作都无法访问,然后根本无法触发 。
XCUITEST 的工作得益于像 accessibilityIdentifier
这样的可访问性属性,但绝对不是为了简单地为 VoiceOver 工作而设计的 (在我看来不可思议和难以理解).
我希望在下一届 WWDC 期间引入一些新的 UI 测试,以进行真正的可访问性测试。
我在 WWDC19 辅助功能和测试实验室期间与 Apple 工程师交谈过,他们说现在不可能。测试期间无法访问的原因是出于安全考虑。他们还说他们不使用 UITests 来测试 UIAccessibility 并且在创建可访问性元素时支持两种情况 - 有 UITests 运行 和没有。
我建议使用 Feedback Assistant 提出建议。
对于其他坚持这一点的人,如果您直接参考了所讨论的 UIView
,我(好吧,我的一个同事)发现以下 'hack' 非常有效嗯
let view: UIView = YourViewWithCustomAction()
let customActionName: String = "<Your custom action name here>"
let action: UIAccessibilityCustomAction = view.accessibilityCustomActions!.first(where: { [=10=].name == customActionName })!
_ = action.target!.perform(action.selector, with: action)
作为免责声明,这可能仅在您具有实现其自己的 override var accessibilityElements
.
的自定义 UIView
子类时才有效
我有一个 UIView 的子类,假设它是 class DemoView: UIView { }
,其中包含 UILabel 和 UIButton。我需要对其进行分组并添加 UIAccessibilityCustomAction,因此我覆盖了 var accessibilityElements: [Any]?
并使用联合来连接两个元素。我还将 "Users" 字符串分配给 accessibilityLabel
.
从用户的角度来看,这正常工作,VoiceOver 读取 Users
,然后用户可以 select 自定义操作,名为 Edit
。
问题是我不知道如何从 UITests 触发这个自定义操作。我知道 XCUIElement
包含 UICustomActions
的数组,我可以得到它的 select 或者但是然后呢?
目前 iOS13 和 Xcode 11.
无法实现您想要达到的目的UI测试框架不像单元测试那样访问应用程序代码:您无法获得执行选择器的实例 + 在 UI 中自定义操作数组为 nil测试 ⇒ 每个 自定义操作都无法访问,然后根本无法触发 。
XCUITEST 的工作得益于像 accessibilityIdentifier
这样的可访问性属性,但绝对不是为了简单地为 VoiceOver 工作而设计的 (在我看来不可思议和难以理解).
我希望在下一届 WWDC 期间引入一些新的 UI 测试,以进行真正的可访问性测试。
我在 WWDC19 辅助功能和测试实验室期间与 Apple 工程师交谈过,他们说现在不可能。测试期间无法访问的原因是出于安全考虑。他们还说他们不使用 UITests 来测试 UIAccessibility 并且在创建可访问性元素时支持两种情况 - 有 UITests 运行 和没有。
我建议使用 Feedback Assistant 提出建议。
对于其他坚持这一点的人,如果您直接参考了所讨论的 UIView
,我(好吧,我的一个同事)发现以下 'hack' 非常有效嗯
let view: UIView = YourViewWithCustomAction()
let customActionName: String = "<Your custom action name here>"
let action: UIAccessibilityCustomAction = view.accessibilityCustomActions!.first(where: { [=10=].name == customActionName })!
_ = action.target!.perform(action.selector, with: action)
作为免责声明,这可能仅在您具有实现其自己的 override var accessibilityElements
.
UIView
子类时才有效