如何在Vaadin单元测试中模拟Shift+点击按钮(无需自定义类)
模拟Vaadin 23按钮的Shift+点击操作(单元测试)
无需自定义Button类,直接通过构造带Shift键标记的ClickEvent并触发即可实现,核心是利用Vaadin组件的事件触发机制:
实现代码
import com.vaadin.flow.component.ClickEvent; import com.vaadin.flow.component.button.Button; import org.junit.jupiter.api.Test; public class ButtonShiftClickTest { @Test void testShiftClickBehavior() { Button button = new Button("Click me", event -> { if (event.isShiftKey()) { System.out.println("Shift + click"); } else { System.out.println("Click"); } }); // 构造包含Shift键状态的点击事件 ClickEvent<Button> shiftClickEvent = new ClickEvent<>( button, // 事件源组件 true, // 是否来自客户端(测试场景设为true不影响) 0, 0, // 鼠标坐标(测试场景可填0) 0, 0, // 相对坐标(测试场景可填0) 1, // 点击次数 false, // Ctrl键是否按下 true, // Shift键是否按下 ✅ 关键设置 false, // Alt键是否按下 false // Meta键是否按下 ); // 手动触发事件 button.fireEvent(shiftClickEvent); // 此时会执行"Shift + click"分支逻辑 } @Test void testNormalClickBehavior() { Button button = new Button("Click me", event -> { if (event.isShiftKey()) { System.out.println("Shift + click"); } else { System.out.println("Click"); } }); // 普通点击直接用组件自带方法 button.click(); // 执行"Click"分支逻辑 } }
关键说明
ClickEvent的构造参数中,后四个布尔值分别对应Ctrl、Shift、Alt、Meta键的按下状态,按需调整即可模拟不同的组合键点击。- 这种方式完全基于Vaadin原生API,不需要修改现有组件代码,适配单元测试场景。
内容的提问来源于stack exchange,提问作者Natty
相关产品推荐
相关产品推荐

