Vaadin迁移后Karibu单元测试无法获取MockedUI中的Dialog
Vaadin 23.3 + Karibu Testing 1.3.23 对话框测试找不到组件的解决方案
检查版本兼容性
Vaadin 23.3 对应的 Karibu Testing 版本需要精确匹配,1.3.23 可能存在兼容缺口。建议升级到适配 Vaadin 23.3 的最新 1.3.x 版本,比如 1.3.35+,修改依赖配置:testImplementation("com.github.mvysny.kaributesting:karibu-testing-v23:1.3.35")确保对话框完成挂载与可见
Vaadin 23 中 Dialog 的渲染逻辑有调整,测试时需等待 UI 完成更新再执行查找:// 触发对话框显示逻辑 targetView.openConfirmDialog() // 等待 Vaadin 处理 UI 变更 _waitForVaadin() // 再执行查找 val dialog = _get<Dialog>()同时确认代码中 Dialog 的
visible属性已设为true,无分支逻辑导致对话框未实际显示。排查自定义_find调用的影响
若测试中多次调用_find后出现问题,需检查:- 搜索根组件是否正确,确保从 UI 根节点而非局部子组件搜索
- 避免在
_find的搜索逻辑中意外修改组件状态(如设置不可见) - 先简化测试逻辑,用
_get验证组件存在后,再逐步加入_find相关代码
验证MockedUI初始化正确性
确保测试类的 MockedUI 初始化符合 Vaadin 23 要求:@BeforeEach fun setup() { MockVaadin.setup { YourCustomUI() } }确认无多个 UI 实例干扰,测试中仅存在一个 MockedUI 实例。
检查Vaadin 23 Dialog API变更
Vaadin 23 对 Dialog 的组件树挂载逻辑有调整,若代码中使用Dialog().open(),可在测试中打印组件树确认 Dialog 是否被正确添加:UI.getCurrent().children.forEach { println("组件树节点:$it") }若未找到 Dialog,需确认显示逻辑是否正确将其加入 UI 组件树。
内容的提问来源于stack exchange,提问作者Mohamed Aziz Tousli
相关产品推荐
相关产品推荐

