Skip to content

Commit b4eeaf2

Browse files
authored
scroll to destination when dragging (#288)
1 parent bc47918 commit b4eeaf2

File tree

4 files changed

+27
-18
lines changed

4 files changed

+27
-18
lines changed

lib/capybara/cuprite/browser.rb

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -139,26 +139,33 @@ def source
139139
raise NotImplementedError
140140
end
141141

142-
def drag(node, other, steps, delay = nil)
142+
def drag(node, other, steps, delay = nil, scroll = true)
143143
x1, y1 = node.find_position
144-
x2, y2 = other.find_position
145144

146145
mouse.move(x: x1, y: y1)
147146
mouse.down
148147
sleep delay if delay
148+
149+
other.scroll_into_view if scroll
150+
151+
x2, y2 = other.find_position
149152
mouse.move(x: x2, y: y2, steps: steps)
153+
150154
mouse.up
151155
end
152156

153-
def drag_by(node, x, y, steps, delay = nil)
157+
def drag_by(node, dx, dy, steps, delay = nil, scroll = true)
154158
x1, y1 = node.find_position
155-
x2 = x1 + x
156-
y2 = y1 + y
157159

158160
mouse.move(x: x1, y: y1)
159161
mouse.down
162+
160163
sleep delay if delay
161-
mouse.move(x: x2, y: y2, steps: steps)
164+
165+
evaluate("window.scrollBy(#{dx}, #{dy})") if scroll # should be extracted to Mouse#scroll_by in ferrum
166+
167+
x2, y2 = node.find_position
168+
mouse.move(x: x2 + dx, y: y2 + dy, steps: steps)
162169
mouse.up
163170
end
164171

lib/capybara/cuprite/node.rb

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -161,14 +161,16 @@ def hover
161161

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

165-
command(:drag, other.node, options[:steps], options[:delay])
166+
command(:drag, other.node, options[:steps], options[:delay], options[:scroll])
166167
end
167168

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

171-
command(:drag_by, x, y, options[:steps], options[:delay])
173+
command(:drag_by, x, y, options[:steps], options[:delay], options[:scroll])
172174
end
173175

174176
def trigger(event)

spec/features/session_spec.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -592,13 +592,13 @@
592592
top_before = @session.evaluate_script(%($("#drag_by .draggable").position().top))
593593
left_before = @session.evaluate_script(%($("#drag_by .draggable").position().left))
594594

595-
draggable.native.drag_by(15, 15)
595+
draggable.native.drag_by(8000, 8000)
596596

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

600-
expect(top_after).to eq(top_before + 15)
601-
expect(left_after).to eq(left_before + 15)
600+
expect(top_after).to eq(top_before + 8000)
601+
expect(left_after).to eq(left_before + 8000)
602602
end
603603
end
604604

spec/support/views/drag.erb

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
}
1919
#drag_by div{ position: absolute; left: 0; }
2020
#draggable { width: 60px; height: 60px; padding: 0.2em; }
21-
#droppable { width: 100px; height: 100px; padding: 0.2em; }
21+
#droppable { width: 100px; height: 100px; padding: 0.2em; margin: 9000px; }
2222
</style>
2323

2424
<script>
@@ -39,6 +39,12 @@
3939

4040
<body>
4141

42+
<div id="drag_by">
43+
<div class="draggable">
44+
<p>Drag me by</p>
45+
</div>
46+
</div>
47+
4248
<div id="drag_to">
4349
<div id="draggable" class="draggable">
4450
<p>Drag me</p>
@@ -49,11 +55,5 @@
4955
</div>
5056
</div>
5157

52-
<div id="drag_by">
53-
<div class="draggable">
54-
<p>Drag me by</p>
55-
</div>
56-
</div>
57-
5858
</body>
5959
</html>

0 commit comments

Comments
 (0)