首页 > 解决方案 > Cypress 与 OpenLayers - 如何模拟 ctrl + 鼠标拖动

问题描述

我正在尝试使用 Cypress 在 OpenLayers 地图上模拟 ctrl + 鼠标拖动。

我设法让 OpenLayers 注册单击/赛普拉斯事件(例如,单击以创建功能)的唯一方法是使用.click() 例如

cy.get('#map').click(845, 710);

如果我使用.trigger()and pointerdown/ mousedown/dragstart它要么静默失败,要么抛出错误。无论哪种方式,它都行不通。

因为.click()也会发出pointerdown/pointerup事件,所以我似乎无法使用它来模拟 ctrl + 鼠标拖动。

此外,要按 ctrl,我使用以下命令:cy.get('body').type('{ctrl}', {release: false})- 这有效。

我不知道下一步该尝试什么。有没有.click()我失踪的财产?或者这是 OpenLayers 或 Cypress 的潜在错误/问题?

编辑:我正在使用 Cypress 4.8.0 和 OpenLayers 6.3.1

标签: javascriptopenlayerscypressopenlayers-6

解决方案


您有两种可能性:一,这是赛普拉斯中的一个错误,或者二,您处理错误的事件。

赛普拉斯工作的基本方式是通过浏览器内的 API 运行事件,而不是模拟实际的键盘或鼠标操作(来自赛普拉斯员工),因此您只能模拟浏览器侦听的单个事件。所以我看了一下赛普拉斯的做法,发现人们过去曾遇到过问题。您可以在该链接中的 Github 讨论末尾尝试该片段,我不确定这是否会起作用。

在这种情况下,您正在模拟一个将Event.ctrlKey设置为 true 的 Click 事件。(或者至少:这就是你想要发生的事情。)为了进一步调试,我会记录事件本身,并检查是否设置了 event.ctrlKey:

  • 如果它是假的 - 你去了,这是赛普拉斯的一个错误。
  • 如果这是真的,那么赛普拉斯工作正常,你只是在以不寻常的方式收听 ctrl/click 事件,如果你切换到这样的东西,会很好。

祝你好运,让我知道进展如何!


推荐阅读