我想验证一个元素是否可见,取决于其.hidden
属性,但是我找不到一种有效的方法来使用新的Xcode 7 UI测试工具进行操作。
我尝试过使用myelement.exists
和myelement.hittable
,但它们似乎不能按照我期望的那样工作。 我想它们与hidden
属性一起使用。隐藏的元素不应该存在,并且无法点击...但这不是当前的行为(我可以理解exists
的行为...但是我认为隐藏的元素不应该是可点击的)。
是否有另一种验证“hidden”属性值的方法?
我想验证一个元素是否可见,取决于其.hidden
属性,但是我找不到一种有效的方法来使用新的Xcode 7 UI测试工具进行操作。
我尝试过使用myelement.exists
和myelement.hittable
,但它们似乎不能按照我期望的那样工作。 我想它们与hidden
属性一起使用。隐藏的元素不应该存在,并且无法点击...但这不是当前的行为(我可以理解exists
的行为...但是我认为隐藏的元素不应该是可点击的)。
是否有另一种验证“hidden”属性值的方法?
hittable
会检查元素是否正确。1)我正在使用Xcode 7.3中的Swift测试UI,并且同时使用.hittable和.exists来测试标签是否隐藏,它们都能正常工作。我测试“true”和“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)
当我按下按钮隐藏标签时,所有结果都变成了相反的。这证实了label.hidden属性的两个特性(hittable和exists)都可以用于设置。
2) 另一种判断元素是否隐藏的方法是 element.frame.size.width == 0 || element.frame.size.height == 0
XCUIElement.hittable 对于我来说效果很好(在我的特定测试用例中,我正在检查几个 UIButton 元素的可见性)- 虽然我相当确定这不是正确的方法
以下代码对我有效。 在测试结束时,您可以将代码粘贴如下:
while ([app.staticTexts matchingIdentifier:@"accesibilityId"].count > 0) {
sleep(1);
}
.isHittable
:
使用
.isHittable
仅在元素已经可见且可以被点击时返回 true。对于滚动视图中的屏幕外元素,即使调用 click()、tap() 或其他与点击点相关的交互方法也会返回 false,除非该元素将被滚动到可点击的位置。
.isHittable
属性是可行的,因为隐藏的元素在屏幕上不可见或无法点击。我同意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
虽然有点巧妙,但适用于按钮。苹果应该引入.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()
}
NSAccessibilityCheckBoxRole
辅助功能角色的自定义NSControl
的hittable
返回false
。辅助功能检查器没有发现任何问题或错误,但是在悬停时无法在检查器面板中显示其属性。看起来我错过了一些重要的东西。 - AndriyXCUIElement
上的这个属性现在被称为isHittable
。值得阅读文档,了解它可能返回true
或false
的情况。 - mokagio