UI测试 - 等待对话框然后点击确定按钮并检查控制器

时间:2016-03-30 16:26:30

标签: ios swift alert xcode-ui-testing ui-testing

我正在尝试为我的控制器创建UI测试。我填写文本字段并点击按钮,现在我想等待对话框出现,当它出现时我想点击确定按钮并检查显示的控制器。

这是我测试方法的结束:

let alert = app.alerts["Error"]
let exists = NSPredicate(format: "exists == 1")
self.expectationForPredicate(exists, evaluatedWithObject: alert, handler: nil)
self.waitForExpectationsWithTimeout(5.0) { (error) in

  XCTAssertNil(error, "Something went horribly wrong")
  alert.buttons["Ok"].tap()
  XCTAssertEqual(app.navigationBars.element.identifier, "RegistrationViewController")
}

问题是测试被评估为失败,但是当我看到手机时,会出现对话框并点击确定按钮,控制器也很好。

我在调试窗口中遇到此错误:

  

UI测试失败 - 未找到警告匹配

我猜Tap有问题。我该如何解决?我做错了什么?感谢

2 个答案:

答案 0 :(得分:4)

waitforExpectationsWithTimeout()仅在超出超时时调用完成处理程序。只需在异步等待调用下移动控制器断言即可。

let alert = app.alerts["Error"]
let exists = NSPredicate(format: "exists == 1")

expectation(for: exists, evaluatedWith: alert, handler: nil)
waitForExpectations(timeout: timeout, handler: nil)

alert.buttons["Ok"].tap()
XCTAssertEqual(app.navigationBars.element.identifier, "RegistrationViewController")

答案 1 :(得分:0)

乔的答案针对Swift 4.2进行了更新:

let alert = app.alerts["Error"]
let exists = NSPredicate(format: "exists == 1")

expectation(for: exists, evaluatedWith: alert, handler: nil)
waitForExpectations(timeout: 5.0, handler: nil)

alert.buttons["Ok"].tap()
XCTAssertEqual(app.navigationBars.element.identifier, "RegistrationViewController")