如何使用expectationForPredicate并点击一个按钮

时间:2016-06-27 11:26:10

标签: ios swift xctest xcode-ui-testing

如何在检查后是否启用了按钮?

我在这里找到了这个样本,但它对我的案例没有用。

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)

但点击按钮我的测试失败了。 感谢

1 个答案:

答案 0 :(得分:5)

您的代码示例不会检查该按钮是否已启用,只有该按钮存在。

如果按钮存在,您将传入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)