我在 ZStack 中有一个带有前景图像的按钮:
Button(action: {
self.highlighted = !self.highlighted
}) {
ZStack {
Text("Text")
if self.highlighted {
Image("highlighted").resizable()
}
}
}
仅当变量为 true 时,前景图像(“突出显示”)才可见。单击按钮可翻转突出显示的变量。因此,如果单击该按钮,它将突出显示,如果再次单击该按钮,它将不再突出显示。我现在想要一个 UiTest,其中单击按钮并测试检查“突出显示”的图像是否存在。这就是我作为 UiTest 所拥有的,但它在最后一个断言中失败了:
func test_highlight() {
let app = XCUIApplication()
let button = app.buttons["my_button"]
XCTAssertTrue(button.exists)
button.tap()
XCTAssertTrue(button.images["highlighted"].exists) // <-- Fails here
}
这在 UiTests 中可能吗?如果是,怎么办?如果不是,还有什么替代方案?
好的,可行。但说实话,我真的不喜欢在项目文件中编写代码只是为了让测试工作。这很遗憾,如果这是测试它的唯一方法
我同意,并且我不会使用该标识符。然而,公平地说,你所要求的并不是我认为你通常在 UI 测试级别测试的东西 ???? ?
也许通过单元测试资源和业务逻辑(在你的书中),并通过快照测试来测试 UI(看起来不错)?
就我个人而言,我会在这里通过用户集成流程中元素的可访问性/值/标签等来验证 UI。
Example
如果将按钮配置为可正确访问,则可以验证按钮的“选定”状态。
let localisedstring = “localised-text”
Button(action: {
self.highlighted = !self.highlighted
}) {
ZStack {
Text(localisedstring)
if self.highlighted {
Image("highlighted").resizable()
}
}
}
.accessibilityTraits(isHighlighted ? [.button, .selected] : [.button])
.accessibilityLabel(localisedString)
然后在测试中你可以这样做:
// Given base button
let button = app.buttons[“button-id”]
XCTAssertFalse(button.isSelected)
// When user taps
button.tap()
// Then button should be selected
XCTAssertTrue(button.isSelected)
// And whatever-else that button should do
与使用标识符类似,您已使其可测试,并且更好地支持辅助功能用户,例如语音!
编辑:写在我的iPad上,所以请视为伪????♂️
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)