首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Xcode UI测试用例中的延迟/等待

Xcode UI测试用例中的延迟/等待
EN

Stack Overflow用户
提问于 2015-07-02 18:55:50
回答 10查看 117K关注 0票数 198

我正在尝试使用Xcode7beta2中提供的新UI测试来编写一个测试用例。该应用程序有一个登录屏幕,它会调用服务器进行登录。由于这是一个异步操作,因此存在与此相关的延迟。

在继续下一步之前,有没有办法在XCTestCase中造成延迟或等待机制?

没有合适的文档可用,我查看了这些类的头文件。找不到任何与此相关的东西。

有什么想法/建议吗?

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2015-08-26 21:32:48

异步UI测试是在Xcode7Beta4中引入的。要显示,您可以执行以下操作:

代码语言:javascript
复制
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可以在我的博客上找到。

票数 180
EN

Stack Overflow用户

发布于 2015-12-12 03:29:55

另外,你可以只睡觉:

代码语言:javascript
复制
sleep(10)

因为UITests在另一个进程中运行,所以这是可行的。我不知道这是否明智,但它是有效的。

票数 244
EN

Stack Overflow用户

发布于 2017-02-14 17:28:37

从Xcode8.3开始,我们可以使用XCTWaiter http://masilotti.com/xctest-waiting/

代码语言:javascript
复制
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向我展示了它

代码语言:javascript
复制
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)
  }
}

并像这样使用它

代码语言:javascript
复制
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)
}
票数 36
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31182637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档