В настоящее время есть следующий метод:Xcodes UI тестирование показывает устаревшую информацию страницы
func waitForOptionalElement(explicitElement: XCUIElement, timeout: Int) {
var waitedDuration = 0
while waitedDuration < timeout {
if explicitElement.exists {
break
}
waitedDuration++
sleep(1)
}
}
Этот метод направлен на ожидании, пока на экране не появится объект. Проблема в том, что если explicityElement
нет на экране при вызове метода, то explicitElement.exists
всегда возвращает false
(даже если объект появляется). Это похоже на то, что explicitElement
не обновляется при изменении страницы, но продолжает проверять исходное представление, а не обновлять его.
Если я полностью позвоню explicitElement
, например. XCUIApplication().staticTexts["Error message"].exists
то, что вернется true
. Как будто вам нужно позвонить XCUIApplication()...
, чтобы получить обновленный вид текущей страницы?
Кто-нибудь знает какие-нибудь умные способы обойти это?
Иерархия представлений не обновляется каждый раз, когда выполняется цикл while. Использование waitForExpectationsWithTimeout гарантирует, что проверенная иерархия представлений проверяется, чтобы утверждения были обновлены. – Oletha
Действительно, оболочка UI Test сильно кэширует иерархию представлений. –
На самом деле меня раздражает то, как он сильно кэширует вид иерархии. Так легко попасться. –