You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 02:35:32