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

如何使用Cypress对Cytoscape.js画布模拟按住Shift的鼠标拖拽操作

Cypress 按住Shift拖拽Cytoscape.js画布实现方案

问题原因

现有代码无法触发拖拽,核心是两个问题:

  • 标准拖拽的事件触发流程不完整,缺少中间的mousemove事件,仅触发mousedown+mouseup只会被识别为单击操作
  • 未显式在事件参数中声明鼠标左键标识、Shift按键状态,Cytoscape.js的事件监听逻辑依赖这些参数判断组合键操作

修复后代码

// 锁定Shift键为按下状态
cy.get('body').type('{shift}', { release: false });

cy.get('canvas').first()
  // 1. 起始位置按下鼠标左键
  .trigger('mousedown', {
    clientX: 100,
    clientY: 100,
    which: 1, // 1代表鼠标左键,Cypress 13+可替换为 button: 0
    shiftKey: true, // 显式声明事件携带Shift按下状态
    force: true,
    bubbles: true
  })
  // 模拟拖拽过程的移动动画
  .wait(800)
  // 2. 触发鼠标移动到目标坐标
  .trigger('mousemove', {
    clientX: 400,
    clientY: 400,
    which: 1,
    shiftKey: true,
    force: true,
    bubbles: true
  })
  .wait(200)
  // 3. 释放鼠标左键
  .trigger('mouseup', { force: true });

// 操作结束后释放Shift键
cy.get('body').type('{shift}');

适配注意事项

  • 如果你的画布存在视口偏移,可将clientX/clientY替换为offsetX/offsetY直接使用相对于canvas元素自身的坐标
  • 如果Cytoscape绑定的是pointer系列事件,可以把所有trigger的事件名替换为pointerdown/pointermove/pointerup,参数保持一致即可

内容的提问来源于stack exchange,提问作者canbax

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:24:08