我想验证某个元素是否可见,具体取决于其.hidden
属性,但我找不到使用新的Xcode 7 UI测试内容的有效方法。
我已尝试使用myelement.exists
和myelement.hittable
,但它们似乎并没有像我预期的那样发挥作用。我想他们与hidden
属性一起工作。一个隐藏的元素不应该存在且不可命中......但这不是当前的行为(我可以理解exists
行为......但隐藏的元素应该是不可命中的IMO)。
还有另一种方法来验证"隐藏"适当的价值?
答案 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()
}