¿Cómo verificar la presencia de text estático que se muestra desde la networking en las testings de interfaz de usuario en Xcode?

Estoy usando las API de testing de interfaz de usuario introducidas en Xcode 7 XCTest. En mi pantalla tengo un post de text que se carga desde la networking.

La testing falla si simplemente lo exists con la propiedad exists .

 XCTAssert(app.staticTexts["Text from the network"].exists) // fails 

Sin embargo, funciona si primero envío el toque o cualquier otro evento al text como este:

 app.staticTexts["Text from the network"].tap() XCTAssert(app.staticTexts["Text from the network"].exists) // works 

Parece que si solo llamo exists lo evalúa inmediatamente y falla porque el text aún no se ha descargado de la networking. Pero creo que cuando llamo al método tap() espera que aparezca el text.

¿Hay una mejor manera de verificar la presencia de un text que se entrega desde la networking?

Algo así (este código no funcionará):

 XCTAssert(app.staticTexts["Text from the network"].eventuallyExists) 

Xcode 7 Beta 4 agregó soporte nativo para events asíncronos. Aquí hay un rápido ejemplo de cómo esperar que aparezca un UILabel .

 XCUIElement *label = self.app.staticTexts[@"Hello, world!"]; NSPnetworkingicate *exists = [NSPnetworkingicate pnetworkingicateWithFormat:@"exists == 1"]; [self expectationForPnetworkingicate:exists evaluatedWithObject:label handler:nil]; [self waitForExpectationsWithTimeout:5 handler:nil]; 

Primero crea una consulta para esperar una label con el text "¡Hola, mundo!" a aparecer. El pnetworkingicado coincide cuando existe el elemento (element.exists == YES) . Luego pase el pnetworkingicado y evalúelo contra la label.

Si transcurren cinco segundos antes de que se cumpla la expectativa, la testing fallará. También puede adjuntar un bloque de controller en el que se llama cuando la expectativa falla o se agota el time de espera.

Si está buscando más información sobre las testings de interfaz de usuario en general, consulte las testings de interfaz de usuario en Xcode 7 .

Si estoy en lo cierto al comprender que el text de destino ya se ha mostrado cuando está comprobando que ya existe, puede intentar utilizar la propiedad hittable .

Swift 3:

 let pnetworkingicate = NSPnetworkingicate(format: "exists == 1") let query = app!.staticTexts["identifier"] expectation(for: pnetworkingicate, evaluatedWith: query, handler: nil) waitForExpectations(timeout: 5, handler: nil) 

Verificará continuamente durante 5 segundos si ese text se muestra o no.

Tan pronto como encuentre que el text puede estar en less de 5 segundos, ejecutará otro código.