Skip to content

Commit 49c9cda

Browse files
committed
[rb] update action tests
1 parent e695723 commit 49c9cda

1 file changed

Lines changed: 78 additions & 30 deletions

File tree

rb/spec/integration/selenium/webdriver/action_builder_spec.rb

Lines changed: 78 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -136,22 +136,7 @@ module WebDriver
136136
driver.action.release_actions
137137
expect(event_input.attribute(:value)).to eq('Clicked')
138138
end
139-
end
140-
141-
describe '#release' do
142-
it 'releases pressed buttons', except: [{browser: %i[safari safari_preview]},
143-
{driver: :remote, browser: :ie}] do
144-
driver.navigate.to url_for('javascriptPage.html')
145-
146-
event_input = driver.find_element(id: 'clickField')
147-
148-
driver.action.click_and_hold(event_input).perform
149-
expect(event_input.attribute(:value)).to eq('Hello')
150-
151-
driver.action.release.perform
152-
expect(event_input.attribute(:value)).to eq('Clicked')
153-
end
154-
end
139+
end
155140

156141
describe '#click' do
157142
it 'clicks provided element' do
@@ -160,13 +145,11 @@ module WebDriver
160145
driver.action.click(element).perform
161146
expect(element.attribute(:value)).to eq('Clicked')
162147
end
163-
end
164148

165-
describe 'pointer presses' do
166-
it 'holds pointer down and releases' do
149+
it 'executes with equivalent pointer methods' do
167150
driver.navigate.to url_for('javascriptPage.html')
168151
element = driver.find_element(id: 'clickField')
169-
driver.action.move_to(element).pointer_down(:left).click.pointer_up(:left).perform
152+
driver.action.move_to(element).pointer_down(:left).pointer_up(:left).perform
170153
expect(element.attribute(:value)).to eq('Clicked')
171154
end
172155
end
@@ -176,10 +159,20 @@ module WebDriver
176159
driver.navigate.to url_for('javascriptPage.html')
177160
element = driver.find_element(id: 'doubleClickField')
178161

179-
sleep 0.5
180162
driver.action.double_click(element).perform
181163
expect(element.attribute(:value)).to eq('DoubleClicked')
182164
end
165+
166+
it 'executes with equivalent pointer methods' do
167+
driver.navigate.to url_for('javascriptPage.html')
168+
element = driver.find_element(id: 'doubleClickField')
169+
170+
driver.action.move_to(element)
171+
.pointer_down(:left).pointer_up(:left)
172+
.pointer_down(:left).pointer_up(:left)
173+
.perform
174+
expect(element.attribute(:value)).to eq('DoubleClicked')
175+
end
183176
end
184177

185178
describe '#context_click' do
@@ -190,6 +183,14 @@ module WebDriver
190183
driver.action.context_click(element).perform
191184
expect(element.attribute(:value)).to eq('ContextClicked')
192185
end
186+
187+
it 'executes with equivalent pointer methods' do
188+
driver.navigate.to url_for('javascriptPage.html')
189+
element = driver.find_element(id: 'doubleClickField')
190+
191+
driver.action.move_to(element).pointer_down(:right).pointer_up(:right).perform
192+
expect(element.attribute(:value)).to eq('ContextClicked')
193+
end
193194
end
194195

195196
describe '#move_to' do
@@ -259,15 +260,47 @@ module WebDriver
259260
end
260261
end
261262

262-
def in_viewport?(element)
263-
in_viewport = <<~IN_VIEWPORT
264-
for(var e=arguments[0],f=e.offsetTop,t=e.offsetLeft,o=e.offsetWidth,n=e.offsetHeight;
265-
e.offsetParent;)f+=(e=e.offsetParent).offsetTop,t+=e.offsetLeft;
266-
return f<window.pageYOffset+window.innerHeight&&t<window.pageXOffset+window.innerWidth&&f+n>
267-
window.pageYOffset&&t+o>window.pageXOffset
268-
IN_VIEWPORT
269-
270-
driver.execute_script(in_viewport, element)
263+
describe 'pen stylus' do
264+
it 'sets pointer event properties' do
265+
driver.get 'https://titusfortner.com/examples/pointerActionsPage.html'
266+
pointer_area = driver.find_element(id: 'pointerArea')
267+
rect = pointer_area.rect
268+
x_val = rect.x
269+
y_val = rect.y
270+
271+
pointer_options = {pressure: 0.8, tilt_x: -40, tilt_y: -10, twist: 177}
272+
actions = driver.action(devices: :pen)
273+
.move_by(x_val + 5, y_val + 5)
274+
.pointer_down(**pointer_options)
275+
.move_by(2, 2, duration: 0.8)
276+
.pointer_up
277+
278+
start = Time.now
279+
actions.perform
280+
expect(Time.now - start).to be > 0.8
281+
282+
moves = driver.find_elements(class: 'pointermove')
283+
move_to = properties(moves[0])
284+
down = properties(driver.find_element(class: 'pointerdown'))
285+
move_by = properties(moves[1])
286+
up = properties(driver.find_element(class: 'pointerup'))
287+
288+
expect(move_to).to include("button" => "-1",
289+
"pageX" => (x_val + 5).to_s,
290+
"pageY" => (y_val + 5).floor.to_s)
291+
expect(down).to include("button" => "0",
292+
"pageX" => (x_val + 5).to_s,
293+
"pageY" => (y_val + 5).floor.to_s,
294+
"tiltX" => "-40",
295+
"tiltY" => "-10",
296+
"twist" => "177")
297+
expect(move_by).to include("button" => "-1",
298+
"pageX" => (x_val + 5 + 2).to_s,
299+
"pageY" => (y_val + 5 + 2).floor.to_s)
300+
expect(up).to include("button" => "0",
301+
"pageX" => (x_val + 5 + 2).to_s,
302+
"pageY" => (y_val + 5 + 2).floor.to_s)
303+
end
271304
end
272305

273306
describe '#scroll_to', only: {browser: %i[chrome edge]} do
@@ -352,6 +385,21 @@ def in_viewport?(element)
352385
}.to raise_error(Error::MoveTargetOutOfBoundsError)
353386
end
354387
end
388+
389+
def properties(element)
390+
element.text.sub(/.*?\s/, '').split(',').map { |item| item.lstrip.split /\s*:\s*/ }.to_h
391+
end
392+
393+
def in_viewport?(element)
394+
in_viewport = <<~IN_VIEWPORT
395+
for(var e=arguments[0],f=e.offsetTop,t=e.offsetLeft,o=e.offsetWidth,n=e.offsetHeight;
396+
e.offsetParent;)f+=(e=e.offsetParent).offsetTop,t+=e.offsetLeft;
397+
return f<window.pageYOffset+window.innerHeight&&t<window.pageXOffset+window.innerWidth&&f+n>
398+
window.pageYOffset&&t+o>window.pageXOffset
399+
IN_VIEWPORT
400+
401+
driver.execute_script(in_viewport, element)
402+
end
355403
end # ActionBuilder
356404
end # WebDriver
357405
end # Selenium

0 commit comments

Comments
 (0)