我正在实施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
答案 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)