使用 Xcode 测试元素是否可见 7 UITest
Testing if an element is visible with Xcode 7 UITest
我想根据元素 .hidden
属性 验证元素是否可见,但我找不到使用新的 Xcode 7 的有效方法UI 测试东西。
我试过 myelement.exists
和 myelement.hittable
,但它们似乎没有像我预期的那样工作。我想他们与 hidden
属性 一起工作。隐藏元素不应该存在并且不可命中...但这不是当前行为(我可以理解 exists
行为...但隐藏元素不应该是可命中的 IMO)。
还有其他方法可以验证 "hidden" 属性 值吗?
自 Xcode 7.1 Beta 3 起,UI 测试目前不支持验证元素的可见性。建议备个雷达,给苹果带来必要的关注。
Xcode 7.1 已修复此问题。 hittable
现在检查元素是否正确。
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 应该在 .hittable
和 .exists
中引入 .hidden
或 .visible
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 设置。
2) 另一种判断元素是否被隐藏的方法是 element.frame.size.width == 0 || element.frame.size.height == 0
我的解决方案是动态添加可访问性标识符
func someMethod() {
label.isHidden = true
label. accessibilityIdentifier = "isHidden"
}
func someOtherMethod {
label.isHidden = false
label. accessibilityIdentifier = "isVisible"
}
在 UITest 中,您可以将其用作
if app.staticTexts["MyLabel"].identifier == "isHidden" {
dosomething()
}
语法现在是 .isHittable
:
isHittable only returns true if the element is already visible and
hittable onscreen. It returns false for an offscreen element in a
scrollable view, even if the element would be scrolled into a hittable
position by calling click(), tap(), or another hit-point-related
interaction method.
使用 .isHittable
属性 会起作用,因为隐藏元素在屏幕上 不可见或不可点击 。
我想根据元素 .hidden
属性 验证元素是否可见,但我找不到使用新的 Xcode 7 的有效方法UI 测试东西。
我试过 myelement.exists
和 myelement.hittable
,但它们似乎没有像我预期的那样工作。我想他们与 hidden
属性 一起工作。隐藏元素不应该存在并且不可命中...但这不是当前行为(我可以理解 exists
行为...但隐藏元素不应该是可命中的 IMO)。
还有其他方法可以验证 "hidden" 属性 值吗?
自 Xcode 7.1 Beta 3 起,UI 测试目前不支持验证元素的可见性。建议备个雷达,给苹果带来必要的关注。
Xcode 7.1 已修复此问题。 hittable
现在检查元素是否正确。
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 应该在 .hittable
和 .exists
.hidden
或 .visible
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 设置。
2) 另一种判断元素是否被隐藏的方法是 element.frame.size.width == 0 || element.frame.size.height == 0
我的解决方案是动态添加可访问性标识符
func someMethod() {
label.isHidden = true
label. accessibilityIdentifier = "isHidden"
}
func someOtherMethod {
label.isHidden = false
label. accessibilityIdentifier = "isVisible"
}
在 UITest 中,您可以将其用作
if app.staticTexts["MyLabel"].identifier == "isHidden" {
dosomething()
}
语法现在是 .isHittable
:
isHittable only returns true if the element is already visible and hittable onscreen. It returns false for an offscreen element in a scrollable view, even if the element would be scrolled into a hittable position by calling click(), tap(), or another hit-point-related interaction method.
使用 .isHittable
属性 会起作用,因为隐藏元素在屏幕上 不可见或不可点击 。