我正在尝试使用Xcode7beta2中提供的新UI测试来编写一个测试用例。该应用程序有一个登录屏幕,它会调用服务器进行登录。由于这是一个异步操作,因此存在与此相关的延迟。
在继续下一步之前,有没有办法在XCTestCase中造成延迟或等待机制?
没有合适的文档可用,我查看了这些类的头文件。找不到任何与此相关的东西。
有什么想法/建议吗?
发布于 2015-08-26 21:32:48
异步UI测试是在Xcode7Beta4中引入的。要显示,您可以执行以下操作:
let app = XCUIApplication()
app.launch()
let label = app.staticTexts["Hello, world!"]
let exists = NSPredicate(format: "exists == 1")
expectationForPredicate(exists, evaluatedWithObject: label, handler: nil)
waitForExpectationsWithTimeout(5, handler: nil)
更多details about UI Testing可以在我的博客上找到。
发布于 2015-12-12 03:29:55
另外,你可以只睡觉:
sleep(10)
因为UITests在另一个进程中运行,所以这是可行的。我不知道这是否明智,但它是有效的。
发布于 2017-02-14 17:28:37
从Xcode8.3开始,我们可以使用XCTWaiter
http://masilotti.com/xctest-waiting/
func waitForElementToAppear(_ element: XCUIElement) -> Bool {
let predicate = NSPredicate(format: "exists == true")
let expectation = expectation(for: predicate, evaluatedWith: element,
handler: nil)
let result = XCTWaiter().wait(for: [expectation], timeout: 5)
return result == .completed
}
另一个技巧是编写一个wait
函数,这归功于John Sundell向我展示了它
extension XCTestCase {
func wait(for duration: TimeInterval) {
let waitExpectation = expectation(description: "Waiting")
let when = DispatchTime.now() + duration
DispatchQueue.main.asyncAfter(deadline: when) {
waitExpectation.fulfill()
}
// We use a buffer here to avoid flakiness with Timer on CI
waitForExpectations(timeout: duration + 0.5)
}
}
并像这样使用它
func testOpenLink() {
let delegate = UIApplication.shared.delegate as! AppDelegate
let route = RouteMock()
UIApplication.shared.open(linkUrl, options: [:], completionHandler: nil)
wait(for: 1)
XCTAssertNotNil(route.location)
}
https://stackoverflow.com/questions/31182637
复制相似问题