6

所以我試圖在我的React Native項目上運行XCode UI測試。我的目標是使用fastlane/snapshot抓取我的應用程序的屏幕截圖。React-Native項目中的「應用程序未能在60s內停頓」

我終於想出瞭如何腳本我的應用程序來做我想做的事情。不幸的是,在調用app.otherElements["mainButton"].tap()後,該應用程序陷入了App failed to quiesce within 60s消息。

據我所知,作爲一個人,我的應用程序似乎是靜態的,而不是更新或動畫的任何東西。但我不清楚UI Test是如何使用它的檢測啓發式的,所以它可能會使用一些內部狀態或檢查線程。

我懷疑有一些React Native行爲讓UI測試看不見東西已經完成。不幸的是,如果沒有任何真正的能力看到UI測試正在做什麼,我甚至不知道我需要挖掘React Native來修復它。 :(

任何幫助,將不勝感激

+0

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

回答

1

從鏈接的解決方法上面 對於有問題的看法和線

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

和viewWillDisappear把動畫重新禁用動畫:

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

在您的測試中擴展XCUIApplication並設置變量,然後在您的setup方法中調用launchvariables函數

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




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




func testblahblah { 

這設置了一個環境變量,將禁用該特定視圖的動畫。唯一的缺點是你不會爲那個視圖測試動畫。哈克解決方法,但它現在工作。

PS它真的幫了我

+0

真棒,太感謝你了!我沒有'UIViewController'子類來堅持它們(因爲我在'AppDelegate.m'中使用了一個股票'UIViewController')。然而,我確實在我的AppDelegate的'didFinishLaunchingWithOptions'中粘貼了禁用代碼,這對我來說非常合適。 (在應用程序運行期間禁用它們,因爲我沒有任何理由爲其他視圖重新啓用它們) –

相關問題