我想验证一个元素是否可见取决于它的.hidden
属性,但我找不到使用新的Xcode 7 UI测试的有效方法。
我试过myelement.exists
和myelement.hittable
,但它们似乎没有像我预期的那样工作。我想他们与hidden
财产一起工作。一个隐藏的元素不应该存在并且不可命中......但这不是当前的行为(我可以理解exists
行为......但隐藏的元素应该是不可命中的IMO)。
还有另一种方法来验证“隐藏”的财产价值吗?
从Xcode 7.1 Beta 3开始,UI测试目前不支持验证元素的可见性。我建议备案雷达给苹果带来必要的关注。
Xcode 7.1解决了这个问题。 hittable
现在检查元素是否正确。
1)我正在使用Xcode 7.3中的swift测试UI,我使用.hittable和.exists来测试标签是否隐藏,它们都可以工作。我测试'true'和'false'以确保两种方式都符合结果。
我有一个标签,其静态文本是“Track Info”并设置为在首次加载app时隐藏,然后我按下按钮显示标签,这是显示标签后的结果。
//测试失败
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
XCUIElement.hittable对我有用(在我的特定测试用例中,我正在检查几个UIButton元素的可见性) - 确定它不是一个正确的方法来做到这一点
下一个代码对我有用。在测试结束时,您可以通过以下代码:
while ([app.staticTexts matchingIdentifier:@"accesibilityId"].count > 0) {
sleep(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
我的解决方案是动态添加辅助功能标识符
func someMethod() {
label.isHidden = true
label. accessibilityIdentifier = "isHidden"
}
func someOtherMethod {
label.isHidden = false
label. accessibilityIdentifier = "isVisible"
}
你可以在UITest中使用它
if app.staticTexts["MyLabel"].identifier == "isHidden" {
dosomething()
}