ios ios-ui-automation uiaccessibility

¿Cuál es la diferencia entre setAccessibilityLabel y accessibilityIdentifier en ios?



ios-ui-automation uiaccessibility (4)

Definitivamente hay cierta confusión sobre estas dos propiedades. Yo mismo caí en esa misma trampa. Pero la investigación y la experimentación con las pruebas de automatización de VoiceOver y UI mostraron que hay una clara diferencia.

accesibilidad Label
Este es el valor que VoiceOver lee al usuario final. Como tal, esto debería ser una cadena localizada. Lo mejor es mantener esto en una sola palabra, si es posible, describiendo lo que es (es decir, "Ayuda", "Reproducir", "Nueva nota", etc.) También se debe escribir en mayúscula, pero no finalizar en un punto. Esto ayuda con la pronunciación de VoiceOver.

Como se trata de un usuario final, como parte de la prueba del usuario, un desarrollador puede cambiar esto para que sea más claro según sea necesario. Por ejemplo, puede cambiar de ''Reproducir'' a ''Leer comentarios''. Debido a eso, no querrá que esto esté ligado a las pruebas de automatización, ya que un cambio rompería cualquier prueba que se refiriera a la etiqueta "Play", ahora inexistente. Ahí es donde entra accessibilityIdentifier .

accessibilityIdentifier
Al igual que accessibilityLabel , accessibilityIdentifier identifica un elemento a través de la accesibilidad, pero a diferencia del primero, accessibilityIdentifier no está destinado a ser leído por el usuario final y, por lo tanto, nunca se lo localiza. Su propósito es utilizarlo exclusivamente como un identificador para las pruebas de automatización de UI y, como tal, un desarrollador debe usar un valor que tenga sentido para el proceso de prueba. Esto muy bien puede ser el mismo que el valor no localizado en la accessibilityLabel de accessibilityLabel pero no tiene que ser así. Por ejemplo, podría usar nombres como ''HelpButton'', que tiene sentido para la prueba de UI, pero que el usuario final nunca debería ver.

Lo más importante es que, dado que este es un valor separado de accessibilityLabel , el uso de este asegura que las pruebas de automatización de UI nunca se romperán debido a ajustes en el contenido de VoiceOver expuesto por el usuario.

accessibilityHint (incluido para completar)
accessibilityHint es para casos en los que la accessibilityLabel puede no ser lo suficientemente clara por sí misma. Como accessibilityLabel debería, si es posible, mantenerse en una sola palabra, accessibilityHint puede proporcionar un contexto adicional. Sin embargo, si accessibilityLabel es suficientemente expresivo por sí solo, debe dejar accessibilityHint blanco.

Si se determina que se requiere accessibilityHint , consérvelo en un fragmento de frase simple y breve, en mayúscula y finalizando en un punto. Debe describir lo que hace, no decirle qué hacer (es decir, "Reproduce la pista actual" en lugar de "Reproducir la pista actual", ya que esta última le parece una instrucción, no lo que hace).

¡Espero que ayude!

He estado revisando nuestra base de código y estableciendo la propiedad accessibilityIdentifier en todos nuestros botones y campos de texto para poder acceder a ellos usando UIAutomation. Mientras hacía esto, encontré un código que ya estaba en su lugar.

[_goodButton setAccessibilityLabel:@"off"];

No encuentro ninguna documentación sobre las diferencias entre estos dos métodos. Parece que hacen lo mismo. ¿Alguien sabe? Me parece peculiar que esta etiqueta también esté desactivada.


En lugar de usar accessibilityLabel (ver a continuación) debe usar accessibilityIdentifier .

Este problema de github explica la diferencia:

Dado que accessibilityLabel es una cadena orientada hacia el exterior que en realidad utilizan los lectores de pantallas de accesibilidad (y debe estar localizado en el idioma del usuario del dispositivo), Apple ahora proporciona una propiedad alternativa (iOS 5+) específicamente diseñada para automatización de la interfaz de usuario.


Usted verifica esto

Etiqueta de accesibilidad y Atributos de identificación El atributo de etiqueta y el atributo de identificador ocupan un lugar destacado en la capacidad de su secuencia de comandos para acceder a los elementos de la interfaz de usuario. Es importante entender cómo se usan.

Establecer un valor significativo para el atributo de etiqueta es opcional, pero recomendado. Puede configurar y ver la cadena de etiquetas en el campo de texto Etiqueta en la sección Accesibilidad del inspector de identidad en el Creador de interfaces. Se espera que esta etiqueta sea descriptiva, pero corta, en parte porque las tecnologías de asistencia, como VoiceOver de Apple, la utilizan como el nombre del elemento UI asociado. En UI Automation, esta etiqueta es devuelta por el método de etiqueta. También es devuelto por el método de nombre como predeterminado si el atributo identificador no está establecido. Para más detalles, vea UIAccessibilityElement Class Reference.

El atributo identificador le permite usar nombres más descriptivos para los elementos. Es opcional, pero debe configurarse para que el script realice cualquiera de estas dos operaciones:

Accediendo a una vista de contenedor por nombre mientras también puede acceder a sus hijos. Accediendo a una vista de UILabel por nombre para obtener su texto mostrado (a través de su atributo de valor). En UI Automation, el método de nombre devuelve el valor de este atributo de identificador, si se establece uno. Si no está establecido, el método de nombre devuelve el valor del atributo de etiqueta.

Actualmente, puede establecer un valor para el atributo identificador solo mediante programación, a través de la propiedad accessibilityIdentifier. Para obtener más información, consulte la Referencia del protocolo de identificación de UIAccessibility.


AccessibilityLabel es el valor que VoiceOver lee al usuario final. Como tal, esto debería ser una cadena localizada. El texto también debe estar en mayúscula. Porque esto ayuda con la pronunciación de VoiceOver. accessibilityLabel se utiliza para probar y para usuarios con discapacidad visual.

AccessibilityIdentifier identifica un elemento a través de la accesibilidad, pero a diferencia de accessibilityLabel, el propósito de accessibilityIdentifier es puramente ser utilizado como un identificador para las pruebas de automatización de UI. Usamos un valor para el proceso de prueba .