使用 XCUITest 测试 UIView 是否被隐藏

Test whether a UIView is hidden using XCUITest

如何使用 XCUITest 测试视图是否被隐藏?视图有时会被隐藏(在 Xcode 中设置如下:Hidden view) 我如何使用 Swift 在 XCUITest 中对此进行测试?在我的例子中,视图只是一个标签。我试过这样的事情: XCTAssertFalse(app.staticTexts["pushNotificationInstruction"].accessibilityElementsHidden) 。但事实并非如此。 accessibilityElementsHidden 与隐藏视图不同。谢谢

遗憾的是,目前使用 XCUITest 无法做到这一点。这是一个开发者论坛帖子,其中一位 Apple 工程师建议针对这个确切问题提交雷达:

https://forums.developer.apple.com/message/46271

我个人提交了一些关于无法从 XCUITest 中访问 UIView 的某些属性所施加的限制的雷达。我鼓励您也这样做,并提供由于 XCUITest 中的这一缺陷而无法进行测试的场景的详细信息。

您可以断言该视图不存在,并在它存在时使用另一个测试来检查场景。也许有点脆弱,但这可以解决你的问题。

let viewControllerShown = app.otherElements["view_myviewcontroller"].waitForExistence(timeout: 5)
XCTAssert(viewControllerShown)
let instructionViewExists = app.staticTexts["pushNotificationInstruction"].exists
XCTAssertFalse(instructionViewExists)

权宜之计是在其accessibilityidentifier.

中携带视图的可见性状态

在您的视图控制器中:

view.isHidden = hideView
view.accessibilityidentifier = "view1"+(hideView ? "hidden" : "")

在你的测试中:

XCTAssert(app.otherElements["view1"].exists)

XCTAssertFalse(app.otherElements["view1"].exists)

正在查看 exist 的文档:

The fact that an element exists does not imply that it is hittable. Elements can exist offscreen, or exist onscreen but be hidden by another element, causing their isHittable property to return false.

表示可以检查:

if uiElement.exists && uiElement.isHittable {
    XCTFail()
}