使用XCode 7 UITest测试元素是否可见

问题描述 投票:27回答:6

我想验证一个元素是否可见取决于它的.hidden属性,但我找不到使用新的Xcode 7 UI测试的有效方法。

我试过myelement.existsmyelement.hittable,但它们似乎没有像我预期的那样工作。我想他们与hidden财产一起工作。一个隐藏的元素不应该存在并且不可命中......但这不是当前的行为(我可以理解exists行为......但隐藏的元素应该是不可命中的IMO)。

还有另一种方法来验证“隐藏”的财产价值吗?

xcode swift ui-testing xcode-ui-testing
6个回答
27
投票

从Xcode 7.1 Beta 3开始,UI测试目前不支持验证元素的可见性。我建议备案雷达给苹果带来必要的关注。

Xcode 7.1解决了这个问题。 hittable现在检查元素是否正确。


9
投票

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


3
投票

XCUIElement.hittable对我有用(在我的特定测试用例中,我正在检查几个UIButton元素的可见性) - 确定它不是一个正确的方法来做到这一点


2
投票

下一个代码对我有用。在测试结束时,您可以通过以下代码:

while ([app.staticTexts matchingIdentifier:@"accesibilityId"].count > 0) {
        sleep(1);
    }

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


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()
}
© www.soinside.com 2019 - 2024. All rights reserved.