Class: Appium::MultiTouch

Inherits:
Object show all
Defined in:
lib/appium_lib/device/multi_touch.rb

Overview

MultiTouch actions allow for multiple touches to happen at the same time, for instance, to simulate multiple finger swipes.

Create a series of touch actions by themselves (without a ‘prepare()`), then add to a new MultiTouch action. When ready, call `prepare()` and all actions will be executed simultaneously.

“‘ruby action_1 = TouchAction.new.press(x: 45, y: 100).wait(5).release action_2 = TouchAction.new.tap(element: el, x: 50, y:5, count: 3).release

multi_touch_action = MultiTouch.new multi_touch_action.add action_1 multi_touch_action.add action_2 multi_touch_action.perform

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeMultiTouch

Create a new multi-action



77
78
79
# File 'lib/appium_lib/device/multi_touch.rb', line 77

def initialize
  @actions = []
end

Class Method Details

.pinch(percentage = 25, auto_perform = true) ⇒ Object

Convenience method for pinching the screen. Places two fingers at the edges of the screen and brings them together. “‘ruby action = pinch 75 #=> Pinch the screen from the top right and bottom left corners action.perform #=> to 25% of its size. “`

Parameters:

  • percentage (int) (defaults to: 25)

    The percent size by which to shrink the screen when pinched.

  • auto_perform (boolean) (defaults to: true)

    Whether to perform the action immediately (default true)



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/appium_lib/device/multi_touch.rb', line 28

def pinch(percentage = 25, auto_perform = true)
  fail ArgumentError("Can't pinch to greater than screen size.") if percentage > 100

  p = Float(percentage) / 100
  i = 1 - p

  top = TouchAction.new
  top.swipe start_x: 1.0, start_y: 0.0, end_x: i, end_y: i, duration: 1

  bottom = TouchAction.new
  bottom.swipe(start_x: 0.0, start_y: 1.0, end_x: p, end_y: p, duration: 1)

  pinch = MultiTouch.new
  pinch.add top
  pinch.add bottom
  return pinch unless auto_perform
  pinch.perform
end

.zoom(percentage = 200, auto_perform = true) ⇒ Object

Convenience method for zooming the screen. Places two fingers at the edges of the screen and brings them together. “‘ruby action = zoom 200 #=> Zoom in the screen from the center until it doubles in size. action.perform “`

Parameters:

  • percentage (int) (defaults to: 200)

    The percent size by which to shrink the screen when pinched.

  • auto_perform (boolean) (defaults to: true)

    Whether to perform the action immediately (default true)



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/appium_lib/device/multi_touch.rb', line 56

def zoom(percentage = 200, auto_perform = true)
  fail ArgumentError("Can't zoom to smaller then screen size.") if percentage < 100

  p = 100 / Float(percentage)
  i = 1 - p

  top = TouchAction.new
  top.swipe start_x: i, start_y: i, end_x: 1, end_y: 1, duration: 1

  bottom = TouchAction.new
  bottom.swipe start_x: p, start_y: p, end_x: 1, end_y: 1, duration: 1

  zoom = MultiTouch.new
  zoom.add top
  zoom.add bottom
  return zoom unless auto_perform
  zoom.perform
end

Instance Method Details

#add(chain) ⇒ Object

Add a touch_action to be performed

Parameters:

  • chain (TouchAction)

    The action to add to the chain



83
84
85
# File 'lib/appium_lib/device/multi_touch.rb', line 83

def add(chain)
  @actions << chain.actions
end

#performObject

Ask Appium to perform the actions



88
89
90
# File 'lib/appium_lib/device/multi_touch.rb', line 88

def perform
  $driver.multi_touch @actions
end