SwiftUI:如何断言Sheet视图已显示?
如何测试SwiftUI Sheet是否可见?
我来帮你解决这个UI测试的问题~你当前的断言失效主要有两个原因:一是Sheet里的文本元素没有设置可访问性标识,二是错误地用了textFields去查找普通Text控件(textFields只对应TextField输入框,普通文本属于staticTexts分类)。
下面是具体的解决步骤:
1. 给Sheet内的关键元素添加可访问性标识符
先修改你的Sheet代码,给需要检测的文本加上专属的标识符,让UI测试能精准定位到它们:
struct MySheet: View { @Binding var isPresented: Bool var body: some View { GeometryReader { metrics in VStack (spacing:0) { ZStack { Color(UIColor.lightGray) Text("header") .accessibilityIdentifier("sheet-header") // 添加唯一标识符 } .frame(width: metrics.size.width, height: metrics.size.height * 0.15) ZStack { Color(UIColor.darkGray) Text("text") .accessibilityIdentifier("sheet-content-text") // 可选,方便后续其他检测 } .frame(width: metrics.size.width, height: metrics.size.height * 0.85) } } } }
2. 在UI测试中正确断言Sheet状态
现在可以通过标识符找到对应的文本元素,以此判断Sheet是否成功显示:
// 先触发Sheet弹出的操作(比如点击按钮,根据你的实际场景补充) // app.buttons["trigger-sheet"].tap() // 断言Sheet内的header元素存在,即Sheet已显示 XCTAssertTrue(app.staticTexts["sheet-header"].exists)
这里用staticTexts来匹配普通文本元素,才是正确的UI测试控件分类。
额外技巧:直接检测Sheet容器
如果你不想依赖内部元素,也可以直接检测Sheet的容器视图:
XCTAssertTrue(app.sheets.element.exists)
不过这种方法精准度稍低,如果有多个Sheet场景容易混淆,更推荐第一种基于内部关键元素的检测方式。
内容的提问来源于stack exchange,提问作者L3n95
相关产品推荐
相关产品推荐

