Xcode 11 XCUITest Error al obtener instantáneas coincidentes: error al obtener la ventana principal kAXErrorServerNotFound

21

Después de compilar mi aplicación en Xcode 11 y ejecutar mi conjunto de XCUITests, obtengo muchas fallas aleatorias con lo siguiente.

Error al obtener instantáneas coincidentes: error al obtener la ventana principal kAXErrorServerNotFound

No importa cuánto tiempo aumente los tiempos de espera, los problemas aparecen de forma intermitente. Parece estar teniendo problemas Instantáneas de la jerarquía de la interfaz de usuario. Nuestras pruebas pasan consistentemente en Xcode 10.

He reinstalado Xcode. Se eliminaron todos los simuladores. Datos derivados borrados. Tiempos de espera modificados. Actualizado de Xcode 11.1 a Xcode 11.2.1.

¡Gracias!

 

Luke Street
fuente
incluso si estoy enfrentando el mismo problema, ¿obtuviste alguna solución para el mismo?
Samarth Kejriwal

Respuestas:

9

Tuve el problema con la coincidencia mientras ejecutaba el simple UITest en Xcode 11.3. Para que funcione, tuve que pegar primero: XCUIApplication().activate()o XCUIApplication().launch().

Денис Грищенко
fuente
Esto funciona ... gracias
RJ168
Esta respuesta parece ser el camino a seguir, pero ¿tengo problemas para entender lo que significa? ¿Dónde debo escribir XCUIApplication (). Activiate () y / o XCUIApplication (). Launch ()?
Charlie Seligman
Dentro de su función de prueba de interfaz de
usuario
0

Experimenté el mismo problema con Xcode 11 y me di cuenta de que el corredor de prueba no se estaba matando al detener las pruebas (o si la prueba fallaba por alguna razón). La ejecución de las pruebas por segunda vez generaría un nuevo corredor de prueba y en ese momento tuve dos corredores que intentaban interactuar con la misma aplicación, lo que condujo a este error muy extraño.

Para demostrar que hice lo siguiente:

  1. Creó una prueba de IU que escribe un texto largo en una vista de texto
  2. Ejecuté la prueba y la detuve manualmente cuando había algunas oraciones en la vista de texto
  3. Abrió manualmente la aplicación en el simulador (no ejecutando la prueba)
  4. Observé que aparecían caracteres aleatorios en la vista de texto, a pesar de que no se ejecutaban pruebas.

La solución consistía en salir y volver a abrir el simulador para asegurarse de que todos los procesos se estaban ejecutando. Espero que esto resuelva tus problemas

erudel
fuente
Gracias por la idea! Ahora que dices esto, eso se alinea con lo que he observado. Desafortunadamente, como dije en mi publicación original, ya he intentado eliminar todos los simuladores. Estas pruebas se ejecutan como parte de nuestras compilaciones tanto localmente como en nuestro sistema de CI. ¿Sabes de alguna manera automatizar este proceso?
Luke Street, el
I Lo que terminamos haciendo en nuestro sistema de CI fue matar explícitamente el simulador antes de ejecutar un conjunto de pruebas. Puede, por ejemplo killall "Simulator" 2> /dev/null; xcrun simctl erase all, ejecutar , o si usa fastlane, hay opciones en el escaneo para restablecer el simulador.
erudel
0

Yo uso diferentes máquinas. Mis Macs anteriores experimentan este error con mucha más frecuencia. Supongo que las Mac más antiguas no tienen la memoria necesaria para ejecutar ciertos XCUITests correctamente.

Charlie Seligman
fuente
0

Me encuentro con el problema de vez en cuando en Xcode 11.1. Observé que el problema ocurre cuando se esperan elementos de la interfaz de usuario, especialmente si se muestran vistas web durante la prueba. Cuando ocurrió el problema que estaba usando XCUIElement.waitForExistence(timeout:)o esperaba NSPredicate(format: "exists == true"). Cuando cambié para usar las expectativas, NSPredicate(format: "hittable == true")el problema parece haberse ido, pero no sé por qué. La diferencia entre los 2 atributos es que hittablesolo detecta elementos en pantalla mientras existsdetecta elementos fuera de la pantalla, como las celdas fuera de la pantalla de una vista de tabla.

expectation(for: NSPredicate(format: "hittable == true"), evaluateWith: element, handler: nil)
waitForExpectations(timeout: 60, handler: nil)
Juny
fuente
0

Tuve un problema similar en Xcode 11.

Resultó que antes se le permitía tener el mismo identificador de accesibilidad en muchas páginas.

Pero ahora, usando el nuevo estilo de presentación modal, debe usar diferentes identificadores dentro de sus páginas para evitar conflictos.

touti
fuente