CapybaraにはElementにdrag_toというメソッドがあり簡単にドラッグ&ドロップできるのですが、これはドロップ先のElementを指定し、その真ん中にドロップします。
もう少し細かい制御をしたかったのですが、そういうメソッドはないっぽいです(詳しく読んでませんがISSUEが立ってクローズされてるので実装しない方向で話がまとまってるようです)。
そこでSeleniumDriverのAPIに直接アクセスし実現してみました。
# sessionはCapybara::Session
driver = session.driver.browser
driver.action.drag_and_drop_by(
# targetはCapybara::Node::Elementでドラッグするエレメント
target.native,
# toもCapybara::Node::Elementでドロップする対象
to.native.location.x - target.native.location.x,
to.native.location.y - target.native.location.y
).perform
Capybara::Session.driver.browser
でSelenium::WebDriver::[YouBrowser]::Driver
に、Capybara::Node::Element.native
でSelenium::WebDriver::Element
にアクセス可能です。
drag_and_drop_byはオフセットを指定してドラッグ&ドロップします。SeleniumWebDriverのメソッドはSeleniumWebDriverのドキュメントでどうぞ。