/ / ¿Por qué NSPredicate accessibilityIdentifier falla? - Swift, xcode-ui-testing

¿Por qué NSPredicate accessibilityIdentifier falla? - swift, xcode-ui-testing

Cuando ejecuto una prueba con el siguiente código:

let shuffle = app.buttons.elementMatchingPredicate(NSPredicate(format: "accessibilityIdentifier=%@", "shuffle"))
expectationForPredicate(NSPredicate(format: "hittable=TRUE"), evaluatedWithObject: shuffle, handler: nil)
waitForExpectationsWithTimeout(2) {_ in}
shuffle.tap()

La prueba falla. Pero cuando uso este código:

let shuffle = app.buttons["shuffle"]
expectationForPredicate(NSPredicate(format: "hittable=TRUE"), evaluatedWithObject: shuffle, handler: nil)
waitForExpectationsWithTimeout(2) {_ in}
shuffle.tap()

http://www.bricepollock.com/difference-xcode-ui-testing-ui-automation-instrument/

Este tipo dice específicamente que un enormela mejora de la UIT sobre la UIA es que la UIT utiliza consultas que se evalúan rápidamente cada vez que se usa, en lugar de evaluarlas una vez y operar en el conjunto de resultados. Parece que hay un principio de diseño pobre aquí. ¿Alguien puede explicar qué está mal con la primera consulta?

expectationForPredicate(NSPredicate("ANY accessibilityIdentifier=%@"), evaluatedWithObject: app.buttons)

Tampoco parece funcionar. ¿Hay documentación que describa qué funciones son consultas y cuáles son conjuntos de resultados? Solo pude encontrar 1 página en el sitio de Apple que describe cómo usar esta nueva suite XCUI, y está muy limitada en los ejemplos.

Respuestas

0 para la respuesta № 1

Recomiendo ver el video de la WWDC: https://developer.apple.com/videos/play/wwdc2015-406/

Además, este lugar parece tener la documentación sobre los objetos XCUI * que utilizará en las pruebas unitarias: http://masilotti.com/xctest-documentation/

No tengo una respuesta específica para por qué algoestá fallando porque eso es parte de tu interfaz de usuario. Parece que está configurando el identificador de accesibilidad que parece correcto. Yo escribiría esta prueba así:

let shuffle = app.buttons["shuffle"]
XCTAssert(shuffle.hittable == true)
shuffle.tap()

Los tiempos de espera ya no suelen ser necesarios con el marco de pruebas de Ucode de Xcode.