javascript - 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
解决方案
您有两种可能性:一,这是赛普拉斯中的一个错误,或者二,您处理错误的事件。
赛普拉斯工作的基本方式是通过浏览器内的 API 运行事件,而不是模拟实际的键盘或鼠标操作(来自赛普拉斯员工),因此您只能模拟浏览器侦听的单个事件。所以我看了一下赛普拉斯的做法,发现人们过去曾遇到过问题。您可以在该链接中的 Github 讨论末尾尝试该片段,我不确定这是否会起作用。
在这种情况下,您正在模拟一个将Event.ctrlKey设置为 true 的 Click 事件。(或者至少:这就是你想要发生的事情。)为了进一步调试,我会记录事件本身,并检查是否设置了 event.ctrlKey:
- 如果它是假的 - 你去了,这是赛普拉斯的一个错误。
- 如果这是真的,那么赛普拉斯工作正常,你只是在以不寻常的方式收听 ctrl/click 事件,如果你切换到这样的东西,你会很好。
祝你好运,让我知道进展如何!
推荐阅读
- ios13 - pedometer is not working in background mode in ios 13 only
- testing - 如果中间的测试失败,有没有办法中止 TestCafe 中的测试套件?
- android - Android Studio 3.5 Execution failed for task ':android:mergeReleaseResources'
- python - Azure webapps rewriting backslash to slash
- python - Why can't I activate gym form
- path - Webpack 中字体配置的文件加载器
- django - 使用序列化程序在对 Django Rest-Api 的发布请求中获取“错误请求”
- c# - Xamarin Android:在滑动删除之前显示警报
- r - 强制日期作为读取非分隔文本文件的新行
- java - 如何使用不同的参数将一个类调用到另一个类中?