我正在尝试编写一个涉及拖放(通过SortableJS)以对表上的某些东西进行排序的测试。
基本上,这是我目前测试中的内容:
handle = find("[data-item-id='#{itemA.id}'] [data-js-sortable-handle]")
targetRow = find("[data-item-id='#{itemB.id}']")
handle.drag_to(targetRow)
这类作品,除了拖动到我的鼠标实际位置而不是拖动到targetRow
之外。因此,只有当我将鼠标放在正确的位置并且没有无头运行鼠标时,我的测试才能通过。
我不确定这是不是因为水豚,硒还是我正在使用的库而引起的问题。
答案 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配合使用会更好。