/ / Dlaczego NSPredicate accessibilityIdentifier zawodzi? - szybkie, xcode-ui-testowanie

Dlaczego NSPredicate accessibilityIdentifier nie działa? - szybkie, xcode-ui-testing

Kiedy uruchamiam test z następującym kodem:

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

Test kończy się niepowodzeniem. Ale kiedy używam tego kodu:

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/

Ten facet mówi, że to ogromnyulepszenie UIT w porównaniu z UIA polega na tym, że UIT używa zapytań, które są szybko oceniane za każdym razem, gdy jest używane, zamiast oceny raz i działania na zestawie wyników. Wygląda na to, że istnieje tutaj zła zasada projektowania. Czy ktoś może wyjaśnić, co jest nie tak z pierwszym zapytaniem?

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

Wydaje się, że też nie działa. Czy istnieje dokumentacja opisująca, które funkcje są zapytaniami, a które zestawami wyników? Mogłem znaleźć tylko 1 stronę w witrynie Apple, która opisuje sposób korzystania z tego nowego pakietu XCUI, i jest poważnie ograniczona do przykładów.

Odpowiedzi:

0 dla odpowiedzi № 1

Polecam obejrzeć wideo WWDC: https://developer.apple.com/videos/play/wwdc2015-406/

Ponadto w tym miejscu wygląda dokumentacja obiektów XCUI *, których będziesz używać w testach jednostkowych: http://masilotti.com/xctest-documentation/

Nie mam konkretnej odpowiedzi na pytanie, dlaczego cośzawodzi, ponieważ częściowo zależy to od interfejsu użytkownika. Wygląda na to, że ustawiasz identyfikator dostępności, który wygląda poprawnie. Ten test napisałbym tak:

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

Przekroczenia limitu czasu zwykle nie są już konieczne w ramach środowiska testowego interfejsu użytkownika Xcode.