2016-11-25 1 views
1

Récemment commencé à travailler sur le test de l'interface utilisateur XCode avec SWIFT.expectationForPredicate échoue test case

Mon problème est que je dois attendre jusqu'à ce qu'un élément apparaisse sur l'écran de l'iPhone.

J'ai trouvé une solution avec '' 'expectationForPredicate' '' et '' 'waitForExpectationsWithTimeout' '' mais le problème est que ces méthodes sont conçues pour échouer le cas de test si le prédicat attendu ne correspond pas au délai imparti.

J'ai besoin d'un code qui peut attendre que l'élément apparaisse à l'écran si l'élément n'apparaît pas et que le délai d'attente soit dépassé, je ne veux pas que le cas de test échoue. Je voudrais plutôt revenir vrai (élément existe)/faux (existe pas)

Répondre

0

J'ai trouvé une solution en évitant les fonctions mentionnées ci-dessus que ceux ne parviennent pas mes tests au lieu de retourner vrai ou faux

Ci-dessous la méthode j'ai créé

func waitForElementToAppear(element: XCUIElement, file: String = #file, line: UInt = #line) -> Bool { 
    let TIMEOUT: Double = 120 ; 
    var isFound = false; 
    let start = NSDate(); 
    var diff : Double = 0; 
    repeat{ 
     print("Is element \(element) found : \(element.exists)") 
     print("Printing debugDescription -> ") 
     print(XCUIApplication().debugDescription) 
     if(element.exists){ 
      isFound = true; 
      break; 
     } 
     print("Waiting for element to exists... Time counter :\(diff)") 
     sleep(1) 
     let end = NSDate(); 
     diff = end.timeIntervalSinceDate(start); 
    }while(diff <= TIMEOUT); 
    return isFound; 
} 

J'espère que cela aidera les autres, mais si vous avez encore une autre meilleure solution, veuillez répondre ici.