6

Also versuche ich einen XCode UI Test auf meinem React Native Projekt auszuführen. Mein Ziel ist es, Fastlane/Snapshot zu verwenden, um Screenshots meiner App zu erstellen."App konnte nicht innerhalb von 60 Sekunden stillgelegt werden" in React-Native Projekt

Endlich habe ich herausgefunden, wie ich meine App so schreiben kann, dass ich mache, was ich will. Leider bleibt die App nach dem Aufruf app.otherElements["mainButton"].tap() mit einer App failed to quiesce within 60s Nachricht stecken.

Soweit ich als Mensch sagen kann, scheint meine App statisch zu sein und nichts zu aktualisieren oder zu animieren. Aber mir ist nicht klar, was der UI-Test für seine Erkennungsheuristik verwendet, also könnte er einen internen Status verwenden oder Threads überprüfen.

Ich vermute, es gibt einige React Native Verhalten, die den UI Test davon abhält, die Dinge als beendet zu sehen. Leider weiß ich nicht wirklich, wo ich mit React Native arbeiten muss, um die Fehler zu beheben. :(

Jede mögliche Hilfe geschätzt

+0

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

Antwort

1

Die Abhilfe von Link oben Für die Ansicht mit Fragen und eine Linie Animationen in

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

zu deaktivieren und in viewWillDisappear Animationen wieder aktivieren:

In Ihren Tests erweitern XCUIApplication und Set-Variablen.Anschließend rufen Sie in Ihrer Setup-Methode die Funktion launchvariables

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




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




func testblahblah { 

Dies legt eine Umgebungsvariable fest, die Animationen für diese bestimmte Ansicht deaktiviert. Einziger Wermutstropfen ist, dass Sie keine Animationen für diese Ansicht testen werden, wenn Ihnen das etwas bedeutet. Hacky Workaround, aber es funktioniert für jetzt.

PS für mich wirklich geholfen

+0

Awesome, vielen Dank! Ich hatte keine "UIViewController" Unterklasse, um sie einzubinden (da ich eine Aktie 'UIViewController' in' AppDelegate.m' verwende). Ich habe jedoch den Deaktivierungscode in meinem "AppDelegate's" didFinishLaunchingWithOptions "gespeichert, was für mich gut funktioniert hat. (Deaktiviert sie für die Dauer des App-Laufs, da ich keinen Grund hatte, sie für andere Ansichten wieder zu aktivieren) –