如何在Swift测试中检测View内Toolbar中的指定元素?
解决ViewInspector无法检测Toolbar中元素的问题
在使用ViewInspector测试SwiftUI视图时,Toolbar内的元素不在主视图树的直接遍历路径中,不能通过全局find(viewWithId:)直接定位。需要按照NavigationStack → Toolbar → ToolbarItem的层级逐步查找。
修改你的测试代码如下:
it ("Has an item in the toolbar") { // 先定位到NavigationStack let navigationStack = try view.navigationStack() // 获取对应的Toolbar let toolbar = try navigationStack.toolbar() // 通过位置找到目标ToolbarItem let toolbarItem = try toolbar.toolbarItem(placement: .bottomBar) // 在ToolbarItem内部查找目标Button expect(try toolbarItem.find(viewWithId: "button")).notTo(throwError()) }
关键说明:
- 层级定位:Toolbar是附加在NavigationStack上的修饰器,必须先获取NavigationStack的Inspector实例,才能访问其内部的Toolbar。
- ToolbarItem匹配:除了通过
placement参数指定位置,也可以用索引toolbarItem(at: 0)来获取对应位置的ToolbarItem(适合Toolbar内只有一个元素的场景)。 - 内部查找:找到ToolbarItem后,再在其内部通过
find(viewWithId:)查找目标元素,就能成功定位到Toolbar中的Button。
内容的提问来源于stack exchange,提问作者Strassenrenner
相关产品推荐
相关产品推荐

