【问题标题】:Capybara drag_to dragging to mouse location instead of targetCapybara drag_to 拖动到鼠标位置而不是目标
【发布时间】:2019-06-07 20:34:19
【问题描述】:

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

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

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

handle.drag_to(targetRow)

这种工作,除了拖动到targetRow 之外,它拖动到我的鼠标实际所在的位置。因此,只有当我将鼠标放在正确的位置并且没有无头运行时,我的测试才会通过。

我不确定这是否更多是 Capybara、Selenium 的问题,或者仅仅是因为我正在使用的库。

【问题讨论】:

    标签: ruby-on-rails selenium capybara sortablejs


    【解决方案1】:

    根据确切的拖放类型(JS 模拟与 HTML5),sortablejs 库使用 Capybara 必须做不同的事情。我真的不知道它使用的任何一种方法如何拖到错误的元素(发生 drop/mouse_up 事件的地方),但如果您的应用程序依赖于这些位置,事件中报告的位置肯定可能会关闭。 Capybara 测试套件中对这两种类型的拖动都有测试,它们确实通过了无头和有头模式,因此它绝对应该至少在基本情况下工作。如果你能提供一个简单的例子来说明你的问题,请在 Capybara 项目中提出问题并附上示例,我会看看。

    更新:我查看了SortableJS 代码,发现至少有一个原因导致 Capybaras HTML5 DND 仿真与其不兼容。 SortableJS 通过setTimeout 运行一些设置代码来处理dragstart 事件。由于 Capybaras 代码都在一个脚本中,SortableJS dragstart 设置代码直到发生阻止元素移动的放置事件之后才会执行。我对 Capybara 进行了一些更改并发布了 3.23.0,它应该可以更好地与 SortableJS 一起使用。

    【讨论】:

    • 我尝试了sortablejs 分支,它仍在将项目移动到鼠标的位置。但是,无头运行它们只是使测试失败而不是引发错误。我可以为SortableJS 提出问题,看看他们是否可以做一些不同的事情。
    • @NateThePirate 所做的更改与使用 sortablejs 的测试一起被合并到最新版本中 - 它通过了,我需要一个自包含的示例来演示该问题
    • 好的。我会仔细检查我在做什么,因为这可能是我正在做的事情的问题。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2017-07-29
    • 1970-01-01
    • 2023-04-01
    • 2013-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-21
    相关资源
    最近更新 更多