Class: Appium::Core::TouchAction
- Inherits:
-
Object
- Object
- Appium::Core::TouchAction
- Defined in:
- lib/appium_lib_core/device/touch_actions.rb
Constant Summary collapse
- ACTIONS =
%i(move_to long_press double_tap two_finger_tap press release tap wait perform).freeze
- COMPLEX_ACTIONS =
%i(swipe).freeze
Instance Attribute Summary collapse
-
#actions ⇒ Object
readonly
Returns the value of attribute actions.
-
#driver ⇒ Object
readonly
Returns the value of attribute driver.
Instance Method Summary collapse
-
#cancel ⇒ Object
Does nothing, currently.
-
#double_tap(opts) ⇒ Object
Double tap an element on the screen.
-
#initialize(driver) ⇒ TouchAction
constructor
A new instance of TouchAction.
-
#long_press(opts) ⇒ Object
Press down for a specific duration.
-
#move_to(opts) ⇒ Object
Move to the given co-ordinates.
-
#perform ⇒ Object
Ask the driver to perform all actions in this action chain.
-
#press(opts) ⇒ Object
Press a finger onto the screen.
-
#release(opts = nil) ⇒ Object
Remove a finger from the screen.
-
#swipe(opts, ele = nil) ⇒ Object
Convenience method to perform a swipe.
-
#tap(opts) ⇒ Object
Touch a point on the screen.
-
#two_finger_tap(opts) ⇒ Object
Two finger tap an element on the screen.
-
#wait(milliseconds) ⇒ Object
Pause for a number of milliseconds before the next action.
Constructor Details
#initialize(driver) ⇒ TouchAction
Returns a new instance of TouchAction.
27 28 29 30 |
# File 'lib/appium_lib_core/device/touch_actions.rb', line 27 def initialize(driver) @actions = [] @driver = driver end |
Instance Attribute Details
#actions ⇒ Object (readonly)
Returns the value of attribute actions.
25 26 27 |
# File 'lib/appium_lib_core/device/touch_actions.rb', line 25 def actions @actions end |
#driver ⇒ Object (readonly)
Returns the value of attribute driver.
25 26 27 |
# File 'lib/appium_lib_core/device/touch_actions.rb', line 25 def driver @driver end |
Instance Method Details
#cancel ⇒ Object
Does nothing, currently.
167 168 169 170 171 |
# File 'lib/appium_lib_core/device/touch_actions.rb', line 167 def cancel @actions << { action: cancel } @driver.touch_actions @actions self end |
#double_tap(opts) ⇒ Object
Double tap an element on the screen
106 107 108 109 110 |
# File 'lib/appium_lib_core/device/touch_actions.rb', line 106 def double_tap(opts) args = opts.select { |k, _v| %i(element x y).include? k } args = args_with_ele_ref(args) chain_method(:doubleTap, args) # doubleTap is what the appium server expects end |
#long_press(opts) ⇒ Object
Press down for a specific duration. Alternatively, you can use ‘press(…).wait(…).release()` instead of `long_press` if duration doesn’t work well. github.com/appium/ruby_lib/issues/231#issuecomment-269895512 e.g. Appium::TouchAction.new.press(x: 280, y: 530).wait(2000).release.perform
55 56 57 58 59 |
# File 'lib/appium_lib_core/device/touch_actions.rb', line 55 def long_press(opts) args = opts.select { |k, _v| %i(element x y duration).include? k } args = args_with_ele_ref(args) chain_method(:longPress, args) # longPress is what the appium server expects end |
#move_to(opts) ⇒ Object
Move to the given co-ordinates.
‘move_to`’s ‘x` and `y` have two case. One is working as coordinate, the other is working as offset.
40 41 42 43 |
# File 'lib/appium_lib_core/device/touch_actions.rb', line 40 def move_to(opts) opts = args_with_ele_ref(opts) chain_method(:moveTo, opts) end |
#perform ⇒ Object
Ask the driver to perform all actions in this action chain.
160 161 162 163 164 |
# File 'lib/appium_lib_core/device/touch_actions.rb', line 160 def perform @driver.touch_actions @actions @actions.clear self end |
#press(opts) ⇒ Object
Press a finger onto the screen. Finger will stay down until you call ‘release`.
67 68 69 70 71 |
# File 'lib/appium_lib_core/device/touch_actions.rb', line 67 def press(opts) args = opts.select { |k, _v| %i(element x y).include? k } args = args_with_ele_ref(args) chain_method(:press, args) end |
#release(opts = nil) ⇒ Object
Remove a finger from the screen.
79 80 81 82 |
# File 'lib/appium_lib_core/device/touch_actions.rb', line 79 def release(opts = nil) args = args_with_ele_ref(opts) if opts chain_method(:release, args) end |
#swipe(opts, ele = nil) ⇒ Object
Convenience method to perform a swipe.
139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 |
# File 'lib/appium_lib_core/device/touch_actions.rb', line 139 def swipe(opts, ele = nil) start_x = opts.fetch :start_x, 0 start_y = opts.fetch :start_y, 0 offset_x = opts.fetch :offset_x, 0 offset_y = opts.fetch :offset_y, 0 duration = opts.fetch :duration, 200 if ele # pinch/zoom for XCUITest press x: start_x, y: start_y, element: ele move_to x: offset_x, y: offset_y, element: ele else press x: start_x, y: start_y wait(duration) if duration move_to x: offset_x, y: offset_y end release self end |
#tap(opts) ⇒ Object
Touch a point on the screen. Alternatively, you can use ‘press(…).release.perform` instead of `tap(…).perform`.
92 93 94 95 96 97 |
# File 'lib/appium_lib_core/device/touch_actions.rb', line 92 def tap(opts) opts[:count] = opts.delete(:fingers) if opts[:fingers] opts[:count] ||= 1 args = args_with_ele_ref opts chain_method(:tap, args) end |
#two_finger_tap(opts) ⇒ Object
Two finger tap an element on the screen
118 119 120 121 122 |
# File 'lib/appium_lib_core/device/touch_actions.rb', line 118 def two_finger_tap(opts) args = opts.select { |k, _v| %i(element x y).include? k } args = args_with_ele_ref(args) chain_method(:twoFingerTap, args) # twoFingerTap is what the appium server expects end |
#wait(milliseconds) ⇒ Object
Pause for a number of milliseconds before the next action
126 127 128 129 |
# File 'lib/appium_lib_core/device/touch_actions.rb', line 126 def wait(milliseconds) args = { ms: milliseconds } chain_method(:wait, args) end |