ios中的setAccessibilityLabel和accessibilityIdentifier有什么区别?

ltqd579y  于 2022-12-27  发布在  iOS
关注(0)|答案(4)|浏览(221)

我已经检查了我们的代码库,并在所有按钮和文本字段上设置了accessibilityIdentifier属性,这样我就可以使用UIAutomation访问它们。

[_goodButton setAccessibilityLabel:@"off"];

我找不到任何文档说明这两种方法之间的区别。看起来它们做的是相同的事情。有人知道吗?我发现这个标签也设置为“off”很奇怪。

yc0p9oo0

yc0p9oo01#

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

辅助功能标签

这是由VoiceOver读取给最终用户的值,或通过其他辅助工具显示的值。因此,这应该是本地化字符串。如果可能,最好将其保留为单个单词,以描述其内容(例如“帮助”、“播放”、“新备忘录”等)。它还应该大写,但不能以句点结尾。这有助于VoiceOver的发音。
因为这是面向最终用户的,作为用户测试的一部分,开发人员可以根据需要将其更改为更清晰。例如,它可以从“播放”更改为“阅读评论”。因此,您不希望将其与自动化测试绑定,因为这样的更改会破坏引用现在不存在的“播放”标签的任何测试。这就是accessibilityIdentifier的用武之地。

可访问性标识符

accessibilityLabel是面向最终用户的,而accessibilityIdentifier仅面向开发人员,主要用于标识UI自动化和测试工具的可访问元素。因此,它不应该被本地化。
开发人员应使用仅在UI测试上下文中有意义的值,而不是对最终用户有意义的值。例如,显示帮助主题的按钮可以具有标识符“HelpButton”,因为它标识的内容很清楚,但最终用户不需要接触它。

  • 养成使用此值的习惯!* 这样做可以确保您的UI自动化测试永远不会因为本地化或accessibilityLabel的更改而中断。
    可访问性提示(包括完整性)

accessibilityHint适用于accessibilityLabel本身可能不够清楚的情况。由于accessibilityLabel应尽可能保持为单个单词,因此accessibilityHint可以提供附加上下文。但是,如果accessibilityLabel本身具有足够的表达力,则应将accessibilityHint留空。
如果确定需要accessibilityHint,请将其保持为简单、简短的句子片段,大写并以句点结尾。它应该描述它的功能,而不是告诉您要做什么(例如,“播放当前曲目"而不是”播放当前曲目“,因为后者听起来像是告诉您要做什么的指令,而不是让您知道将要发生什么)。
其使用方法是,画外音将首先读取标签,短暂停顿,然后读取提示(例如,“播放...播放当前曲目。”如果用户禁用提示,它当然只会说“播放”)
希望能有所帮助!

6tdlim6h

6tdlim6h2#

您应该使用accessibilityIdentifier而不是accessibilityLabel(见下文)。
github issue解释了其中的区别:

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

c0vxltue3#

你看看这个
标签和标识符属性标签属性和标识符属性在脚本访问UI元素的能力中占有重要地位。了解如何使用它们非常重要。
为标签属性设置有意义的值是可选的,但建议您这样做。您可以在界面生成器中的“身份”检查器的“辅助功能”部分的“标签”文本字段中设置和查看标签字符串。此标签应该是描述性的,但要简短,部分原因是辅助技术(如Apple的VoiceOver)将其用作关联UI元素的名称。在UI自动化中,这个标签由label方法返回。2如果没有设置identifier属性,它也会作为默认值由name方法返回。3详细信息,请参见UIAccessibilityElement类参考。
identifier属性允许您为元素使用更具描述性的名称。它是可选的,但必须设置它,脚本才能执行以下两个操作之一:
按名称访问容器视图,同时还可以访问其子视图。按名称访问UILabel视图以获取其显示的文本(通过其value属性)。在UI自动化中,name方法返回此标识符属性的值(如果设置了该属性)。如果未设置,name方法返回label属性的值。
当前,只能通过accessibilityIdentifier属性以编程方式设置identifier特性的值。有关详细信息,请参阅UIAccessibilityIdentification协议参考。

wxclj1h5

wxclj1h54#

AccessibilityLabel是由VoiceOver读取给最终用户的值。因此,它应该是本地化字符串。文本也应该大写。因为这有助于VoiceOver的发音。accessibilityLabel用于测试和视障用户。
AccessibilityIdentifier通过可访问性标识元素,但与accessibilityLabel不同,accessibilityIdentifier的目的纯粹是用作UI自动化测试的标识符。我们使用测试过程的值

相关问题