2016-10-20 65 views
13

我正在爲使用XCTest的應用程序編寫UITest應用程序。應用程序在主屏幕中進行多個服務器調用。我無法導航到下一個屏幕。自動化經常保持空閒狀態,持續1分鐘或甚至大於與所述消息無法監控事件循環並等待應用程序閒置

等待應用到空閒

無法監視事件循環

有沒有辦法讓應用程序執行我的測試案例打破這???

回答

14

我在UI測試類中設置參數

let app = XCUIApplication() 
app.launchArguments = ["NoAnimations"] 
app.launch() 

在我的appDelegate的didFinishLaunchingWithOptions方法,我做了一個檢查,以幫助

NSArray *args = [NSProcessInfo processInfo].arguments; 

    for (NSString *arg in args){ 
     if ([arg isEqualToString:@"NoAnimations"]){ 
      [UIView setAnimationsEnabled:false]; 
     } 
    } 

因此,現在人們我在我的應用程序不會是任何動畫,我的應用程序不再被阻止。這將我的自動化時間從25分鐘縮短爲2分鐘。

1

我的建議是幫助您使用以下兩種方法之一。第一個等待一個元素出現在屏幕上。第二個因素是等待可打擊。但在任何情況下,這些方法都可以幫助你,也許你可以使用sleep(param)方法。像sleep(5)。等待5秒鐘

import XCTest 

class BaseTestCase: XCTestCase { 

    func waitForElementToAppear(element: XCUIElement, timeout: NSTimeInterval = 60, file: String = #file, line: UInt = #line) { 
     let existsPredicate = NSPredicate(format: "exists == true") 
     expectationForPredicate(existsPredicate, 
           evaluatedWithObject: element, handler: nil) 
     waitForExpectationsWithTimeout(timeout) { (error) -> Void in 
      if (error != nil) { 
       let message = "Failed to find \(element) after \(timeout) seconds." 
       self.recordFailureWithDescription(message, inFile: file, atLine: line, expected: true) 
      } 
     } 
    } 

    func waitForHittable(element: XCUIElement, timeout: NSTimeInterval = 70, file: String = #file, line: UInt = #line) { 
     let existsPredicate = NSPredicate(format: "hittable == 1") 
     expectationForPredicate(existsPredicate, evaluatedWithObject: element, handler: nil) 

     waitForExpectationsWithTimeout(timeout) { (error) -> Void in 
      if (error != nil) { 
       let message = "Failed to find \(element) after \(timeout) seconds." 
       self.recordFailureWithDescription(message, 
                inFile: file, atLine: line, expected: true) 
      } 
     } 
    } 
} 

我希望以某種方式

+1

感謝您找到時間來幫助我。該元素仍然可以打開並存在,但它仍然等待很長時間,同樣的「等待應用程序閒置」消息。有時我會看到這條消息----「應用動畫完成通知未收到,將嘗試繼續」。 – Manoj