Skip to content

Commit

Permalink
scroll to destination when dragging (#288)
Browse files Browse the repository at this point in the history
  • Loading branch information
toy authored Jan 8, 2025
1 parent bc47918 commit b4eeaf2
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 18 deletions.
19 changes: 13 additions & 6 deletions lib/capybara/cuprite/browser.rb
Original file line number Diff line number Diff line change
Expand Up @@ -139,26 +139,33 @@ def source
raise NotImplementedError
end

def drag(node, other, steps, delay = nil)
def drag(node, other, steps, delay = nil, scroll = true)
x1, y1 = node.find_position
x2, y2 = other.find_position

mouse.move(x: x1, y: y1)
mouse.down
sleep delay if delay

other.scroll_into_view if scroll

x2, y2 = other.find_position
mouse.move(x: x2, y: y2, steps: steps)

mouse.up
end

def drag_by(node, x, y, steps, delay = nil)
def drag_by(node, dx, dy, steps, delay = nil, scroll = true)
x1, y1 = node.find_position
x2 = x1 + x
y2 = y1 + y

mouse.move(x: x1, y: y1)
mouse.down

sleep delay if delay
mouse.move(x: x2, y: y2, steps: steps)

evaluate("window.scrollBy(#{dx}, #{dy})") if scroll # should be extracted to Mouse#scroll_by in ferrum

x2, y2 = node.find_position
mouse.move(x: x2 + dx, y: y2 + dy, steps: steps)
mouse.up
end

Expand Down
6 changes: 4 additions & 2 deletions lib/capybara/cuprite/node.rb
Original file line number Diff line number Diff line change
Expand Up @@ -161,14 +161,16 @@ def hover

def drag_to(other, **options)
options[:steps] ||= 1
options[:scroll] = true unless options.key?(:scroll)

command(:drag, other.node, options[:steps], options[:delay])
command(:drag, other.node, options[:steps], options[:delay], options[:scroll])
end

def drag_by(x, y, **options)
options[:steps] ||= 1
options[:scroll] = true unless options.key?(:scroll)

command(:drag_by, x, y, options[:steps], options[:delay])
command(:drag_by, x, y, options[:steps], options[:delay], options[:scroll])
end

def trigger(event)
Expand Down
6 changes: 3 additions & 3 deletions spec/features/session_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -592,13 +592,13 @@
top_before = @session.evaluate_script(%($("#drag_by .draggable").position().top))
left_before = @session.evaluate_script(%($("#drag_by .draggable").position().left))

draggable.native.drag_by(15, 15)
draggable.native.drag_by(8000, 8000)

top_after = @session.evaluate_script(%($("#drag_by .draggable").position().top))
left_after = @session.evaluate_script(%($("#drag_by .draggable").position().left))

expect(top_after).to eq(top_before + 15)
expect(left_after).to eq(left_before + 15)
expect(top_after).to eq(top_before + 8000)
expect(left_after).to eq(left_before + 8000)
end
end

Expand Down
14 changes: 7 additions & 7 deletions spec/support/views/drag.erb
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
}
#drag_by div{ position: absolute; left: 0; }
#draggable { width: 60px; height: 60px; padding: 0.2em; }
#droppable { width: 100px; height: 100px; padding: 0.2em; }
#droppable { width: 100px; height: 100px; padding: 0.2em; margin: 9000px; }
</style>

<script>
Expand All @@ -39,6 +39,12 @@

<body>

<div id="drag_by">
<div class="draggable">
<p>Drag me by</p>
</div>
</div>

<div id="drag_to">
<div id="draggable" class="draggable">
<p>Drag me</p>
Expand All @@ -49,11 +55,5 @@
</div>
</div>

<div id="drag_by">
<div class="draggable">
<p>Drag me by</p>
</div>
</div>

</body>
</html>

0 comments on commit b4eeaf2

Please sign in to comment.