我一直在浏览我们的代码库并在我们所有的按钮和文本字段上设置 accessIdentifier 属性,以便我可以使用 UIAutomation 访问它们。在执行此操作时,我遇到了一些已经存在的代码。
[_goodButton setAccessibilityLabel:@"off"];
我找不到任何关于这两种方法之间差异的文档。看起来他们做同样的事情。有人知道吗?我发现这个标签也设置为“关闭”很奇怪。
我一直在浏览我们的代码库并在我们所有的按钮和文本字段上设置 accessIdentifier 属性,以便我可以使用 UIAutomation 访问它们。在执行此操作时,我遇到了一些已经存在的代码。
[_goodButton setAccessibilityLabel:@"off"];
我找不到任何关于这两种方法之间差异的文档。看起来他们做同样的事情。有人知道吗?我发现这个标签也设置为“关闭”很奇怪。
这两个属性肯定存在一些混淆。我自己也落入了同样的陷阱,但对 VoiceOver 和 UI 自动化测试的研究和实验表明存在明显差异。
accessibilityLabel
这是 VoiceOver 向最终用户读取的值,或通过其他辅助工具公开的值。因此,这应该是一个本地化的字符串。如果可能的话,最好用一个词来描述它是什么(例如“Help”、“Play”、“New Note”等)。它也应该大写,但不能以句号结尾。这有助于 VoiceOver 的发音。
因为这是面向最终用户的,作为用户测试的一部分,开发人员可以根据需要将其更改为更清晰。例如,它可能从“播放”变为“阅读评论”。因此,您不希望这与自动化测试相关联,因为这样的更改会破坏任何引用现在不存在的“播放”标签的测试。这就是accessibilityIdentifier
进来的地方。
可访问性标识符
虽然accessibilityLabel
是面向最终用户的,但accessibilityIdentifier
相比之下仅面向开发人员,主要用于识别 UI 自动化和测试工具的可访问元素。因此,它不应该被本地化。
开发人员应该使用仅在 UI 测试上下文中有意义的值,而不是对最终用户有意义。例如,显示帮助主题的按钮可以具有标识符“HelpButton”,因为这很清楚它所标识的内容,但最终用户不需要接触。
养成使用这个值的习惯!这样做可确保您的 UI 自动化测试不会因本地化或对
accessibilityLabel
.
可访问性提示(包括完整性)
accessibilityHint
适用accessibilityLabel
于其本身可能不够清晰的情况。因为accessibilityLabel
如果可能的话,应该保留一个单词,accessibilityHint
可以提供额外的上下文。但是,如果accessibilityLabel
它本身就足够具有表现力,则应accessibilityHint
留空。
如果确定这accessibilityHint
是必需的,请将其保留为简单的短句片段,大写并以句号结尾。它应该描述它的作用,而不是告诉你要做什么(即“播放当前曲目。”而不是“播放当前曲目。”因为后者听起来像是对你的指示,而不是它的作用。)
这是如何使用的,VoiceOver 将首先读取标签,短暂暂停,然后读取提示(例如“播放...播放当前曲目。”如果用户禁用提示,它当然只会说“播放”)
希望有帮助!
而不是使用accessibilityLabel
(见下文),你应该使用accessibilityIdentifier
.
这个github 问题解释了差异:
鉴于accessibilityLabel 是一个面向外部的字符串,实际上由可访问性屏幕阅读器使用(并且应该本地化为设备用户的语言),Apple 现在提供了一个替代属性(iOS 5+),专门用于 UI 自动化目的
你检查这个
可访问性标签和标识符属性 标签属性和标识符属性在您的脚本访问 UI 元素的能力中占有重要地位。了解它们的使用方式很重要。
为标签属性设置一个有意义的值是可选的,但建议使用。您可以在 Interface Builder 中身份检查器的 Accessibility 部分的 Label 文本字段中设置和查看标签字符串。这个标签应该是描述性的,但很短,部分原因是 Apple 的 VoiceOver 等辅助技术使用它作为相关 UI 元素的名称。在 UI 自动化中,此标签由 label 方法返回。如果未设置标识符属性,则 name 方法也将其作为默认值返回。有关详细信息,请参阅 UIAccessibilityElement 类参考。
identifier 属性允许您为元素使用更具描述性的名称。它是可选的,但必须为脚本设置它才能执行以下两个操作之一:
按名称访问容器视图,同时还能够访问其子视图。按名称访问 UILabel 视图以获取其显示的文本(通过其 value 属性)。在 UI 自动化中,name 方法返回此标识符属性的值(如果已设置)。如果未设置,则 name 方法返回标签属性的值。
目前,您只能通过accessibilityIdentifier 属性以编程方式设置标识符属性的值。有关详细信息,请参阅 UIAccessibilityIdentification 协议参考。
AccessibilityLabel 是 VoiceOver 向最终用户读取的值。因此,这应该是一个本地化的字符串。文本也应该大写。因为这有助于 VoiceOver 的发音。 可访问性标签用于测试和视障用户。
AccessibilityIdentifier 通过可访问性标识元素,但与accessibilityLabel 不同,accessibilityIdentifier 的目的纯粹是用作UI 自动化测试的标识符。我们使用一个值来测试过程。