我一直在查看我们的代码库,并在所有按钮和文本字段上设置accessibilityIdentifier属性,以便我可以使用UIAutomation访问它们。 在这样做时,我发现已经存在一些代码。
[_goodButton setAccessibilityLabel:@"off"];
我找不到关于这两种方法的区别的任何文档。看起来它们做的事情是一样的。有人知道吗?我觉得奇怪的是这个标签也被设置为“off”。
我一直在查看我们的代码库,并在所有按钮和文本字段上设置accessibilityIdentifier属性,以便我可以使用UIAutomation访问它们。 在这样做时,我发现已经存在一些代码。
[_goodButton setAccessibilityLabel:@"off"];
我找不到关于这两种方法的区别的任何文档。看起来它们做的事情是一样的。有人知道吗?我觉得奇怪的是这个标签也被设置为“off”。
accessibilityLabel
这是由VoiceOver读取给最终用户或通过其他可访问性工具公开的值。因此,这应该是本地化字符串。最好将其保留为单个单词,如果可能的话,描述它是什么(例如,“帮助”,“播放”,“新注释”等)。它还应以大写字母开头,但不要以句点结尾。这有助于VoiceOver发音的清晰。
由于这是面向最终用户的,作为用户测试的一部分,开发人员可能需要根据需要更改此值以使其更清晰。例如,它可能会从“播放”更改为“读取评论”。因此,您不希望将其与自动化测试绑定在一起,因为这样的更改将破坏任何引用现在不存在的“播放”标签的测试。这就是accessibilityIdentifier
起作用的地方。
accessibilityIdentifier
虽然accessibilityLabel
面向最终用户,但accessibilityIdentifier
则面向开发人员,主要用于识别可访问元素以进行UI自动化和测试工具。因此,它不应本地化。
开发人员应该使用在UI测试上下文中有意义的值,而不是针对最终用户的值。例如,显示帮助主题的按钮可以具有标识符“HelpButton”,因为这清楚地说明了其所标识的内容,但不是最终用户需要接触到的内容。
养成使用此值的习惯!这样做可以确保您的UI自动化测试永远不会由于本地化或更改
accessibilityLabel
而中断。
accessibilityHint(包括完整性)
此属性提供给终端用户一个关于控件预期操作或行为的简短附加信息。它通常是一个短语,描述该控件的作用(例如,“按两次快门以拍摄照片”)。与accessibilityLabel
不同,此属性是可选的。如果存在,则应本地化,并遵循适当的大小写和标点符号约定。
accessibilityHint
用于在accessibilityLabel
本身不够清晰的情况下提供额外上下文。由于accessibilityLabel
应该尽可能保持一个单词,因此accessibilityHint
可以提供附加的上下文信息。然而,如果accessibilityLabel
本身已经足够表达,您应该将accessibilityHint
留空。
如果确定需要使用accessibilityHint
,请将其简化为一个短句片段,首字母大写并以句号结尾。它应该描述它所做的事情,而不是告诉您该怎么做(例如,“Plays the current track.”而不是“Play the current track.”,因为后者听起来像是一条指令,而不是告诉您会发生什么)
VoiceOver在阅读标签后暂停一小段时间,然后读取提示(例如“Play... Plays the current track.”)。如果用户禁用提示,当然只会说“Play”。
希望这有所帮助!
使用 accessibilityIdentifier
替代 accessibilityLabel
(请参见下面)。
这个 github 问题 解释了它们之间的区别:
考虑到 accessibilityLabel 是一个向外展示的字符串,实际上被无障碍屏幕阅读器使用(并且应该翻译为设备用户的语言),Apple 现在提供了一种专门用于 UI 自动化目的的备选属性(iOS 5+)
目前,你只能通过编程方式设置标识属性的值,通过 accessibilityIdentifier 属性。有关详情,请参阅 UIAccessibilityIdentification Protocol Reference。