在Xcode UI Test中,如何重复检查元素是否存在以及是否执行操作?

时间:2017-11-29 12:18:22

标签: ios xcode-ui-testing

我正在实施UI测试。该应用程序进行API调用,可以发出警报(它是一个附加到窗口的UIView)。当然,这些是随机的/不可预测的。如果他们出现,我必须解雇他们(点击关闭按钮)。知道怎么做吗?我是否有一些事件表明UI上发生了什么?我想要一个每0.5秒执行一次的线程,检查是否存在关闭按钮,如果是,我点击它。

        DispatchQueue.global().async {
        while true
        {
            DispatchQueue.main.async {
                if(self.app.buttons["NotificationCloseButton"].exists)
                {
                    self.app.buttons["NotificationCloseButton"].tap()
                }
            }
            sleep(5)
        }
    }

问题在于它会导致随机崩溃:Neither attributes nor error returned

1 个答案:

答案 0 :(得分:1)

有一个很好的示例,说明如何等待元素出现在屏幕here上。以下是从链接中获取的代码示例:

let nextGame = self.app.staticTexts["Game 4 - Tomorrow"]
let exists = NSPredicate(format: "exists == true")
expectation(for: exists, evaluatedWithObject: nextGame, handler: nil)

app.buttons["Load More Games"].tap()

waitForExpectations(timeout: 5, handler: nil)
XCTAssert(nextGameLabel.exists)

Link还提供了如何等待系统警报显示:

addUIInterruptionMonitor(withDescription: "Location Dialog") { (alert) -> Bool in
    alert.buttons["Allow"].tap()
    return true
}

app.buttons["Find Games Nearby?"].tap()
app.tap() // need to interact with the app for the handler to fire
XCTAssert(app.staticTexts["Authorized"].exists)