2016-06-27 2 views
2

Как я могу нажать кнопку после проверки, включена ли она?Как использовать ожидание ForPredicate и нажмите кнопку

Здесь я нашел этот образец, но это не сработало для моего дела.

Delay/Wait in a test case of Xcode UI testing

Вот часть кода:

let app = XCUIApplication() 
    let button = app.buttons["Tap me"] 
    let exists = NSPredicate(format: "exists == 1") 
    expectationForPredicate(exists, evaluatedWithObject: button){ 
     button.tap() 
     return true 
    } 
waitForExpectationsWithTimeout(5, handler: nil) 

но мой тест не нажав на кнопку. Спасибо

+0

Код выглядит правильно, я предполагаю, что кнопка не существует/не может быть найден – Daniel

+0

ли вы проверить, если кнопка ноль? – LoVo

+0

Из консоли: po button.enabled возвращает true. – emoleumassi

ответ

3

Ваш образец кода не проверяет, включена ли кнопка, только если она существует.

Блок, который вы передадите в expectationForPredicate, будет выполнен, если кнопка существует, поэтому кнопка будет нажата, даже если кнопка отключена.

Чтобы включить проверку на кнопку быть включен:

let app = XCUIApplication() 
let button = app.buttons["Tap me"] 
let exists = NSPredicate(format: "exists == 1") 
expectationForPredicate(exists, evaluatedWithObject: button) { 
    // If the button exists, also check that it is enabled 
    if button.enabled { 
     button.tap() 
     return true 
    } else { 
     // Do not fulfill the expectation since the button is not enabled 
     return false 
    } 
} 
waitForExpectationsWithTimeout(5, handler: nil)