Estoy tratando de escribir un caso de prueba usando la nueva Prueba de IU disponible en Xcode 7 beta 2. La aplicación tiene una pantalla de inicio de sesión donde realiza una llamada al servidor para iniciar sesión. Hay un retraso asociado con esto, ya que es una operación asincrónica.
¿Hay alguna forma de causar un retraso o mecanismo de espera en XCTestCase antes de continuar con los pasos?
No hay documentación adecuada disponible y revisé los archivos de encabezado de las clases. No pude encontrar nada relacionado con esto.
¿Alguna idea / sugerencia?
ios
ios9
xcode-ui-testing
xcode7-beta2
xctwaiter
Tejas HS
fuente
fuente

NSThread.sleepForTimeInterval(1)debería funcionardispatch_after,dispatch_queuestuff)Respuestas:
Asynchronous UI Testing se introdujo en Xcode 7 Beta 4. Para esperar una etiqueta con el texto "¡Hola, mundo!" para aparecer puede hacer lo siguiente:
Se pueden encontrar más detalles sobre las pruebas de IU en mi blog.
fuente
waitForExpectationsWithTimeoutautomáticamente fallará su prueba, lo cual es bastante desafortunado.app.launch()parece simplemente relanzar la aplicación. ¿Es necesario?Además, solo puedes dormir:
Como los UITests se ejecutan en otro proceso, esto funciona. No sé qué tan aconsejable es, pero funciona.
fuente
usleepiOS 11 / Xcode 9
¡Este es un gran reemplazo para todas las implementaciones personalizadas en este sitio!
Asegúrese de echar un vistazo a mi respuesta aquí: https://stackoverflow.com/a/48937714/971329 . ¡Allí describo una alternativa a la espera de solicitudes que reducirá en gran medida el tiempo de ejecución de sus pruebas!
fuente
XCTestCasey funciona de maravilla. No entiendo por qué los enfoques comosleep(3)se votan tan alto aquí, ya que extiende el tiempo de prueba artificialmente y realmente no es una opción cuando crece su conjunto de pruebas.Xcode 9 introdujo nuevos trucos con XCTWaiter
El caso de prueba espera explícitamente
Delegados de instancia de camarero para probar
La clase de camarero devuelve el resultado
uso de muestra
Antes de Xcode 9
C objetivo
USO
Rápido
USO
o
FUENTE
fuente
A partir de Xcode 8.3, podemos usar
XCTWaiterhttp://masilotti.com/xctest-waiting/Otro truco es escribir una
waitfunción, el crédito va a John Sundell por mostrármelo.y úsalo como
fuente
Basado en la respuesta de @ Ted , he usado esta extensión:
Puedes usarlo así
También permite esperar que un elemento desaparezca o que cambie cualquier otra propiedad (utilizando el bloque apropiado)
fuente
Editar:
En realidad, se me ocurrió que en Xcode 7b4, las pruebas de IU ahora tienen
expectationForPredicate:evaluatedWithObject:handler:Original:
Otra forma es hacer girar el ciclo de ejecución durante un período de tiempo determinado. Realmente solo es útil si sabe cuánto tiempo (estimado) necesitará esperar
Obj-C:
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow: <<time to wait in seconds>>]]Rápido:
NSRunLoop.currentRunLoop().runMode(NSDefaultRunLoopMode, beforeDate: NSDate(timeIntervalSinceNow: <<time to wait in seconds>>))Esto no es súper útil si necesita probar algunas condiciones para continuar su prueba. Para ejecutar comprobaciones condicionales, use un
whilebucle.fuente
El siguiente código solo funciona con el objetivo C.
Simplemente llame a esta función como se indica a continuación.
fuente
En mi caso
sleepcreó efectos secundarios, así que uséwaitfuente
De acuerdo con la API para XCUIElement,
.existsse puede usar para verificar si existe una consulta o no, por lo que la siguiente sintaxis podría ser útil en algunos casos.Si está seguro de que su expectativa se cumplirá eventualmente, puede intentar ejecutar esto. Cabe señalar que el bloqueo podría ser preferible si la espera es demasiado larga, en cuyo caso se
waitForExpectationsWithTimeout(_,handler:_)debe utilizar la publicación de @Joe Masilotti.fuente
dormir bloqueará el hilo
"No se procesa el ciclo de ejecución mientras el hilo está bloqueado".
puedes usar waitForExistence
fuente
Esto creará un retraso sin poner el hilo a dormir o lanzar un error en el tiempo de espera:
Debido a que la expectativa se invierte, expirará en silencio.
fuente