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 № 1Polecam 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.