所以几天前我开始使用' new' XCUI用于技术评估目的的测试框架。我发现系统非常不稳定,因为测试开始失败(通常,按下按钮使用.tap()只是不触发按钮操作)我需要重新启动Xcode并清除DerivedData缓存以使其再次工作。但是这一件事我根本无法工作 - 这是关于最简单的UI测试用例:
我有一个UIButton和一个UILabel。 UILabel最初有一个文本"初始文本"。按钮的标签是" SHOW MESSAGE"。按下按钮时,标签的文本将更改为"新文本"。显然这在运行应用程序时有效。 ;)
但是,当我运行以下XCUI测试时(应用实例已在setup()中初始化并启动()):
app.buttons["SHOW MESSAGE"].tap()
XCTAssert(app.staticTexts["new text"].exists)
测试在100%的时间内失败。当我使用print(app.staticTexts.debugDescription)
打印出(在.tap()调用之后)静态文本时,我可以在那里看到我的标签,但是原始文本是"初始文本"。
所有这些XCUI的东西仍然只是真正的alpha东西还是什么?
答案 0 :(得分:0)
在标签上设置辅助功能标识符,并使用XCUIElement.label检索文本。
XCTAssertEqual("new text", app.staticTexts["yourAccessibilityLabel"].label)
这应该从标签中检索最新的文本。
点击按钮后,应拍摄新的视图层次结构快照。当您尝试查找标签的新值时,应该有一个调试日志显示此信息。它不应该提到使用任何缓存的快照。
答案 1 :(得分:0)
用expectationForPredicate尝试。代码如下:
let exists = NSPredicate(format: "exists == 1")
let label = app.staticTexts["new text"]
expectationForPredicate(exists, evaluatedWithObject: label, handler: nil)
waitForExpectationsWithTimeout(5) { error in
if error != nil {
assertionFailure("error")
}
}
干杯
答案 2 :(得分:0)
所以事实证明这是需要在setUp()方法中添加1秒sleep()以允许框架正确初始化。叹。