使用XCode 7 UITest测试元素是否可见

时间:2015-10-20 21:28:01

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

我想验证某个元素是否可见,具体取决于其.hidden属性,但我找不到使用新的Xcode 7 UI测试内容的有效方法。

我已尝试使用myelement.existsmyelement.hittable,但它们似乎并没有像我预期的那样发挥作用。我想他们与hidden属性一起工作。一个隐藏的元素不应该存在且不可命中......但这不是当前的行为(我可以理解exists行为......但隐藏的元素应该是不可命中的IMO)。

还有另一种方法来验证"隐藏"适当的价值?

6 个答案:

答案 0 :(得分:28)

从Xcode 7.1 Beta 3开始,UI测试目前不支持验证元素的可见性。我建议提交雷达以引起对Apple的必要关注。

Xcode 7.1解决了这个问题。 hittable现在检查元素是否正确。

答案 1 :(得分:9)

1)我正在使用Xcode 7.3中的swift测试UI,我使用.hittable和.exists来测试标签是否隐藏,它们都有效。我测试的是真实的'并且' false'确保两种方式都符合结果。

我有一个标签,其静态文字为" Track Info"并设置为首次加载应用时隐藏,然后稍后按下按钮显示标签,这是显示标签后的结果。

//测试失败

let trackInfoLabel = app.staticTexts["Track info"]
XCTAssertEqual(trackInfoLabel.exists, true)

XCTAssertEqual(trackInfoLabel.hittable, true)

//测试通过

XCTAssertEqual(trackInfoLabel.exists, false)
XCTAssertEqual(trackInfoLabel.hittable, false)

//测试通过

let trackInfoLabel = app.staticTexts["Track Info"]
XCTAssertEqual(trackInfoLabel.exists, true)

XCTAssertEqual(trackInfoLabel.hittable, true)

//测试失败

XCTAssertEqual(trackInfoLabel.exists, false)
XCTAssertEqual(trackInfoLabel.hittable, false)

当我按下按钮隐藏标签时,所有结果都相反。这确认了两个属性(hittable和exists)适用于label.hidden设置。

2)另一种找出元素是否隐藏的方法,你可以做的是element.frame.size.width == 0 || element.frame.size.height == 0

答案 2 :(得分:3)

XCUIElement.hittable适用于我(在我的特定测试用例中,我正在检查几个UIButton元素的可见性) - 确定它不是一个正确的方法来做到这一点

答案 3 :(得分:2)

下一个代码对我有用。 在测试结束时,您可以通过以下代码:

while ([app.staticTexts matchingIdentifier:@"accesibilityId"].count > 0) {
        sleep(1);
    }

答案 4 :(得分:1)

我同意hittable并不总是适用于按钮(Swift 2.0,XCode 7.2)

我刚刚发现如果按钮可见,你只能在按钮中找到它,而如果按钮被隐藏,你也可以在staticTexts中找到它的标签!

XCTAssertFalse(app.buttons["Log out"].exists && app.staticTexts["Log out"].exists) // This button is visible (hidden = false)
XCTAssert(app.buttons["Log in"].exists && app.staticTexts["Log in"].exists) // This one is hidden

Hacky,但适用于按钮。 Apple应该只在.hidden.visible

上引入.hittable.exists

答案 5 :(得分:0)

我的解决方案是动态添加accessibilityIdentifier

func someMethod() {
    label.isHidden = true
    label. accessibilityIdentifier = "isHidden"
}

func someOtherMethod {
    label.isHidden = false
    label. accessibilityIdentifier = "isVisible"
}

并且在UITest中你可以将它用作

if app.staticTexts["MyLabel"].identifier == "isHidden" {
    dosomething()
}