UILabel的新文本值未在XCUI Test

时间:2016-07-02 17:15:24

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

所以几天前我开始使用' 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东西还是什么?

3 个答案:

答案 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()以允许框架正确初始化。叹。