Подтвердить что ты не робот

Какая разница между setAccessibilityLabel и accessibilityIdentifier в ios?

Я просматривал нашу базу кода и устанавливал свойство accessibilityIdentifier для всех наших кнопок и текстовых полей, чтобы я мог получить к ним доступ с помощью UIAutomation. Выполняя это, я натолкнулся на код, который уже был на месте.

[_goodButton setAccessibilityLabel:@"off"];

Я не могу найти документацию о различиях между этими двумя методами. Похоже, они делают то же самое. Кто-нибудь знает? Мне показалось, что этот ярлык тоже установлен на "выключен".

4b9b3361

Ответ 1

Вместо использования accessibilityLabel (см. ниже) вы должны использовать accessibilityIdentifier.

Эта проблема github объясняет разницу:

Учитывая, что accessibilityLabel - это внешняя строка, которая фактически используется читателями экрана доступности (и должна быть локализована на языке пользователя устройства), Apple теперь предоставляет альтернативное свойство (iOS 5+), специально предназначенное для автоматизации пользовательского интерфейса цели

Ответ 2

Там определенно некоторая путаница в этих двух свойствах. Я сам попал в ту же самую ловушку, но исследования и эксперименты с VoiceOver и тестированием UI Automation показали, что есть явная разница.

accessibilityLabel
Это значение, которое VoiceOver читает для конечного пользователя или предоставляет другие инструменты специальных возможностей. Таким образом, это должна быть локализованная строка. Лучше всего по возможности сохранить это слово одним словом, описывающим, что это такое (например, "Справка", "Воспроизвести", "Новая заметка" и т.д.). Оно также должно быть написано заглавными буквами, но не должно заканчиваться точкой. Это помогает с произношением VoiceOver.

Поскольку это касается конечного пользователя, в рамках пользовательского тестирования разработчик может изменить его, чтобы он был более понятным по мере необходимости. Например, он может измениться с "Play" на "Read Comments". Из-за этого вы не хотели бы, чтобы это было связано с автоматизированным тестированием, поскольку такое изменение сломало бы любые тесты, относящиеся к ныне несуществующему лейблу "Play". Вот где приходит accessibilityIdentifier.

accessibilityIdentifier
В то время как accessibilityLabel ориентирован на конечного пользователя, accessibilityIdentifier напротив, предназначен только для разработчиков и в основном используется для идентификации доступного элемента для средств автоматизации и тестирования пользовательского интерфейса. Как таковой, он не должен быть локализован.

Разработчик должен использовать значение, которое имеет смысл только в контексте тестирования пользовательского интерфейса, а не для конечного пользователя. Например, кнопка, которая отображает раздел справки, может иметь идентификатор "HelpButton" как понятный для того, что она идентифицирует, но это не то, что конечному пользователю когда-либо нужно было бы подвергаться.

Сделайте это привычкой использовать это значение! Это гарантирует, что ваши тесты автоматизации пользовательского интерфейса никогда не сломаются из-за локализации или из-за изменений в accessibilityLabel.

accessibilityHint (в том числе для полноты)
accessibilityHint предназначен для случаев, когда accessibilityLabel сама по себе может быть недостаточно ясной. Поскольку accessibilityLabel следует, если возможно, хранить в одном слове, accessibilityHint может предоставить дополнительный контекст. Однако если accessibilityLabel сама по себе достаточно выразительна, оставьте accessibilityHint пустым.

Если определено, что accessibilityHint требуется, оставьте это простым фрагментом короткого предложения с заглавной буквы и заканчивающимся точкой. Он должен описывать то, что он делает, а не указывать вам, что делать (то есть "Воспроизведение текущего трека" вместо "Воспроизведение текущего трека", поскольку последний звучит для вас как инструкция, а не как он это делает).

Надеюсь, это поможет!

Ответ 3

Вы проверяете этот

Атрибуты метки доступности и идентификатора Атрибут метки и атрибут идентификатора видны в вашей способности script к доступу к элементам пользовательского интерфейса. Важно понимать, как они используются.

Установка значащего значения для атрибута метки необязательна, но рекомендуется. Вы можете установить и просмотреть строку метки в текстовом поле "Ярлык" в разделе "Доступность" инспектора удостоверений в "Интерфейсостроителе". Ожидается, что этот ярлык будет описательным, но коротким, отчасти потому, что вспомогательные технологии, такие как Apples VoiceOver, используют его как имя связанного элемента пользовательского интерфейса. В UI Automation эта метка возвращается методом меток. Он также возвращается методом имени по умолчанию, если атрибут идентификатора не задан. Подробнее см. В описании класса класса UIAccessibilityElement.

Атрибут идентификатора позволяет использовать более описательные имена для элементов. Он не является обязательным, но для script должен быть установлен любой из этих двух операций:

Доступ к представлению контейнера по имени, а также доступ к его дочерним элементам. Доступ к представлению UILabel по имени для получения отображаемого текста (через его атрибут value). В UI Automation метод name возвращает значение этого атрибута идентификатора, если он установлен. Если он не установлен, метод name возвращает значение атрибута метки.

В настоящее время вы можете установить значение атрибута идентификатора только программно, используя свойство accessibilityIdentifier. Для получения дополнительной информации см. Ссылку на протокол UIAccessibilityIdentification Protocol.

Ответ 4

AccessibilityLabel - это значение, которое читает VoiceOver конечному пользователю. Таким образом, это должна быть локализованная строка. Текст также должен быть капитализирован. Потому что это помогает с произношением VoiceOvers. accessibilityLabel используется для тестирования и пользователей с нарушением зрения.

AccessibilityIdentifier идентифицирует элемент через доступность, но, в отличие от accessibilityLabel, цель accessibilityIdentifier используется исключительно для использования в качестве идентификатора для тестов автоматизации пользовательского интерфейса. Мы используем значение для процесса тестирования.