2016-08-26 2 views
0

В настоящее время есть следующий метод: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()..., чтобы получить обновленный вид текущей страницы?

Кто-нибудь знает какие-нибудь умные способы обойти это?

ответ

2

Возможно, более целесообразно использовать expectationForPredicate.

expectationForPredicate(NSPredicate(format: "exists == true"), evaluatedWithObject: XCUIApplication().staticTexts["Error message"], handler: nil) 
waitForExpectationsWithTimeout(15.0, handler: nil) 
+0

Иерархия представлений не обновляется каждый раз, когда выполняется цикл while. Использование waitForExpectationsWithTimeout гарантирует, что проверенная иерархия представлений проверяется, чтобы утверждения были обновлены. – Oletha

+0

Действительно, оболочка UI Test сильно кэширует иерархию представлений. –

+0

На самом деле меня раздражает то, как он сильно кэширует вид иерархии. Так легко попасться. –

Смежные вопросы