水豚drag_to拖动到鼠标位置而不是目标

时间:2019-06-07 20:34:19

标签: ruby-on-rails selenium capybara sortablejs

我正在尝试编写一个涉及拖放(通过SortableJS)以对表上的某些东西进行排序的测试。

基本上,这是我目前测试中的内容:

handle = find("[data-item-id='#{itemA.id}'] [data-js-sortable-handle]")
targetRow = find("[data-item-id='#{itemB.id}']")

handle.drag_to(targetRow)

这类作品,除了拖动到我的鼠标实际位置而不是拖动到targetRow之外。因此,只有当我将鼠标放在正确的位置并且没有无头运行鼠标时,我的测试才能通过。

我不确定这是不是因为水豚,硒还是我正在使用的库而引起的问题。

1 个答案:

答案 0 :(得分:1)

sortablejs库使用Capybara确切地取决于拖放的类型(JS模拟还是HTML5),必须执行不同的操作。我真的看不到它使用的任何一种方法如何拖到错误的元素上(发生drop / mouse_up事件的位置),但是如果您的应用取决于这些位置,则事件中报告的位置肯定有可能关闭。 Capybara测试套件中有两种针对拖拽的测试,它们确实以无头模式和无头模式通过,因此,它至少在基本情况下肯定可以使用。如果您可以提供一个简单的示例来显示您的问题,请通过示例在Capybara项目中提交问题,我将进行介绍。

更新:我查看了SortableJS代码,并发现了Capybaras HTML5 DND仿真与之不兼容的至少一个原因。 SortableJS通过setTimeout运行一些设置代码来处理dragstart事件。由于Capybaras代码全部集中在一个脚本中,因此只有在发生drop事件(阻止元素移动)之后,SortableJS dragstart设置代码才会执行​​。我对Capybara进行了一些更改,并发布了3.23.0,该版本应与SortableJS配合使用会更好。