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.
@@ -20,12 +20,14 @@ module TestaAppiumDriver
20
20
  end
21
21
  end
22
22
 
23
+ # first element that match given selectors
23
24
  # @param selectors [Hash]
24
25
  # @return [TestaAppiumDriver::Locator] first element
25
26
  def element(selectors = {})
26
27
  add_selector(selectors)
27
28
  end
28
29
 
30
+ # all elements that match given selectors
29
31
  # @param params [Hash]
30
32
  # @return [TestaAppiumDriver::Locator] all elements that match given selectors
31
33
  def elements(params = {})
@@ -34,6 +36,7 @@ module TestaAppiumDriver
34
36
  end
35
37
 
36
38
 
39
+ # first element that has scrollable: true
37
40
  # @param selectors [Hash]
38
41
  # @return [TestaAppiumDriver::Locator] first scrollable element
39
42
  def scrollable(selectors = {})
@@ -41,6 +44,7 @@ module TestaAppiumDriver
41
44
  add_selector(selectors)
42
45
  end
43
46
 
47
+ # all elements that have scrollable: true
44
48
  # @param params [Hash]
45
49
  # @return [TestaAppiumDriver::Locator] first scrollable element
46
50
  def scrollables(params = {})
@@ -50,12 +54,14 @@ module TestaAppiumDriver
50
54
  end
51
55
 
52
56
 
57
+ # first android.widget.ImageView element that match given selectors
53
58
  # @return [TestaAppiumDriver::Locator]
54
59
  def image_view(params = {})
55
60
  params[:class] = "android.widget.ImageView"
56
61
  add_selector(params)
57
62
  end
58
63
 
64
+ # all android.widget.ImageView elements that match given selectors
59
65
  # @return [TestaAppiumDriver::Locator]
60
66
  def image_views(params = {})
61
67
  params[:class] = "android.widget.ImageView"
@@ -63,12 +69,14 @@ module TestaAppiumDriver
63
69
  add_selector(params)
64
70
  end
65
71
 
72
+ # first android.widget.FrameLayout element that match given selectors
66
73
  # @return [TestaAppiumDriver::Locator]
67
74
  def frame_layout(params = {})
68
75
  params[:class] = "android.widget.FrameLayout"
69
76
  add_selector(params)
70
77
  end
71
78
 
79
+ # all android.widget.FrameLayout elements that match given selectors
72
80
  # @return [TestaAppiumDriver::Locator]
73
81
  def frame_layouts(params = {})
74
82
  params[:class] = "android.widget.FrameLayout"
@@ -76,12 +84,14 @@ module TestaAppiumDriver
76
84
  add_selector(params)
77
85
  end
78
86
 
87
+ # first android.widget.LinearLayout element that match given selectors
79
88
  # @return [TestaAppiumDriver::Locator]
80
89
  def linear_layout(params = {})
81
90
  params[:class] = "android.widget.LinearLayout"
82
91
  add_selector(params)
83
92
  end
84
93
 
94
+ # all android.widget.LinearLayout elements that match given selectors
85
95
  # @return [TestaAppiumDriver::Locator]
86
96
  def linear_layouts(params = {})
87
97
  params[:class] = "android.widget.LinearLayout"
@@ -89,12 +99,14 @@ module TestaAppiumDriver
89
99
  add_selector(params)
90
100
  end
91
101
 
102
+ # first android.view.View element that match given selectors
92
103
  # @return [TestaAppiumDriver::Locator]
93
104
  def view(params = {})
94
105
  params[:class] = "android.view.View"
95
106
  add_selector(params)
96
107
  end
97
108
 
109
+ # all android.view.View elements that match given selectors
98
110
  # @return [TestaAppiumDriver::Locator]
99
111
  def views(params = {})
100
112
  params[:class] = "android.view.View"
@@ -102,12 +114,14 @@ module TestaAppiumDriver
102
114
  add_selector(params)
103
115
  end
104
116
 
117
+ # first android.widget.EditText element that match given selectors
105
118
  # @return [TestaAppiumDriver::Locator]
106
119
  def edit_text(params = {})
107
120
  params[:class] = "android.widget.EditText"
108
121
  add_selector(params)
109
122
  end
110
123
 
124
+ # all android.widget.EditText elements that match given selectors
111
125
  # @return [TestaAppiumDriver::Locator]
112
126
  def edit_texts(params = {})
113
127
  params[:class] = "android.widget.EditText"
@@ -115,12 +129,14 @@ module TestaAppiumDriver
115
129
  add_selector(params)
116
130
  end
117
131
 
132
+ # first android.widget.ViewGroup element that match given selectors
118
133
  # @return [TestaAppiumDriver::Locator]
119
134
  def view_group(params = {})
120
135
  params[:class] = "android.widget.ViewGroup"
121
136
  add_selector(params)
122
137
  end
123
138
 
139
+ # all android.widget.ViewGroup elements that match given selectors
124
140
  # @return [TestaAppiumDriver::Locator]
125
141
  def view_groups(params = {})
126
142
  params[:class] = "android.widget.ViewGroup"
@@ -128,12 +144,14 @@ module TestaAppiumDriver
128
144
  add_selector(params)
129
145
  end
130
146
 
147
+ # first android.widget.RelativeLayout element that match given selecotrs
131
148
  # @return [TestaAppiumDriver::Locator]
132
149
  def relative_layout(params = {})
133
150
  params[:class] = "android.widget.RelativeLayout"
134
151
  add_selector(params)
135
152
  end
136
153
 
154
+ # all android.widget.RelativeLayout elements that match given selectors
137
155
  # @return [TestaAppiumDriver::Locator]
138
156
  def relative_layouts(params = {})
139
157
  params[:class] = "android.widget.RelativeLayout"
@@ -141,12 +159,14 @@ module TestaAppiumDriver
141
159
  add_selector(params)
142
160
  end
143
161
 
162
+ # first androidx.recyclerview.widget.RecyclerView element that match given selectors
144
163
  # @return [TestaAppiumDriver::Locator]
145
164
  def recycler_view(params = {})
146
165
  params[:class] = "androidx.recyclerview.widget.RecyclerView"
147
166
  add_selector(params)
148
167
  end
149
168
 
169
+ # all androidx.recyclerview.widget.RecyclerView elements that match given selectors
150
170
  # @return [TestaAppiumDriver::Locator]
151
171
  def recycler_views(params = {})
152
172
  params[:class] = "androidx.recyclerview.widget.RecyclerView"
@@ -154,12 +174,14 @@ module TestaAppiumDriver
154
174
  add_selector(params)
155
175
  end
156
176
 
177
+ # first android.widget.Button element that match given selectors
157
178
  # @return [TestaAppiumDriver::Locator]
158
179
  def button(params = {})
159
180
  params[:class] = "android.widget.Button"
160
181
  add_selector(params)
161
182
  end
162
183
 
184
+ # all android.widget.Button elements that match given selectors
163
185
  # @return [TestaAppiumDriver::Locator]
164
186
  def buttons(params = {})
165
187
  params[:class] = "android.widget.Button"
@@ -167,12 +189,14 @@ module TestaAppiumDriver
167
189
  add_selector(params)
168
190
  end
169
191
 
192
+ # first android.widget.ImageButton element that match given selectors
170
193
  # @return [TestaAppiumDriver::Locator]
171
194
  def image_button(params = {})
172
195
  params[:class] = "android.widget.ImageButton"
173
196
  add_selector(params)
174
197
  end
175
198
 
199
+ # all android.widget.ImageButton elements that match given selectors
176
200
  # @return [TestaAppiumDriver::Locator]
177
201
  def image_buttons(params = {})
178
202
  params[:class] = "android.widget.ImageButton"
@@ -180,12 +204,14 @@ module TestaAppiumDriver
180
204
  add_selector(params)
181
205
  end
182
206
 
207
+ # first android.widget.HorizontalScrollView element that match given selectors
183
208
  # @return [TestaAppiumDriver::Locator]
184
209
  def horizontal_scroll_view(params = {})
185
210
  params[:class] = "android.widget.HorizontalScrollView"
186
211
  add_selector(params)
187
212
  end
188
213
 
214
+ # all android.widget.HorizontalScrollView elements that match given selectors
189
215
  # @return [TestaAppiumDriver::Locator]
190
216
  def horizontal_scroll_views(params = {})
191
217
  params[:class] = "android.widget.HorizontalScrollView"
@@ -193,12 +219,14 @@ module TestaAppiumDriver
193
219
  add_selector(params)
194
220
  end
195
221
 
222
+ # first android.widget.ScrollView element that match given selectors
196
223
  # @return [TestaAppiumDriver::Locator]
197
224
  def scroll_view(params = {})
198
225
  params[:class] = "android.widget.ScrollView"
199
226
  add_selector(params)
200
227
  end
201
228
 
229
+ # all android.widget.ScrollView elements that match given selectors
202
230
  # @return [TestaAppiumDriver::Locator]
203
231
  def scroll_views(params = {})
204
232
  params[:class] = "android.widget.ScrollView"
@@ -206,12 +234,14 @@ module TestaAppiumDriver
206
234
  add_selector(params)
207
235
  end
208
236
 
237
+ # first viewpager.widget.ViewPager element that match given selectors
209
238
  # @return [TestaAppiumDriver::Locator]
210
239
  def view_pager(params = {})
211
240
  params[:class] = "androidx.viewpager.widget.ViewPager"
212
241
  add_selector(params)
213
242
  end
214
243
 
244
+ # all viewpager.widget.ViewPager elements that match given selectors
215
245
  # @return [TestaAppiumDriver::Locator]
216
246
  def view_pagers(params = {})
217
247
  params[:class] = "androidx.viewpager.widget.ViewPager"
@@ -219,12 +249,14 @@ module TestaAppiumDriver
219
249
  add_selector(params)
220
250
  end
221
251
 
252
+ # first android.widget.CheckBox element that match given selectors
222
253
  # @return [TestaAppiumDriver::Locator]
223
254
  def check_box(params = {})
224
255
  params[:class] = "android.widget.CheckBox"
225
256
  add_selector(params)
226
257
  end
227
258
 
259
+ # all android.widget.CheckBox elements that match given selectors
228
260
  # @return [TestaAppiumDriver::Locator]
229
261
  def check_boxes(params = {})
230
262
  params[:class] = "android.widget.CheckBox"
@@ -232,12 +264,14 @@ module TestaAppiumDriver
232
264
  add_selector(params)
233
265
  end
234
266
 
267
+ # first android.widget.ListView element that match given selectors
235
268
  # @return [TestaAppiumDriver::Locator]
236
269
  def list_view(params = {})
237
270
  params[:class] = "android.widget.ListView"
238
271
  add_selector(params)
239
272
  end
240
273
 
274
+ # all android.widget.ListView elements that match given selectors
241
275
  # @return [TestaAppiumDriver::Locator]
242
276
  def list_views(params = {})
243
277
  params[:class] = "android.widget.ListView"
@@ -245,12 +279,14 @@ module TestaAppiumDriver
245
279
  add_selector(params)
246
280
  end
247
281
 
282
+ # first android.widget.ProgressBar element that match given selectors
248
283
  # @return [TestaAppiumDriver::Locator]
249
284
  def progress_bar(params = {})
250
285
  params[:class] = "android.widget.ProgressBar"
251
286
  add_selector(params)
252
287
  end
253
288
 
289
+ # all android.widget.ProgressBar elements that match given selectors
254
290
  # @return [TestaAppiumDriver::Locator]
255
291
  def progress_bars(params = {})
256
292
  params[:class] = "android.widget.ProgressBar"
@@ -258,12 +294,14 @@ module TestaAppiumDriver
258
294
  add_selector(params)
259
295
  end
260
296
 
297
+ # first android.widget.RadioButton element that match given selectors
261
298
  # @return [TestaAppiumDriver::Locator]
262
299
  def radio_button(params = {})
263
300
  params[:class] = "android.widget.RadioButton"
264
301
  add_selector(params)
265
302
  end
266
303
 
304
+ # all android.widget.RadioButton elements that match given selectors
267
305
  # @return [TestaAppiumDriver::Locator]
268
306
  def radio_buttons(params = {})
269
307
  params[:class] = "android.widget.RadioButton"
@@ -271,12 +309,14 @@ module TestaAppiumDriver
271
309
  add_selector(params)
272
310
  end
273
311
 
312
+ # first android.widget.RadioGroup element that match given selectors
274
313
  # @return [TestaAppiumDriver::Locator]
275
314
  def radio_group(params = {})
276
315
  params[:class] = "android.widget.RadioGroup"
277
316
  add_selector(params)
278
317
  end
279
318
 
319
+ # all android.widget.RadioGroup elements that match given selectors
280
320
  # @return [TestaAppiumDriver::Locator]
281
321
  def radio_groups(params = {})
282
322
  params[:class] = "android.widget.RadioGroup"
@@ -284,12 +324,14 @@ module TestaAppiumDriver
284
324
  add_selector(params)
285
325
  end
286
326
 
327
+ # first android.widget.SearchView element that match given selectors
287
328
  # @return [TestaAppiumDriver::Locator]
288
329
  def search_view(params = {})
289
330
  params[:class] = "android.widget.SearchView"
290
331
  add_selector(params)
291
332
  end
292
333
 
334
+ # all android.widget.SearchView elements that match given selectors
293
335
  # @return [TestaAppiumDriver::Locator]
294
336
  def search_views(params = {})
295
337
  params[:class] = "android.widget.SearchView"
@@ -297,12 +339,14 @@ module TestaAppiumDriver
297
339
  add_selector(params)
298
340
  end
299
341
 
342
+ # first android.widget.Spinner element that match given selectors
300
343
  # @return [TestaAppiumDriver::Locator]
301
344
  def spinner(params = {})
302
345
  params[:class] = "android.widget.Spinner"
303
346
  add_selector(params)
304
347
  end
305
348
 
349
+ # all android.widget.Spinner elements that match given selectors
306
350
  # @return [TestaAppiumDriver::Locator]
307
351
  def spinners(params = {})
308
352
  params[:class] = "android.widget.Spinner"
@@ -310,12 +354,14 @@ module TestaAppiumDriver
310
354
  add_selector(params)
311
355
  end
312
356
 
357
+ # first android.widget.Toast element that match given selectors
313
358
  # @return [TestaAppiumDriver::Locator]
314
359
  def toast(params = {})
315
360
  params[:class] = "android.widget.Toast"
316
361
  add_selector(params)
317
362
  end
318
363
 
364
+ # all android.widget.Toast elements that match given selectors
319
365
  # @return [TestaAppiumDriver::Locator]
320
366
  def toasts(params = {})
321
367
  params[:class] = "android.widget.Toast"
@@ -323,12 +369,14 @@ module TestaAppiumDriver
323
369
  add_selector(params)
324
370
  end
325
371
 
372
+ # first android.widget.Toolbar element that match given selectors
326
373
  # @return [TestaAppiumDriver::Locator]
327
374
  def toolbar(params = {})
328
375
  params[:class] = "android.widget.Toolbar"
329
376
  add_selector(params)
330
377
  end
331
378
 
379
+ # all android.widget.Toolbar elements that match given selectors
332
380
  # @return [TestaAppiumDriver::Locator]
333
381
  def toolbars(params = {})
334
382
  params[:class] = "android.widget.Toolbar"
@@ -336,12 +384,14 @@ module TestaAppiumDriver
336
384
  add_selector(params)
337
385
  end
338
386
 
387
+ # first android.widget.TextView element that match given selectors
339
388
  # @return [TestaAppiumDriver::Locator]
340
389
  def text_view(params = {})
341
390
  params[:class] = "android.widget.TextView"
342
391
  add_selector(params)
343
392
  end
344
393
 
394
+ # all android.widget.TextView elements that match given selectors
345
395
  # @return [TestaAppiumDriver::Locator]
346
396
  def text_views(params = {})
347
397
  params[:class] = "android.widget.TextView"
@@ -8,11 +8,11 @@ module TestaAppiumDriver
8
8
  include ClassSelectors
9
9
 
10
10
 
11
+ # executes shell command
11
12
  # @param [String] command Shell command name to execute for example echo or rm
12
13
  # @param [Array<String>] args Array of command arguments, example: ['-f', '/sdcard/my_file.txt']
13
14
  # @param [Integer] timeout Command timeout in milliseconds. If the command blocks for longer than this timeout then an exception is going to be thrown. The default timeout is 20000 ms
14
15
  # @param [Boolean] includeStderr Whether to include stderr stream into the returned result.
15
- #noinspection RubyParameterNamingConvention
16
16
  def shell(command, args: nil, timeout: nil, includeStderr: true)
17
17
  params = {
18
18
  command: command,
@@ -24,6 +24,7 @@ module TestaAppiumDriver
24
24
  end
25
25
 
26
26
 
27
+ private
27
28
  def handle_testa_opts
28
29
  if @testa_opts[:default_find_strategy].nil?
29
30
  @default_find_strategy = DEFAULT_ANDROID_FIND_STRATEGY
@@ -1,5 +1,5 @@
1
1
  module TestaAppiumDriver
2
- module AndroidAttributeModule
2
+ module Attributes
3
3
 
4
4
  #noinspection RubyNilAnalysis
5
5
  def attribute(name, *args)
@@ -63,8 +63,8 @@ module TestaAppiumDriver
63
63
  attribute("longClickable", *args).to_s == "true"
64
64
  end
65
65
 
66
- def password(*args)
67
- attribute("password", *args)
66
+ def password?(*args)
67
+ attribute("password", *args).to_s == "true"
68
68
  end
69
69
 
70
70
  def id(*args)
@@ -98,7 +98,7 @@ module TestaAppiumDriver
98
98
  end
99
99
 
100
100
  class Locator
101
- include TestaAppiumDriver::AndroidAttributeModule
101
+ include TestaAppiumDriver::Attributes
102
102
 
103
103
 
104
104
  # element index in parent element, starts from 0
@@ -19,6 +19,15 @@ module TestaAppiumDriver
19
19
  else
20
20
  @scroll_orientation = :vertical
21
21
  end
22
+
23
+ if !params[:top].nil? || !params[:bottom].nil? || !params[:right].nil? || !params[:left].nil?
24
+ @scroll_deadzone = {}
25
+ @scroll_deadzone[:top] = params[:top].to_f unless params[:top].nil?
26
+ @scroll_deadzone[:bottom] = params[:bottom].to_f unless params[:bottom].nil?
27
+ @scroll_deadzone[:right] = params[:right].to_f unless params[:right].nil?
28
+ @scroll_deadzone[:left] = params[:left].to_f unless params[:left].nil?
29
+ end
30
+
22
31
  params[:scrollable_locator] = self.dup
23
32
  end
24
33
 
@@ -27,16 +36,18 @@ module TestaAppiumDriver
27
36
 
28
37
 
29
38
  # resolve selector which will be used for finding element
30
- def selector
39
+ def strategy_and_selector
40
+ if @can_use_id_strategy
41
+ return FIND_STRATEGY_ID, @can_use_id_strategy
42
+ end
31
43
  if (@strategy.nil? && @default_find_strategy == FIND_STRATEGY_UIAUTOMATOR) || @strategy == FIND_STRATEGY_UIAUTOMATOR
32
- ui_selector
44
+ [FIND_STRATEGY_UIAUTOMATOR, ui_selector]
33
45
  elsif (@strategy.nil? && @default_find_strategy == FIND_STRATEGY_XPATH) || @strategy == FIND_STRATEGY_XPATH
34
- @xpath_selector
46
+ [FIND_STRATEGY_XPATH, @xpath_selector]
35
47
  end
36
48
  end
37
49
 
38
50
 
39
-
40
51
  # @param [Boolean] include_semicolon should the semicolon be included at the end
41
52
  # @return ui_selector for uiautomator find strategy
42
53
  def ui_selector(include_semicolon = true)
@@ -64,13 +75,14 @@ module TestaAppiumDriver
64
75
  end
65
76
 
66
77
 
67
- # @return [Locator] existing locator element
78
+ # @return [Locator] new child locator element
68
79
  def add_child_selector(params)
69
80
  params, selectors = extract_selectors_from_params(params)
70
81
  single = params[:single]
71
82
  raise "Cannot add child selector to Array" if single && !@single
72
83
 
73
84
  locator = self.dup
85
+ locator.can_use_id_strategy = false
74
86
  if (@strategy.nil? && !single) || @strategy == FIND_STRATEGY_XPATH
75
87
  locator.strategy = FIND_STRATEGY_XPATH
76
88
  locator.strategy_reason = "multiple child selector"