2015-11-10 20 views
12

Mój test interfejsu użytkownika kończy się niepowodzeniem, ponieważ test jest nieskończony do momentu, gdy aplikacja zostanie bezczynna. Nie widzę, żeby coś działo się w tle, jak ładujący się spinner.XCTestCase: Zaczekaj, aż aplikacja przestanie działać.

Występuje tylko na jednej karcie. Wszystkie inne zakładki są dostępne, ale test kończy się niepowodzeniem na ekranie 3. Klikam na inną zakładkę po tym, jak test zostanie przechwycony na ekranie 3, test wznawia się i kończy pomyślnie.

Wszelkie pomysły?

- (void)testExample 
{ 

    XCUIElementQuery* tabBarsQuery = self.app.tabBars; 

    [tabBarsQuery.buttons[@"Screen2"] tap]; 
    [tabBarsQuery.buttons[@"Screen3"] tap]; 
    [tabBarsQuery.buttons[@"Screen1"] tap]; 
    [tabBarsQuery.buttons[@"Screen4"] tap]; 

} 

Odpowiedz

7

Być może masz animację lub inną aktywność w tle (lub na pierwszym planie), która często aktualizuje twój interfejs użytkownika na głównym wątku. To powoduje, że aplikacja nigdy nie będzie "wygaszać" - przynajmniej na tej karcie. W naszej aplikacji mieliśmy animację UIView z opcją Powtórz. Wykorzystanie procesora było w porządku i nie było to wyczerpanie baterii, ale za każdym razem test kończył się niepowodzeniem. Wyłączenie animacji rozwiązało problem. Nie mogłem znaleźć sposobu, aby wymusić test, aby nie czekać na bezczynność, więc skończyliśmy wyłączanie animacji przy użyciu #ifdef dla celu testu interfejsu użytkownika przy użyciu argumentów runtime, jak opisano tutaj: https://stackoverflow.com/a/33466038/168996

+0

Dziwne. Musi istnieć sposób na zmusić proces testowania do zignorowania animacji ... animacje są normalne w aplikacjach, prawda? Animacje nie powinny mieć żadnego znaczenia dla testu. Tylko dlatego, że coś się rusza, nie oznacza, że ​​w interfejsie nie można użyć innego przycisku. – Jonny

+0

Może to był po prostu błąd XCTest w jakiejś wcześniejszej wersji. Nie jestem w 100% pewny, ale myślę, że teraz to działa dobrze, tzn. Istnieje powtarzająca się animacja, ale nie poraża testu. –