UITesting Swift用于分段控制

时间:2018-02-20 15:16:59

标签: swift xcode uilabel uisegmentedcontrol xcode-ui-testing

我有一个标签,指示所选的段文本。

默认情况下,label.text ="时间表"

加载细分时,我会用选定的细分文字更新此标签文字。

在我的UITestCase中,我有以下代码: -

func testTargetMotionSettings() {
    let app = XCUIApplication() // root of tree of UI elements
//        app.segmentedControls.buttons["Settings"].tap()

    let outputLabel = app.staticTexts.matching(identifier: "Stimulus motion type").element

//        app.buttons["Departures"].tap()
    XCTAssertEqual((outputLabel.value as! String), "Departures")

    app.buttons["Arrivals"].tap()
    XCTAssertEqual((outputLabel.value as! String), "Arrivals")

}

所以"刺激运动类型"是给予标签的标识符 enter image description here

但它失败了" XCTAssertEqual失败:("")不等于("离开") - "

请帮忙

2 个答案:

答案 0 :(得分:0)

您无法以这种方式访问​​元素的文本。 outputlabel是一个XCUIElement对象,它的值不是标签的文本! 所以基本上你没有权限访问你的UILabel。

我建议您使用一些框架,例如KIF,它们将在UnitTest Target中,您可以访问您的类和项目中的所有内容。但是在UITest目标中,只使用XCUITest元素是如此有限。

例如,使用KIF,您可以通过以下方式找到您的segmentController对象:

let segmentController = tester().waitForView(withAccessibilityLabel: "SegmentViewAccessabilityLabel") as? SegmentedControllerView

答案 1 :(得分:0)

只要您尚未指定辅助功能标签,UILabel就会自动将其文本用于辅助功能。这意味着您可以使用XCUIElement.label

访问标签文本
func testTargetMotionSettings() {
    let app = XCUIApplication()
    let outputLabel = app.staticTexts["Stimulus motion type"]

    app.buttons["Departures"].tap()
    XCTAssertEqual(outputLabel.label, "Departures")

    app.buttons["Arrivals"].tap()
    XCTAssertEqual(outputLabel.label, "Arrivals")
}