Este es mi caso:
let passwordSecureTextField = app.secureTextFields["password"]
passwordSecureTextField.tap()
passwordSecureTextField.typeText("wrong_password") //here is an error
Error de prueba de IU: ni el elemento ni ningún descendiente tienen el foco del teclado. Elemento:
¿Qué está mal? Esto funciona bien para la normalidad textFields
, pero el problema solo surge con secureTextFields
. ¿Alguna solución?
Respuestas:
Este problema me causó un mundo de dolor, pero he logrado encontrar una solución adecuada. En el simulador, asegúrese de que 'Hardware -> Teclado -> Conectar teclado de hardware' esté apagado.
fuente
Recientemente encontramos un hack para hacer que la solución de la respuesta aceptada sea persistente. Para deshabilitar la configuración del simulador: 'Hardware -> Teclado -> Conectar teclado de hardware' desde la línea de comando uno debe escribir:
No afectará a un simulador que se esté ejecutando: debe reiniciar el simulador o iniciar uno nuevo para que esa configuración tenga efecto.
fuente
defaults write com.apple.iphonesimulator ConnectHardwareKeyboard -bool true
, pero es el mismo concepto.killall "Simulator"; defaults write com.apple.iphonesimulator ConnectHardwareKeyboard 0;
He escrito una pequeña extensión (Swift) que funciona perfectamente para mí. Aquí está el código:
La idea principal es seguir tocando un elemento (campo de texto) antes de presentar el teclado.
fuente
Stanislav tiene la idea correcta.
En un entorno de equipo, necesita algo que funcione automáticamente. He encontrado una solución aquí en mi blog.
Básicamente solo pegas:
fuente
Otra causa de este error es si hay una vista principal del campo de texto en el que está intentando ingresar texto que se establece como un elemento de accesibilidad (
view.isAccessibilityElement = true
). En este caso, XCTest no puede obtener un identificador en la subvista para ingresar el texto y devuelve el error.No es que ningún elemento tenga foco (como a menudo puede ver el teclado hacia arriba y el cursor parpadeante en el UITextField), es simplemente que ningún elemento que pueda alcanzar tiene foco. Me encontré con esto cuando intenté ingresar texto en una UISearchBar. La barra de búsqueda en sí no es el campo de texto, al configurarlo como un elemento de accesibilidad, se bloqueó el acceso al UITextField subyacente. Para resolver esto,
searchBar.accessibilityIdentifier = "My Identifier"
se estableció enUISearchBar
sin embargo,isAccessibilityElement
no se configuró entrue
. Después de esto, pruebe el código del formulario:Trabajos
fuente
Ocurrió conmigo muchas veces. Debe deshabilitar el hardware del teclado y el mismo diseño que OSX en su simulador
Hardware / Teclado (deshabilitar todo)
Después de eso, el software del teclado no se descartará y sus pruebas pueden escribir texto
fuente
Use una suspensión entre iniciar la aplicación y escribir datos en campos de texto como este:
En mi caso, seguía recibiendo este error cada vez y solo esta solución me ayudó.
fuente
Esto quizás ayude: acabo de agregar una acción de "toque" antes del error; eso es todo :)
fuente
fuente
Grabe el caso como lo desee, teclado o sin teclado conectado. Pero haga lo siguiente antes de jugar la prueba.
La siguiente opción (conectar el teclado de hardware) debe estar desmarcada mientras se reproduce la prueba.
fuente
En mi caso esto
Hardware -> Keyboard -> Connect Hardware Keyboard
-> Deshabilitar no funcionó para mí.Pero cuando lo seguí
1)
Hardware -> Keyboard -> Connect Hardware Keyboard
-> Habilitado y ejecute la aplicación2)
Hardware -> Keyboard -> Connect Hardware Keyboard
-> Deshabilitado .Funciono para mi
fuente
[ Reposicionando el comentario de Bartłomiej Semańczyk como respuesta porque me resolvió el problema]
Necesitaba hacer Simulator> Restablecer contenido y configuración en la barra de menú del simulador para que esto comience a funcionar para mí.
fuente
En ocasiones, los campos de texto no se implementan como campos de texto, o se envuelven en otro elemento de la interfaz de usuario y no son fácilmente accesibles. Aquí hay una solución:
fuente
Su primera línea es solo una definición de consulta , lo que no significa que
passwordSecureTextField
realmente exista.Su segunda línea ejecutará dinámicamente la consulta e intentará (re) vincular la consulta al elemento de la interfaz de usuario. Debe ponerle un punto de interrupción y verificar que se encuentre un solo elemento. O simplemente use una afirmación:
De lo contrario, se ve bien,
tap
debería forzar el teclado visible y luegotypeText
debería funcionar. El registro de errores debería decirle más información.fuente
passwordSecureTextField
existe Solucioné el problema, pero limpié la memoria y reescribí esas líneas nuevamente. Extraño, pero funcionó.tap
para mí, me tomó un tiempo descubrirlo. ¡Buena práctica de depuración!No se equivoque, el problema se debe a que la razón es que ha registrado su tiempo de prueba, su aplicación conectará el teclado de hardware mientras que su simulador de tiempo de prueba automático solo toma el teclado del software. Entonces, ¿cómo solucionar este problema? Simplemente use el teclado de software en su tiempo de grabación. Puedes ver la magia.
fuente
El problema para mí era el mismo que para Ted. En realidad, si el campo de contraseña se toca después del campo de inicio de sesión y KB de hardware está activado, el teclado del software se descartará en el segundo toque de campo, y no es específico para las pruebas de IU.
Después de algún tiempo jugando con AppleScript, esto es lo que se me ocurrió (las mejoras son bienvenidas):
tell application "Simulator" activate tell application "System Events" try tell process "Simulator" tell menu bar 1 tell menu bar item "Hardware" tell menu "Hardware" tell menu item "Keyboard" tell menu "Keyboard" set menuItem to menu item "Connect Hardware Keyboard" tell menu item "Connect Hardware Keyboard" set checkboxStatus to value of attribute "AXMenuItemMarkChar" of menuItem if checkboxStatus is equal to "✓" then click end if end tell end tell end tell end tell end tell end tell end tell on error tell application "System Preferences" activate set securityPane to pane id "com.apple.preference.security" tell securityPane to reveal anchor "Privacy_Accessibility" display dialog "Xcode needs Universal access to disable hardware keyboard during tests(otherwise tests may fail because of focus issues)" end tell end try end tell end tell
Cree un archivo de secuencia de comandos con el código anterior y agréguelo a los objetivos necesarios (probablemente el objetivo de pruebas de IU solo, puede agregar secuencias de comandos similares a sus objetivos de desarrollo para volver a habilitar el teclado HW durante el desarrollo). Debe agregar
Run Script
fase en las fases de compilación y usarlo así:osascript Path/To/Script/script_name.applescript
fuente
Encontramos el mismo error al configurar el
accessibilityIdentifier
valor para una vista personalizada (UIStackView
subclase) que contieneUIControl
subvistas. En ese caso, XCTest no pudo obtener el foco del teclado para los elementos descendientes.Nuestra solución fue simplemente eliminar el
accessibilityIdentifier
de nuestra vista principal y establecer elaccessibilityIdentifier
para las subvistas a través de propiedades dedicadas.fuente
Otra respuesta, pero para nosotros el problema era que la vista estaba demasiado cerca de otra vista que tenía un reconocimiento de gestos. Descubrimos que necesitábamos que la vista estuviera al menos a 20 píxeles de distancia (en nuestro caso a continuación). Literalmente 15 no funcionaron y 20 o más lo hicieron. Esto es extraño, lo admito, pero teníamos algunos UITextViews que funcionaban y otros que no, y todos estaban bajo el mismo padre e idéntico otro posicionamiento (y nombres de variables, por supuesto). El teclado encendido o apagado o lo que sea no hizo ninguna diferencia. La accesibilidad mostró los campos. Reiniciamos nuestras computadoras. Hicimos construcciones limpias. Verificación de fuente fresca.
fuente
Lo que solucionó este problema para mí fue agregar un sueño de 1 segundo:
fuente
Me encontré con este problema y pude solucionarlo en mi escenario al tomar la solución publicada por @AlexDenisov y agregarla a mis acciones previas para ejecutar y probar .
fuente
No es necesario encender / apagar el teclado en E / S. No use .typeText para secureTextField, solo use
Bonificación: obtienes clic de sonido del teclado :)
fuente
Finalmente, escribí un script que edita el archivo .plist del Simulador y establece el
ConnectHardwareKeyboard
propiedad en falso para el simulador seleccionado. Lo escuchaste bien, cambia la propiedad del simulador específicamente seleccionado dentro del diccionario "DevicePreferences" en lugar de editar la propiedad global.Primero, cree un script de shell llamado disable-hardware-keyboard.sh con los siguientes contenidos. Puede colocarlo dentro de "YourProject / xyzUITests / Scripts /" .:
Ahora siga estos pasos para llamarlo pasando el udid del simulador seleccionado como argumento:
Script dentro de Prueba> Pre-acciones:
Hora de probarlo:
fuente
Tuve el mismo problema con Securetextfields. La opción de conexión de hardware en mi simulador era de, pero todavía se encontró con el problema. Finalmente, esto funcionó para mí (Swift 3):
fuente