XСTests на Swift. Как создать неявные ожидания?

Доброго всем времени, решил попробовать свои силы в автоматизации ios приложений с помощью яп Swift и XCode, столкнулся с проблемой создания неявных ожиданий. Кейс для примера:

  1. Запуск приложения (Пока приложение загружается - крутится прелоадер)
  2. Появляются поля ввода логина и пароля.

Для ожидания загрузки полей получается использовать явные ожидания 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 лайка

спасибо за помощь, обязательно попробую и отпишусь!

Хорошее решение

1 лайк