6

Próbuję uruchomić test interfejsu XCode w moim projekcie React Native. Moim celem jest wykorzystanie szybkiej/migawki do przechwytywania zrzutów ekranu z mojej aplikacji."Aplikacja nie wyłączyła się w ciągu 60 sekund" w projekcie React-Native

W końcu zorientowałem się, jak napisać scenariusz do mojej aplikacji, aby zrobić to, co chcę. Niestety aplikacja utknęła w wiadomości App failed to quiesce within 60s po wywołaniu app.otherElements["mainButton"].tap().

O ile mogę powiedzieć jako człowiek, moja aplikacja wydaje się być statyczna i nie aktualizuje ani nie animuje niczego Nie jestem jednak pewien, na czym polega test interfejsu użytkownika w celu wykrycia heurystyki, więc może to wymagać użycia pewnych wewnętrznych lub sprawdzających wątków.

Podejrzewam, że istnieje pewne reakcje na zachowanie Native, które uniemożliwiają testowanie interfejsu użytkownika po zobaczeniu rzeczy jako zakończonych. Niestety, bez rzeczywistej możliwości sprawdzenia, co robią testy UI, nie jestem nawet pewien, gdzie muszę się przekopać do React Native, aby to naprawić. :(

Każda pomoc będzie mile widziane

+0

http://www.openradar.me/25562105 https://forums.developer.apple.com/thread/6503 – Che

Odpowiedz

1

obejście z linku powyżej dla widoku problemy i linii, aby wyłączyć animacje w

viewWillAppear: 
- (void) viewWillAppear: (BOOL)animated { 
    if ([[[NSProcessInfo processInfo] environment][@"UITEST_DISABLE_ANIMATIONS"] isEqualToString:@"YES"]) { 
     [UIView setAnimationsEnabled:NO]; 
    } 
} 

i animacje w viewWillDisappear skręcić z powrotem na:

- (void) viewWillDisappear:(BOOL)animated { 
    if ([[[NSProcessInfo processInfo] environment][@"UITEST_DISABLE_ANIMATIONS"] isEqualToString:@"YES"]) { 
     [UIView setAnimationsEnabled:YES]; 
    } 
} 

W swoich testach rozszerz XCUIApplication i ustaw zmienne, a następnie w ustawieniach metody wywołaj funkcję launchvariables

extension XCUIApplication { 
    func launchTestsWithEnvironmentVariables() { 
      launchEnvironment = [ 
       "UITEST_DISABLE_ANIMATIONS" : "YES" 
      ] 
    self.launch() 
    } 
} 




override func setUp() { 
     super.setUp() 
     continueAfterFailure = false 
     XCUIApplication().launchTestsWithEnvironmentVariables() 
    } 




func testblahblah { 

Powoduje ustawienie zmiennej środowiskowej, która wyłącza animacje dla tego widoku szczegółów. Jedynym minusem jest to, że nie będziesz testował animacji dla tego widoku, jeśli to jest twoje. Hacky obejść, ale działa na razie.

PS to naprawdę pomogło mi

+0

Awesome, dziękuję bardzo! Nie miałem podklasy 'UIViewController', aby ją włożyć (ponieważ używam' UIViewController' w 'AppDelegate.m'). Jednak przykleiłem wyłączający kod do mojego 'AppDelegate''' didFinishLaunchingWithOptions', który działał dobrze dla mnie. (Wyłączono je na czas uruchomienia aplikacji, ponieważ nie miałem żadnego powodu, aby ponownie je włączyć dla innych widoków) –