testa_appium_driver 0.1.0 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -2,7 +2,7 @@ module Selenium
2
2
  module WebDriver
3
3
  class Element
4
4
  include TestaAppiumDriver::ClassSelectors
5
- include TestaAppiumDriver::AndroidAttributeModule
5
+ include TestaAppiumDriver::Attributes
6
6
  end
7
7
  end
8
8
  end
@@ -4,6 +4,8 @@
4
4
  module TestaAppiumDriver
5
5
  FIND_STRATEGY_UIAUTOMATOR = :uiautomator
6
6
  FIND_STRATEGY_XPATH = :xpath
7
+ FIND_STRATEGY_ID = :id
8
+ FIND_STRATEGY_NAME = :name
7
9
 
8
10
  SCROLL_STRATEGY_UIAUTOMATOR = :uiautomator
9
11
  SCROLL_STRATEGY_W3C = :w3c
@@ -29,27 +29,17 @@ module TestaAppiumDriver
29
29
  def hash_to_uiautomator(hash, single = true)
30
30
  command = "new UiSelector()"
31
31
 
32
- if hash[:id] && hash[:id].kind_of?(String) && !hash[:id].match?(/.*:id\//)
33
- # shorthand ids like myId make full ids => my.app.package:id/myId
34
-
35
- if hash[:id][0] == "="
36
- id = hash[:id][1..-1]
37
- else
38
- id = "#{@driver.current_package}:id/#{hash[:id]}"
39
- end
40
- else
41
- id = hash[:id]
42
- end
32
+ id = resolve_id(hash[:id])
43
33
  command = "#{ command }.resourceId(\"#{ %(#{ id }) }\")" if id && id.kind_of?(String)
44
- command = "#{ command }.resourceIdMatches(\"#{ %(#{ id.source }) }\")" if id && id.kind_of?(Regexp)
34
+ command = "#{ command }.resourceIdMatches(\".*#{ %(#{ id.source }) }.*\")" if id && id.kind_of?(Regexp)
45
35
  command = "#{ command }.description(\"#{ %(#{ hash[:desc] }) }\")" if hash[:desc] && hash[:desc].kind_of?(String)
46
- command = "#{ command }.descriptionMatches(\"#{ %(#{ hash[:desc].source }) }\")" if hash[:desc] && hash[:desc].kind_of?(Regexp)
36
+ command = "#{ command }.descriptionMatches(\".*#{ %(#{ hash[:desc].source }) }.*\")" if hash[:desc] && hash[:desc].kind_of?(Regexp)
47
37
  command = "#{ command }.className(\"#{ %(#{ hash[:class] }) }\")" if hash[:class] && hash[:class].kind_of?(String)
48
- command = "#{ command }.classNameMatches(\"#{ %(#{ hash[:class].source }) }\")" if hash[:class] && hash[:class].kind_of?(Regexp)
38
+ command = "#{ command }.classNameMatches(\".*#{ %(#{ hash[:class].source }) }.*\")" if hash[:class] && hash[:class].kind_of?(Regexp)
49
39
  command = "#{ command }.text(\"#{ %(#{ hash[:text] }) }\")" if hash[:text] && hash[:text].kind_of?(String)
50
- command = "#{ command }.textMatches(\"#{ %(#{ hash[:text].source }) }\")" if hash[:text] && hash[:text].kind_of?(Regexp)
40
+ command = "#{ command }.textMatches(\".*#{ %(#{ hash[:text].source }) }.*\")" if hash[:text] && hash[:text].kind_of?(Regexp)
51
41
  command = "#{ command }.packageName(\"#{ %(#{ hash[:package] }) }\")" if hash[:package] && hash[:package].kind_of?(String)
52
- command = "#{ command }.packageNameMatches(\"#{ %(#{ hash[:package].source }) }\")" if hash[:package] && hash[:package].kind_of?(Regexp)
42
+ command = "#{ command }.packageNameMatches(\".*#{ %(#{ hash[:package].source }) }.*\")" if hash[:package] && hash[:package].kind_of?(Regexp)
53
43
 
54
44
  command = "#{ command }.longClickable(#{ hash[:long_clickable] })" if hash[:long_clickable]
55
45
  command = "#{ command }.checkable(#{ hash[:checkable] })" unless hash[:checkable].nil?
@@ -99,18 +89,10 @@ module TestaAppiumDriver
99
89
 
100
90
  command = "//"
101
91
 
102
- if hash[:id] && hash[:id].kind_of?(String) && !hash[:id].match?(/.*:id\//)
103
- # shorthand ids like myId make full ids => my.app.package:id/myId
104
- if hash[:id][0] == "="
105
- id = hash[:id][1..-1]
106
- else
107
- id = "#{@driver.current_package}:id/#{hash[:id]}"
108
- end
109
- else
110
- id = hash[:id]
111
- end
92
+
112
93
 
113
94
  if for_android
95
+ id = resolve_id(hash[:id])
114
96
  if hash[:class] && hash[:class].kind_of?(String)
115
97
  command = "#{ command }#{hash[:class] }"
116
98
  elsif hash[:class] && hash[:class].kind_of?(Regexp)
@@ -140,6 +122,8 @@ module TestaAppiumDriver
140
122
  command = "#{ command }[@selected=\"#{ hash[:selected] }\"]" unless hash[:selected].nil?
141
123
  command = "#{ command }[@scrollable=\"#{ hash[:scrollable] }\"]" unless hash[:scrollable].nil?
142
124
  else
125
+
126
+ hash[:type] = hash[:class] unless hash[:class].nil?
143
127
  if hash[:type] && hash[:type].kind_of?(String)
144
128
  command = "#{ command }#{hash[:type] }"
145
129
  elsif hash[:type] && hash[:type].kind_of?(Regexp)
@@ -196,7 +180,7 @@ module TestaAppiumDriver
196
180
  def extract_selectors_from_params(params = {})
197
181
  selectors = params.select { |key, value| [
198
182
  :id,
199
- :longClickable,
183
+ :long_clickable,
200
184
  :desc,
201
185
  :class,
202
186
  :text,
@@ -220,7 +204,7 @@ module TestaAppiumDriver
220
204
  :height,
221
205
  :visible,
222
206
  :name,
223
- :value
207
+ :value,
224
208
  ].include?(key) }
225
209
  params = Hash[params.to_a - selectors.to_a]
226
210
 
@@ -238,5 +222,19 @@ module TestaAppiumDriver
238
222
 
239
223
  return params, selectors
240
224
  end
225
+
226
+
227
+ def resolve_id(id)
228
+ if id && id.kind_of?(String) && !id.match?(/.*:id\//)
229
+ # shorthand ids like myId make full ids => my.app.package:id/myId
230
+ if id[0] == "="
231
+ return id[1..-1]
232
+ else
233
+ return "#{@driver.current_package}:id/#{id}"
234
+ end
235
+ else
236
+ id
237
+ end
238
+ end
241
239
  end
242
240
  end
@@ -2,6 +2,7 @@ module TestaAppiumDriver
2
2
  #noinspection RubyTooManyMethodsInspection
3
3
  class Locator
4
4
 
5
+ # performs a long tap on the retrieved element
5
6
  # @param [Float] duration in seconds
6
7
  def long_tap(duration = LONG_TAP_DURATION)
7
8
  action_builder = @driver.action
@@ -15,169 +16,238 @@ module TestaAppiumDriver
15
16
  @driver.perform_actions [f1]
16
17
  end
17
18
 
18
- # @return [Array] array of [Selenium::WebDriver::Element]
19
- def each(deadzone: nil, skip_scroll_to_start: false, &block)
19
+
20
+ # scrolls to the start of the scrollable containers and scrolls to the end,
21
+ # everytime a locator element is found the given block is executed
22
+ # @return [Array<Selenium::WebDriver::Element>]
23
+ def each(top: nil, bottom: nil, right: nil, left: nil, direction: nil, &block)
24
+ deadzone = _process_deadzone(top, bottom, right, left)
20
25
  raise "Each can only be performed on multiple elements locator" if @single
21
26
  deadzone = @scrollable_locator.scroll_deadzone if deadzone.nil? && !@scrollable_locator.nil?
22
27
  sa = ScrollActions.new(@scrollable_locator,
23
28
  locator: self,
24
29
  deadzone: deadzone,
25
30
  default_scroll_strategy: @default_scroll_strategy)
26
- sa.each(skip_scroll_to_start, &block)
31
+ if direction.nil?
32
+ sa.each(&block)
33
+ else
34
+ sa.send("each_#{direction}", &block)
35
+ end
36
+ end
37
+
38
+ # scrolls down from the current page view (without prior scrolling to the top) and
39
+ # everytime a locator element is found the given block is executed
40
+ # @return [Array<Selenium::WebDriver::Element>]
41
+ def each_down(top: nil, bottom: nil, right: nil, left: nil, &block)
42
+ each(top: top, bottom: bottom, right: right, left: left, direction: :down, &block)
43
+ end
44
+
45
+ # scrolls up from the current page view (without prior scrolling to the bottom) and
46
+ # everytime a locator element is found the given block is executed
47
+ # @return [Array<Selenium::WebDriver::Element>]
48
+ def each_up(top: nil, bottom: nil, right: nil, left: nil, &block)
49
+ each(top: top, bottom: bottom, right: right, left: left, direction: :up, &block)
50
+ end
51
+
52
+ # scrolls right from the current page view (without prior scrolling to the left) and
53
+ # everytime a locator element is found the given block is executed
54
+ # @return [Array<Selenium::WebDriver::Element>]
55
+ def each_right(top: nil, bottom: nil, right: nil, left: nil, &block)
56
+ each(top: top, bottom: bottom, right: right, left: left, direction: :right, &block)
57
+ end
58
+
59
+ # scrolls left from the current page view (without prior scrolling to the right) and
60
+ # everytime a locator element is found the given block is executed
61
+ # @return [Array<Selenium::WebDriver::Element>]
62
+ def each_left(top: nil, bottom: nil, right: nil, left: nil, &block)
63
+ each(top: top, bottom: bottom, right: right, left: left, direction: :left, &block)
27
64
  end
28
65
 
29
66
 
30
67
  # Aligns element (by default) on top of the scrollable container, if the element does not exists it will scroll to find it
68
+ # The element is aligned if the the distance from the top/bottom/right/left of the scrollable container is less than [TestaAppiumDriver::SCROLL_ALIGNMENT_THRESHOLD]
69
+ # If the distance is greater than the threshold, it will attempt to realign it up to 2 more times.
70
+ # The retry mechanism allows alignment even for dynamic layouts when elements are hidden/show when scrolling to certain direction
31
71
  # @return [TestaAppiumDriver::Locator]
32
- def align(with = :top, deadzone: nil, raise: false)
72
+ def align(with = :top, top: nil, bottom: nil, right: nil, left: nil, scroll_to_find: false)
33
73
  deadzone = @scrollable_locator.scroll_deadzone if deadzone.nil? && !@scrollable_locator.nil?
34
74
  sa = ScrollActions.new(@scrollable_locator,
35
75
  locator: self,
36
76
  deadzone: deadzone,
37
- default_scroll_strategy: @default_scroll_strategy,
38
- raise: raise)
39
- sa.align(with)
77
+ default_scroll_strategy: @default_scroll_strategy)
78
+ sa.align(with, scroll_to_find)
40
79
  self
41
80
  end
42
81
 
43
82
  # Aligns element on top of the scrollable container, if the element does not exists it will scroll to find it
83
+ # The element is aligned if the the distance from the top of the scrollable container is less than [TestaAppiumDriver::SCROLL_ALIGNMENT_THRESHOLD]
84
+ # If the distance is greater than the threshold, it will attempt to realign it up to 2 more times.
85
+ # The retry mechanism allows alignment even for dynamic layouts when elements are hidden/show when scrolling to certain direction
44
86
  # @return [TestaAppiumDriver::Locator]
45
- def align_top(deadzone: nil)
46
- align(:top, deadzone: deadzone)
87
+ def align_top(top: nil, bottom: nil, right: nil, left: nil)
88
+ align(:top, top: top, bottom: bottom, right: right, left: left)
47
89
  end
48
90
 
49
91
  # Aligns element on bottom of the scrollable container, if the element does not exists it will scroll to find it
92
+ # The element is aligned if the the distance from the bottom of the scrollable container is less than [TestaAppiumDriver::SCROLL_ALIGNMENT_THRESHOLD]
93
+ # If the distance is greater than the threshold, it will attempt to realign it up to 2 more times.
94
+ # The retry mechanism allows alignment even for dynamic layouts when elements are hidden/show when scrolling to certain direction
50
95
  # @return [TestaAppiumDriver::Locator]
51
- def align_bottom(deadzone: nil)
52
- align(:bottom, deadzone: deadzone)
96
+ def align_bottom(top: nil, bottom: nil, right: nil, left: nil)
97
+ align(:bottom, top: top, bottom: bottom, right: right, left: left)
53
98
  end
54
99
 
55
100
  # Aligns element on left of the scrollable container, if the element does not exists it will scroll to find it
101
+ # The element is aligned if the the distance from the left of the scrollable container is less than [TestaAppiumDriver::SCROLL_ALIGNMENT_THRESHOLD]
102
+ # If the distance is greater than the threshold, it will attempt to realign it up to 2 more times.
103
+ # The retry mechanism allows alignment even for dynamic layouts when elements are hidden/show when scrolling to certain direction
56
104
  # @return [TestaAppiumDriver::Locator]
57
- def align_left(deadzone: nil)
58
- align(:left, deadzone: deadzone)
105
+ def align_left(top: nil, bottom: nil, right: nil, left: nil)
106
+ align(:left, top: top, bottom: bottom, right: right, left: left)
59
107
  end
60
108
 
61
109
  # Aligns element on right of the scrollable container, if the element does not exists it will scroll to find it
110
+ # The element is aligned if the the distance from the right of the scrollable container is less than [TestaAppiumDriver::SCROLL_ALIGNMENT_THRESHOLD]
111
+ # If the distance is greater than the threshold, it will attempt to realign it up to 2 more times.
112
+ # The retry mechanism allows alignment even for dynamic layouts when elements are hidden/show when scrolling to certain direction
62
113
  # @return [TestaAppiumDriver::Locator]
63
- def align_right(deadzone: nil)
64
- align(:right, deadzone: deadzone)
114
+ def align_right(top: nil, bottom: nil, right: nil, left: nil)
115
+ align(:right, top: top, bottom: bottom, right: right, left: left)
65
116
  end
66
117
 
67
118
  # Aligns element (by default) on top of the scrollable container, if the element does not exists it raise an exception
119
+ # The element is aligned if the the distance from the top/bottom/right/left of the scrollable container is less than [TestaAppiumDriver::SCROLL_ALIGNMENT_THRESHOLD]
120
+ # If the distance is greater than the threshold, it will attempt to realign it up to 2 more times.
121
+ # The retry mechanism allows alignment even for dynamic layouts when elements are hidden/show when scrolling to certain direction
68
122
  # @return [TestaAppiumDriver::Locator]
69
- def align!(with = :top, deadzone: nil)
70
- align(with, deadzone: deadzone, raise: true)
123
+ def align!(with = :top, top: nil, bottom: nil, right: nil, left: nil)
124
+ align(with, top: top, bottom: bottom, right: right, left: left, scroll_to_find: true)
71
125
  end
72
126
 
73
127
  # Aligns element on top of the scrollable container, if the element does not exists it raise an exception
128
+ # The element is aligned if the the distance from the top of the scrollable container is less than [TestaAppiumDriver::SCROLL_ALIGNMENT_THRESHOLD]
129
+ # If the distance is greater than the threshold, it will attempt to realign it up to 2 more times.
130
+ # The retry mechanism allows alignment even for dynamic layouts when elements are hidden/show when scrolling to certain direction
74
131
  # @return [TestaAppiumDriver::Locator]
75
- def align_top!(deadzone: nil)
76
- align(:top, deadzone: deadzone, raise: true)
132
+ def align_top!(top: nil, bottom: nil, right: nil, left: nil)
133
+ align(:top, top: top, bottom: bottom, right: right, left: left, scroll_to_find: true)
77
134
  end
78
135
 
79
136
  # Aligns element on bottom of the scrollable container, if the element does not exists it raise an exception
137
+ # The element is aligned if the the distance from the bottom of the scrollable container is less than [TestaAppiumDriver::SCROLL_ALIGNMENT_THRESHOLD]
138
+ # If the distance is greater than the threshold, it will attempt to realign it up to 2 more times.
139
+ # The retry mechanism allows alignment even for dynamic layouts when elements are hidden/show when scrolling to certain direction
80
140
  # @return [TestaAppiumDriver::Locator]
81
- def align_bottom!(deadzone: nil)
82
- align(:bottom, deadzone: deadzone, raise: true)
141
+ def align_bottom!(top: nil, bottom: nil, right: nil, left: nil)
142
+ align(:bottom, top: top, bottom: bottom, right: right, left: left, scroll_to_find: true)
83
143
  end
84
144
 
85
145
  # Aligns element on left of the scrollable container, if the element does not exists it raise an exception
146
+ # The element is aligned if the the distance from the left of the scrollable container is less than [TestaAppiumDriver::SCROLL_ALIGNMENT_THRESHOLD]
147
+ # If the distance is greater than the threshold, it will attempt to realign it up to 2 more times.
148
+ # The retry mechanism allows alignment even for dynamic layouts when elements are hidden/show when scrolling to certain direction
86
149
  # @return [TestaAppiumDriver::Locator]
87
- def align_left!(deadzone: nil)
88
- align(:left, deadzone: deadzone, raise: true)
150
+ def align_left!(top: nil, bottom: nil, right: nil, left: nil)
151
+ align(:left, top: top, bottom: bottom, right: right, left: left, scroll_to_find: true)
89
152
  end
90
153
 
91
154
  # Aligns element on right of the scrollable container, if the element does not exists it raise an exception
155
+ # The element is aligned if the the distance from the right of the scrollable container is less than [TestaAppiumDriver::SCROLL_ALIGNMENT_THRESHOLD]
156
+ # If the distance is greater than the threshold, it will attempt to realign it up to 2 more times.
157
+ # The retry mechanism allows alignment even for dynamic layouts when elements are hidden/show when scrolling to certain direction
92
158
  # @return [TestaAppiumDriver::Locator]
93
- def align_right!(deadzone: nil)
94
- align(:right, deadzone: deadzone, raise: true)
159
+ def align_right!(top: nil, bottom: nil, right: nil, left: nil)
160
+ align(:right, top: top, bottom: bottom, right: right, left: left, scroll_to_find: true)
95
161
  end
96
162
 
97
163
 
98
164
  # First scrolls to the beginning of the scrollable container and then scrolls down until element is found or end is reached
99
165
  # @return [TestaAppiumDriver::Locator]
100
- def scroll_to(deadzone: nil, max_scrolls: nil, direction: nil)
101
- _scroll_to(deadzone, max_scrolls, direction)
166
+ def scroll_to(top: nil, bottom: nil, right: nil, left: nil, max_scrolls: nil, direction: nil)
167
+ if direction
168
+ _scroll_dir_to(_process_deadzone(top, bottom, right, left), max_scrolls, direction)
169
+ else
170
+ _scroll_to(_process_deadzone(top, bottom, right, left), max_scrolls)
171
+ end
102
172
  end
103
173
 
104
174
 
105
175
  # Scrolls down until element is found or end is reached
106
176
  # @return [TestaAppiumDriver::Locator]
107
- def scroll_down_to(deadzone: nil, max_scrolls: nil)
108
- _scroll_to(deadzone, max_scrolls, :down)
177
+ def scroll_down_to(top: nil, bottom: nil, right: nil, left: nil, max_scrolls: nil)
178
+ _scroll_dir_to(_process_deadzone(top, bottom, right, left), max_scrolls, :down)
109
179
  end
110
180
 
111
181
  # Scrolls up until element is found or end is reached
112
182
  # @return [TestaAppiumDriver::Locator]
113
- def scroll_up_to(deadzone: nil, max_scrolls: nil)
114
- _scroll_to(deadzone, max_scrolls, :up)
183
+ def scroll_up_to(top: nil, bottom: nil, right: nil, left: nil, max_scrolls: nil)
184
+ _scroll_dir_to(_process_deadzone(top, bottom, right, left), max_scrolls, :up)
115
185
  end
116
186
 
117
187
  # Scrolls right until element is found or end is reached
118
188
  # @return [TestaAppiumDriver::Locator]
119
- def scroll_right_to(deadzone: nil, max_scrolls: nil)
120
- _scroll_to(deadzone, max_scrolls, :right)
189
+ def scroll_right_to(top: nil, bottom: nil, right: nil, left: nil, max_scrolls: nil)
190
+ _scroll_dir_to(_process_deadzone(top, bottom, right, left), max_scrolls, :right)
121
191
  end
122
192
 
123
193
 
124
194
  # Scrolls left until element is found or end is reached
125
195
  # @return [TestaAppiumDriver::Locator]
126
- def scroll_left_to(deadzone: nil, max_scrolls: nil)
127
- _scroll_to(deadzone, max_scrolls, :left)
196
+ def scroll_left_to(top: nil, bottom: nil, right: nil, left: nil, max_scrolls: nil)
197
+ _scroll_dir_to(_process_deadzone(top, bottom, right, left), max_scrolls, :left)
128
198
  end
129
199
 
130
200
  # Scrolls to the start of the scrollable container (top on vertical container, left on horizontal)
131
201
  # @return [TestaAppiumDriver::Locator]
132
- def scroll_to_start(deadzone: nil)
133
- _scroll_to_start_or_end(:start, deadzone)
202
+ def scroll_to_start(top: nil, bottom: nil, right: nil, left: nil)
203
+ _scroll_to_start_or_end(:start, _process_deadzone(top, bottom, right, left))
134
204
  end
135
205
 
136
206
  # Scrolls to the end of the scrollable container (bottom on vertical container, right on horizontal)
137
207
  # @return [TestaAppiumDriver::Locator]
138
- def scroll_to_end(deadzone: nil)
139
- _scroll_to_start_or_end(:end, deadzone)
208
+ def scroll_to_end(top: nil, bottom: nil, right: nil, left: nil)
209
+ _scroll_to_start_or_end(:end, _process_deadzone(top, bottom, right, left))
140
210
  end
141
211
 
142
212
 
143
213
  # @return [TestaAppiumDriver::Locator]
144
- def page_down(deadzone: nil)
145
- _page(:down, deadzone)
214
+ def page_down(top: nil, bottom: nil, right: nil, left: nil)
215
+ _page(:down, _process_deadzone(top, bottom, right, left))
146
216
  end
147
217
 
148
218
  # @return [TestaAppiumDriver::Locator]
149
- def page_up(deadzone: nil)
150
- _page(:up, deadzone)
219
+ def page_up(top: nil, bottom: nil, right: nil, left: nil)
220
+ _page(:up, _process_deadzone(top, bottom, right, left))
151
221
  end
152
222
 
153
223
  # @return [TestaAppiumDriver::Locator]
154
- def page_left(deadzone: nil)
155
- _page(:left, deadzone)
224
+ def page_left(top: nil, bottom: nil, right: nil, left: nil)
225
+ _page(:left, _process_deadzone(top, bottom, right, left))
156
226
  end
157
227
 
158
228
  # @return [TestaAppiumDriver::Locator]
159
- def page_right(deadzone: nil)
160
- _page(:right, deadzone)
229
+ def page_right(top: nil, bottom: nil, right: nil, left: nil)
230
+ _page(:right, _process_deadzone(top, bottom, right, left))
161
231
  end
162
232
 
163
233
  # @return [TestaAppiumDriver::Locator]
164
- def fling_down(deadzone: nil)
165
- _fling(:down, deadzone)
234
+ def fling_down(top: nil, bottom: nil, right: nil, left: nil)
235
+ _fling(:down, _process_deadzone(top, bottom, right, left))
166
236
  end
167
237
 
168
238
  # @return [TestaAppiumDriver::Locator]
169
- def fling_up(deadzone: nil)
170
- _fling(:up, deadzone)
239
+ def fling_up(top: nil, bottom: nil, right: nil, left: nil)
240
+ _fling(:up, _process_deadzone(top, bottom, right, left))
171
241
  end
172
242
 
173
243
  # @return [TestaAppiumDriver::Locator]
174
- def fling_left(deadzone: nil)
175
- _fling(:left, deadzone)
244
+ def fling_left(top: nil, bottom: nil, right: nil, left: nil)
245
+ _fling(:left, _process_deadzone(top, bottom, right, left))
176
246
  end
177
247
 
178
248
  # @return [TestaAppiumDriver::Locator]
179
- def fling_right(deadzone: nil)
180
- _fling(:right, deadzone)
249
+ def fling_right(top: nil, bottom: nil, right: nil, left: nil)
250
+ _fling(:right, _process_deadzone(top, bottom, right, left))
181
251
  end
182
252
 
183
253
 
@@ -228,6 +298,18 @@ module TestaAppiumDriver
228
298
 
229
299
 
230
300
  private
301
+ def _process_deadzone(top, bottom, right, left)
302
+ deadzone = nil
303
+ if !top.nil? || !bottom.nil? || !right.nil? || !left.nil?
304
+ deadzone = {}
305
+ deadzone[:top] = top unless top.nil?
306
+ deadzone[:bottom] = bottom unless bottom.nil?
307
+ deadzone[:right] = right unless right.nil?
308
+ deadzone[:left] = left unless left.nil?
309
+ end
310
+ deadzone
311
+ end
312
+
231
313
  def _drag_to(x, y)
232
314
  sa = ScrollActions.new(@scrollable_locator,
233
315
  locator: self,
@@ -235,6 +317,8 @@ module TestaAppiumDriver
235
317
  sa.drag_to(x, y)
236
318
  self
237
319
  end
320
+
321
+
238
322
  def _page(direction, deadzone)
239
323
  deadzone = @scrollable_locator.scroll_deadzone if deadzone.nil? && !@scrollable_locator.nil?
240
324
  sa = ScrollActions.new(@scrollable_locator,
@@ -262,7 +346,6 @@ module TestaAppiumDriver
262
346
  sa = ScrollActions.new(@scrollable_locator,
263
347
  locator: self,
264
348
  deadzone: deadzone,
265
- direction: :left,
266
349
  default_scroll_strategy: @default_scroll_strategy)
267
350
  if type == :start
268
351
  sa.scroll_to_start
@@ -272,16 +355,27 @@ module TestaAppiumDriver
272
355
  self
273
356
  end
274
357
 
275
- def _scroll_to(deadzone, max_scrolls, direction)
358
+ def _scroll_to(deadzone, max_scrolls)
276
359
  deadzone = @scrollable_locator.scroll_deadzone if deadzone.nil? && !@scrollable_locator.nil?
277
360
  sa = ScrollActions.new(@scrollable_locator,
278
361
  locator: self,
279
362
  deadzone: deadzone,
280
363
  max_scrolls: max_scrolls,
281
- direction: direction,
282
364
  default_scroll_strategy: @default_scroll_strategy)
283
365
  sa.scroll_to
284
366
  self
285
367
  end
368
+
369
+ def _scroll_dir_to(deadzone, max_scrolls, direction)
370
+ deadzone = @scrollable_locator.scroll_deadzone if deadzone.nil? && !@scrollable_locator.nil?
371
+ sa = ScrollActions.new(@scrollable_locator,
372
+ locator: self,
373
+ deadzone: deadzone,
374
+ max_scrolls: max_scrolls,
375
+ default_scroll_strategy: @default_scroll_strategy)
376
+
377
+ sa.send("scroll_#{direction}_to")
378
+ self
379
+ end
286
380
  end
287
381
  end