Jei*_*wan 5 xcode ui-testing ios swift xcode-ui-testing
在XCode中测试UI时是否有办法等待所有网络请求完成?
我有一个应用程序发送HTTP请求以从服务器获取一些数据,并且在UI测试中,我想等待在继续之前检索这些数据.目前我正在使用,sleep(1)但这种方法似乎不可靠.
最好的办法是等待一些UI元素出现或消失.想一想:
该框架就像一个用户.它并不关心什么代码在底层运行.唯一重要的是屏幕上可见的内容.
也就是说,您可以在这里等待标题为"Go!"的标签.出现在UI测试中.
let app = XCUIApplication()
let goLabel = self.app.staticTexts["Go!"]
XCTAssertFalse(goLabel.exists)
let exists = NSPredicate(format: "exists == true")
expectationForPredicate(exists, evaluatedWithObject: goLabel, handler: nil)
app.buttons["Ready, set..."].tap()
waitForExpectationsWithTimeout(5, handler: nil)
XCTAssert(goLabel.exists)
Run Code Online (Sandbox Code Playgroud)
您还可以将其提取到辅助方法中.如果你使用一些Swift编译器魔法,你甚至可以在调用该方法的行上获得失败消息.
private fund waitForElementToAppear(element: XCUIElement, file: String = #file, line: UInt = #line) {
let existsPredicate = NSPredicate(format: "exists == true")
expectationForPredicate(existsPredicate, evaluatedWithObject: element, handler: nil)
waitForExpectationsWithTimeout(5) { (error) -> Void in
if (error != nil) {
let message = "Failed to find \(element) after 5 seconds."
self.recordFailureWithDescription(message, inFile: file, atLine: line, expected: true)
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1028 次 |
| 最近记录: |