我已经检查了我们的代码库,并在所有按钮和文本字段上设置了accessibilityIdentifier属性,这样我就可以使用UIAutomation访问它们。
[_goodButton setAccessibilityLabel:@"off"];
我找不到任何文档说明这两种方法之间的区别。看起来它们做的是相同的事情。有人知道吗?我发现这个标签也设置为“off”很奇怪。
yc0p9oo01#
关于这两个属性肯定存在一些混淆。我自己也陷入了同样的陷阱,但对VoiceOver和UI自动化测试的研究和实验表明,这两个属性有明显的区别。
辅助功能标签
这是由VoiceOver读取给最终用户的值,或通过其他辅助工具显示的值。因此,这应该是本地化字符串。如果可能,最好将其保留为单个单词,以描述其内容(例如“帮助”、“播放”、“新备忘录”等)。它还应该大写,但不能以句点结尾。这有助于VoiceOver的发音。因为这是面向最终用户的,作为用户测试的一部分,开发人员可以根据需要将其更改为更清晰。例如,它可以从“播放”更改为“阅读评论”。因此,您不希望将其与自动化测试绑定,因为这样的更改会破坏引用现在不存在的“播放”标签的任何测试。这就是accessibilityIdentifier的用武之地。
accessibilityIdentifier
可访问性标识符
accessibilityLabel是面向最终用户的,而accessibilityIdentifier仅面向开发人员,主要用于标识UI自动化和测试工具的可访问元素。因此,它不应该被本地化。开发人员应使用仅在UI测试上下文中有意义的值,而不是对最终用户有意义的值。例如,显示帮助主题的按钮可以具有标识符“HelpButton”,因为它标识的内容很清楚,但最终用户不需要接触它。
accessibilityLabel
accessibilityHint适用于accessibilityLabel本身可能不够清楚的情况。由于accessibilityLabel应尽可能保持为单个单词,因此accessibilityHint可以提供附加上下文。但是,如果accessibilityLabel本身具有足够的表达力,则应将accessibilityHint留空。如果确定需要accessibilityHint,请将其保持为简单、简短的句子片段,大写并以句点结尾。它应该描述它的功能,而不是告诉您要做什么(例如,“播放当前曲目"而不是”播放当前曲目“,因为后者听起来像是告诉您要做什么的指令,而不是让您知道将要发生什么)。其使用方法是,画外音将首先读取标签,短暂停顿,然后读取提示(例如,“播放...播放当前曲目。”如果用户禁用提示,它当然只会说“播放”)希望能有所帮助!
accessibilityHint
6tdlim6h2#
您应该使用accessibilityIdentifier而不是accessibilityLabel(见下文)。github issue解释了其中的区别:
c0vxltue3#
你看看这个标签和标识符属性标签属性和标识符属性在脚本访问UI元素的能力中占有重要地位。了解如何使用它们非常重要。为标签属性设置有意义的值是可选的,但建议您这样做。您可以在界面生成器中的“身份”检查器的“辅助功能”部分的“标签”文本字段中设置和查看标签字符串。此标签应该是描述性的,但要简短,部分原因是辅助技术(如Apple的VoiceOver)将其用作关联UI元素的名称。在UI自动化中,这个标签由label方法返回。2如果没有设置identifier属性,它也会作为默认值由name方法返回。3详细信息,请参见UIAccessibilityElement类参考。identifier属性允许您为元素使用更具描述性的名称。它是可选的,但必须设置它,脚本才能执行以下两个操作之一:按名称访问容器视图,同时还可以访问其子视图。按名称访问UILabel视图以获取其显示的文本(通过其value属性)。在UI自动化中,name方法返回此标识符属性的值(如果设置了该属性)。如果未设置,name方法返回label属性的值。当前,只能通过accessibilityIdentifier属性以编程方式设置identifier特性的值。有关详细信息,请参阅UIAccessibilityIdentification协议参考。
wxclj1h54#
AccessibilityLabel是由VoiceOver读取给最终用户的值。因此,它应该是本地化字符串。文本也应该大写。因为这有助于VoiceOver的发音。accessibilityLabel用于测试和视障用户。AccessibilityIdentifier通过可访问性标识元素,但与accessibilityLabel不同,accessibilityIdentifier的目的纯粹是用作UI自动化测试的标识符。我们使用测试过程的值。
4条答案
按热度按时间yc0p9oo01#
关于这两个属性肯定存在一些混淆。我自己也陷入了同样的陷阱,但对VoiceOver和UI自动化测试的研究和实验表明,这两个属性有明显的区别。
辅助功能标签
这是由VoiceOver读取给最终用户的值,或通过其他辅助工具显示的值。因此,这应该是本地化字符串。如果可能,最好将其保留为单个单词,以描述其内容(例如“帮助”、“播放”、“新备忘录”等)。它还应该大写,但不能以句点结尾。这有助于VoiceOver的发音。
因为这是面向最终用户的,作为用户测试的一部分,开发人员可以根据需要将其更改为更清晰。例如,它可以从“播放”更改为“阅读评论”。因此,您不希望将其与自动化测试绑定,因为这样的更改会破坏引用现在不存在的“播放”标签的任何测试。这就是
accessibilityIdentifier
的用武之地。可访问性标识符
accessibilityLabel
是面向最终用户的,而accessibilityIdentifier
仅面向开发人员,主要用于标识UI自动化和测试工具的可访问元素。因此,它不应该被本地化。开发人员应使用仅在UI测试上下文中有意义的值,而不是对最终用户有意义的值。例如,显示帮助主题的按钮可以具有标识符“HelpButton”,因为它标识的内容很清楚,但最终用户不需要接触它。
accessibilityLabel
的更改而中断。可访问性提示(包括完整性)
accessibilityHint
适用于accessibilityLabel
本身可能不够清楚的情况。由于accessibilityLabel
应尽可能保持为单个单词,因此accessibilityHint
可以提供附加上下文。但是,如果accessibilityLabel
本身具有足够的表达力,则应将accessibilityHint
留空。如果确定需要
accessibilityHint
,请将其保持为简单、简短的句子片段,大写并以句点结尾。它应该描述它的功能,而不是告诉您要做什么(例如,“播放当前曲目"而不是”播放当前曲目“,因为后者听起来像是告诉您要做什么的指令,而不是让您知道将要发生什么)。其使用方法是,画外音将首先读取标签,短暂停顿,然后读取提示(例如,“播放...播放当前曲目。”如果用户禁用提示,它当然只会说“播放”)
希望能有所帮助!
6tdlim6h2#
您应该使用
accessibilityIdentifier
而不是accessibilityLabel
(见下文)。github issue解释了其中的区别:
c0vxltue3#
你看看这个
标签和标识符属性标签属性和标识符属性在脚本访问UI元素的能力中占有重要地位。了解如何使用它们非常重要。
为标签属性设置有意义的值是可选的,但建议您这样做。您可以在界面生成器中的“身份”检查器的“辅助功能”部分的“标签”文本字段中设置和查看标签字符串。此标签应该是描述性的,但要简短,部分原因是辅助技术(如Apple的VoiceOver)将其用作关联UI元素的名称。在UI自动化中,这个标签由label方法返回。2如果没有设置identifier属性,它也会作为默认值由name方法返回。3详细信息,请参见UIAccessibilityElement类参考。
identifier属性允许您为元素使用更具描述性的名称。它是可选的,但必须设置它,脚本才能执行以下两个操作之一:
按名称访问容器视图,同时还可以访问其子视图。按名称访问UILabel视图以获取其显示的文本(通过其value属性)。在UI自动化中,name方法返回此标识符属性的值(如果设置了该属性)。如果未设置,name方法返回label属性的值。
当前,只能通过accessibilityIdentifier属性以编程方式设置identifier特性的值。有关详细信息,请参阅UIAccessibilityIdentification协议参考。
wxclj1h54#
AccessibilityLabel是由VoiceOver读取给最终用户的值。因此,它应该是本地化字符串。文本也应该大写。因为这有助于VoiceOver的发音。accessibilityLabel用于测试和视障用户。
AccessibilityIdentifier通过可访问性标识元素,但与accessibilityLabel不同,accessibilityIdentifier的目的纯粹是用作UI自动化测试的标识符。我们使用测试过程的值。