ios中setAccessibilityLabel和accessibilityIdentifier之间有什么区别?

时间:2014-01-16 03:15:12

标签: ios ios-ui-automation uiaccessibility

我一直在浏览我们的代码库并在所有按钮和文本字段上设置accessibilityIdentifier属性,以便我可以使用UIAutomation访问它们。在这样做时,我遇到了一些已经存在的代码。

[_goodButton setAccessibilityLabel:@"off"];

我找不到有关这两种方法之间差异的文档。看起来他们做同样的事情。有人知道吗?我觉得这个标签也被设置为“关闭”。

4 个答案:

答案 0 :(得分:59)

这两个属性肯定存在一些混淆。我自己陷入了同样的陷阱,但VoiceOver和UI自动化测试的研究和实验表明存在明显的差异。

<强> accessibilityLabel
这是VoiceOver为最终用户读取的值,或通过其他辅助功能工具公开的值。因此,这应该是一个本地化的字符串。如果可能的话,最好将它保持为一个单词,描述它是什么(即“帮助”,“播放”,“新笔记”等)。它也应该大写,但不能在一段时间内结束。这有助于VoiceOver的发音。

因为这是面向最终用户的,所以作为用户测试的一部分,开发人员可以根据需要更改这一点。例如,它可能会从“播放”更改为“阅读评论”。因此,您不希望这与自动化测试相关联,因为这样的更改会破坏任何涉及现在不存在的“Play”标签的测试。这就是accessibilityIdentifier的用武之地。

<强> accessibilityIdentifier
虽然accessibilityLabel面向最终用户,但accessibilityIdentifier仅面向开发人员,主要用于标识UI自动化和测试工具的可访问元素。因此,它不应该是本地化的。

开发人员应该使用仅在UI测试环境中有意义的值,而不是最终用户。例如,显示帮助主题的按钮可以具有标识符“HelpButton”,因为它清楚地标识了它,但不是最终用户需要暴露的内容。

  

养成使用此值的习惯!这样做可确保您的UI自动化测试不会因本地化或更改accessibilityLabel而中断。

accessibilityHint (包括完整性)
accessibilityHint适用于accessibilityLabel可能不够清晰的情况。由于accessibilityLabel应尽可能保留为一个单词,accessibilityHint可以提供额外的上下文。但是,如果accessibilityLabel本身足够表达,则应将accessibilityHint留空。

如果确定需要accessibilityHint,请将其保留为一个简单的短句片段,大写并以句点结尾。它应该描述它的作用,而不是告诉你该做什么(即'播放当前曲目'而不是'播放当前曲目'。因为后者听起来像是对你的指示,而不是它的作用。)

希望有所帮助!

答案 1 :(得分:32)

您应该使用accessibilityIdentifier

,而不是使用accessibilityLabel(见下文)

github issue解释了差异:

  

鉴于accessibilityLabel是一个面向外部的字符串,实际上是由辅助功能屏幕阅读器使用的(并且应该本地化为设备用户的语言),Apple现在提供了一个特别用于的替代属性(iOS 5+)用于UI自动化目的

答案 2 :(得分:4)

你检查一下

辅助功能标签和标识符属性 标签属性和标识符属性突出显示在脚本访问UI元素的能力中。了解它们的使用方式非常重要。

为label属性设置有意义的值是可选的,但建议使用。您可以在Interface Builder中Identity检查器的“辅助功能”部分的“标签”文本字段中设置和查看标签字符串。该标签预计是描述性的,但很短,部分原因是Apple的VoiceOver等辅助技术将其用作相关UI元素的名称。在UI自动化中,标签方法返回此标签。如果未设置标识符属性,则name方法也会返回它作为默认值。有关详细信息,请参阅UIAccessibilityElement类参考。

identifier属性允许您为元素使用更具描述性的名称。它是可选的,但必须设置脚本才能执行以下两种操作之一:

按名称访问容器视图,同时还能访问其子容器。 按名称访问UILabel视图以获取其显示的文本(通过其value属性)。 在UI自动化中,name方法返回此标识符属性的值(如果已设置)。如果未设置,则name方法返回label属性的值。

目前,您只能通过accessibilityIdentifier属性以编程方式为identifier属性设置值。有关详细信息,请参阅UIAccessibilityIdentification Protocol Reference。

答案 3 :(得分:0)

AccessibilityLabel 是VoiceOver为最终用户读取的值。因此,这应该是一个本地化的字符串。案文也应大写。因为这有助于VoiceOver的发音。 accessibilityLabel用于测试和视障用户。

AccessibilityIdentifier 通过辅助功能识别元素,但与accessibilityLabel不同,accessibilityIdentifier的用途纯粹是用作UI自动化测试的标识符。 我们使用测试流程的值