Доброго всем времени, решил попробовать свои силы в автоматизации ios приложений с помощью яп Swift и XCode, столкнулся с проблемой создания неявных ожиданий. Кейс для примера:
- Запуск приложения (Пока приложение загружается - крутится прелоадер)
 
- Появляются поля ввода логина и пароля.
 
Для ожидания загрузки полей получается использовать явные ожидания Thread.sleep, а вот неявных не смог найти, возможно кто-то уже сталкивался:
public func sleep(timeForSleep: Int) -> Void {
Thread.sleep(forTimeInterval: TimeInterval(timeForSleep));
}
public func tap(element: XCUIElement) -> Void{
element.tap();
}
         
        
          
        
           
           
           1 лайк
         
         
            
            
          
       
      
        
        
          Apple недавно добавили полноценную поддержку ожиданий в XCTest. В коде это выглядит приблизительно так:
func waitFor(_ element: XCUIElement, _ predicateString: String) {
    let expectation = XCTNSPredicateExpectation(predicate: NSPredicate(format: predicateString), object: element)
    let time = 10.0
    let result = XCTWaiter().wait(for: [expectation], timeout: time)
    if result != .completed {
        XCTFail("Condition '\(predicateString)' for \(element) was not satisfied during \(time) seconds")
    }
}
Затем можно создавать ожидания разных условий с помощью предикатов. Например:
func waitUntilVisible(_ element: XCUIElement) {
    return waitFor(element, "exists == true")
}
или
func waitUntilFocused(_ element: XCUIElement) {
    return waitFor(element, "hasFocus == true")
}
         
        
        
           
           
           4 лайка
         
         
            
            
          
       
      
        
        
          спасибо за помощь, обязательно попробую и отпишусь!