2016-11-25 165 views
1

最近開始使用SWIFT進行XCode UI測試。expectationForPredicate失敗測試用例

我的問題是我需要等待,直到出現iPhone屏幕上的元素。

我找到了'''expectationForPredicate'''和'''waitForExpectationsWithTimeout'''的解決方案,但問題是這種方法被設計爲如果預期的謂詞在超時時間內不匹配,則會失敗測試用例。

我需要一個代碼,可以等待元素出現在屏幕上,如果該元素並沒有出現和超時超過然後我不想測試用例失敗。而我想返回true(元素存在)/ FALSE(不存在)

回答

0

我發現通過避免上面提到的功能與本解決方案是失敗我的測試,而不是返回true或false

下面是我創建的方法

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; 
} 

我希望這會幫助別人,但如果你還有其他更好的解決方案,請在這裏回答。