Cypress with OpenLayers - 如何模拟 ctrl + 鼠标拖动



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

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

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

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

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

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

我不知道接下来该怎么尝试。我缺少.click()的属性吗?或者这是OpenLayers或Cypress的潜在错误/问题?

编辑:我正在使用赛普拉斯4.8.0和OpenLayers 6.3.1

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

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

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

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

祝你好运,让我知道情况如何!

如果你有一个正确的DnD源和目标元素设置,那么trigger将起作用:

describe('DnD simulation test', () => {
it('finds the content "type"', () => {
cy.visit('https://zikro.gr/dbg/so/62303304/dnd-with-cypress.html');
// #dz-a -> Dropzone A, which the #drag is inside when page loads
// #dz-b -> Dropzone B, which the #drag element will be inside after DnD simulation
cy.get('#drag').trigger('dragstart', { ctrlKey: true });
cy.get('#dz-b').trigger('drop', { ctrlKey: true });
cy.get('#drag').trigger('dragend', { ctrlKey: true });
// We just test if the destination element has 1 child after the DnD simulation.
// When the page loads it has no children at all, but after DnD simlation it has exactly 1 element
cy.get('#dz-b').children().should('have.length', 1);
});
});

URLhttps://zikro.gr/dbg/so/62303304/dnd-with-cypress.html中的页面已启动,它具有 DnD 功能,您可以使用上述代码并测试和检查控制台中也将检测Ctrl键的日志。它测试放置目标在事件模拟后是否具有子元素。当然,您可以执行任何其他测试来证明源已从A下降到B目的地。

相关内容

  • 没有找到相关文章

最新更新