testa_appium_driver 0.1.3 → 0.1.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +2 -2
- data/.idea/deployment.xml +10 -2
- data/.idea/inspectionProfiles/Project_Default.xml +8 -8
- data/.idea/runConfigurations/Android_Test.xml +41 -41
- data/.idea/runConfigurations.xml +10 -0
- data/.idea/sshConfigs.xml +3 -0
- data/.idea/webServers.xml +7 -0
- data/.rspec +3 -3
- data/.rubocop.yml +13 -13
- data/CHANGELOG.md +5 -5
- data/CODE_OF_CONDUCT.md +102 -102
- data/Gemfile +12 -12
- data/LICENSE.txt +21 -21
- data/README.md +18 -5
- data/Rakefile +12 -12
- data/bin/console +17 -17
- data/bin/setup +8 -8
- data/lib/testa_appium_driver/android/class_selectors.rb +101 -16
- data/lib/testa_appium_driver/android/driver.rb +19 -1
- data/lib/testa_appium_driver/android/locator.rb +22 -7
- data/lib/testa_appium_driver/android/scroll_actions/uiautomator_scroll_actions.rb +0 -14
- data/lib/testa_appium_driver/common/constants.rb +1 -0
- data/lib/testa_appium_driver/common/helpers.rb +5 -1
- data/lib/testa_appium_driver/common/locator/scroll_actions.rb +152 -58
- data/lib/testa_appium_driver/common/locator.rb +160 -25
- data/lib/testa_appium_driver/common/scroll_actions/w3c_scroll_actions.rb +14 -36
- data/lib/testa_appium_driver/common/scroll_actions.rb +30 -8
- data/lib/testa_appium_driver/common/selenium_element.rb +2 -2
- data/lib/testa_appium_driver/driver.rb +99 -29
- data/lib/testa_appium_driver/ios/driver.rb +14 -0
- data/lib/testa_appium_driver/ios/locator.rb +10 -5
- data/lib/testa_appium_driver/ios/type_selectors.rb +0 -13
- data/lib/testa_appium_driver/version.rb +5 -5
- data/testa_appium_driver.gemspec +1 -1
- data/testa_appium_driver.iml +39 -5
- metadata +7 -6
data/bin/setup
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
#!/usr/bin/env bash
|
2
|
-
set -euo pipefail
|
3
|
-
IFS=$'\n\t'
|
4
|
-
set -vx
|
5
|
-
|
6
|
-
bundle install
|
7
|
-
|
8
|
-
# Do any other automated setup that you need to do here
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
set -euo pipefail
|
3
|
+
IFS=$'\n\t'
|
4
|
+
set -vx
|
5
|
+
|
6
|
+
bundle install
|
7
|
+
|
8
|
+
# Do any other automated setup that you need to do here
|
@@ -20,42 +20,36 @@ 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 = {})
|
27
|
+
unless selectors[:image].nil?
|
28
|
+
selectors[:strategy] = FIND_STRATEGY_IMAGE
|
29
|
+
end
|
26
30
|
add_selector(selectors)
|
27
31
|
end
|
28
32
|
|
33
|
+
# all elements that match given selectors
|
29
34
|
# @param params [Hash]
|
30
35
|
# @return [TestaAppiumDriver::Locator] all elements that match given selectors
|
31
36
|
def elements(params = {})
|
37
|
+
unless params[:image].nil?
|
38
|
+
params[:strategy] = FIND_STRATEGY_IMAGE
|
39
|
+
end
|
32
40
|
params[:single] = false
|
33
41
|
add_selector(params)
|
34
42
|
end
|
35
43
|
|
36
44
|
|
37
|
-
#
|
38
|
-
# @return [TestaAppiumDriver::Locator] first scrollable element
|
39
|
-
def scrollable(selectors = {})
|
40
|
-
selectors[:scrollable] = true
|
41
|
-
add_selector(selectors)
|
42
|
-
end
|
43
|
-
|
44
|
-
# @param params [Hash]
|
45
|
-
# @return [TestaAppiumDriver::Locator] first scrollable element
|
46
|
-
def scrollables(params = {})
|
47
|
-
params[:scrollable] = true
|
48
|
-
params[:single] = false
|
49
|
-
add_selector(params)
|
50
|
-
end
|
51
|
-
|
52
|
-
|
45
|
+
# first android.widget.ImageView element that match given selectors
|
53
46
|
# @return [TestaAppiumDriver::Locator]
|
54
47
|
def image_view(params = {})
|
55
48
|
params[:class] = "android.widget.ImageView"
|
56
49
|
add_selector(params)
|
57
50
|
end
|
58
51
|
|
52
|
+
# all android.widget.ImageView elements that match given selectors
|
59
53
|
# @return [TestaAppiumDriver::Locator]
|
60
54
|
def image_views(params = {})
|
61
55
|
params[:class] = "android.widget.ImageView"
|
@@ -63,12 +57,14 @@ module TestaAppiumDriver
|
|
63
57
|
add_selector(params)
|
64
58
|
end
|
65
59
|
|
60
|
+
# first android.widget.FrameLayout element that match given selectors
|
66
61
|
# @return [TestaAppiumDriver::Locator]
|
67
62
|
def frame_layout(params = {})
|
68
63
|
params[:class] = "android.widget.FrameLayout"
|
69
64
|
add_selector(params)
|
70
65
|
end
|
71
66
|
|
67
|
+
# all android.widget.FrameLayout elements that match given selectors
|
72
68
|
# @return [TestaAppiumDriver::Locator]
|
73
69
|
def frame_layouts(params = {})
|
74
70
|
params[:class] = "android.widget.FrameLayout"
|
@@ -76,12 +72,14 @@ module TestaAppiumDriver
|
|
76
72
|
add_selector(params)
|
77
73
|
end
|
78
74
|
|
75
|
+
# first android.widget.LinearLayout element that match given selectors
|
79
76
|
# @return [TestaAppiumDriver::Locator]
|
80
77
|
def linear_layout(params = {})
|
81
78
|
params[:class] = "android.widget.LinearLayout"
|
82
79
|
add_selector(params)
|
83
80
|
end
|
84
81
|
|
82
|
+
# all android.widget.LinearLayout elements that match given selectors
|
85
83
|
# @return [TestaAppiumDriver::Locator]
|
86
84
|
def linear_layouts(params = {})
|
87
85
|
params[:class] = "android.widget.LinearLayout"
|
@@ -89,12 +87,14 @@ module TestaAppiumDriver
|
|
89
87
|
add_selector(params)
|
90
88
|
end
|
91
89
|
|
90
|
+
# first android.view.View element that match given selectors
|
92
91
|
# @return [TestaAppiumDriver::Locator]
|
93
92
|
def view(params = {})
|
94
93
|
params[:class] = "android.view.View"
|
95
94
|
add_selector(params)
|
96
95
|
end
|
97
96
|
|
97
|
+
# all android.view.View elements that match given selectors
|
98
98
|
# @return [TestaAppiumDriver::Locator]
|
99
99
|
def views(params = {})
|
100
100
|
params[:class] = "android.view.View"
|
@@ -102,12 +102,14 @@ module TestaAppiumDriver
|
|
102
102
|
add_selector(params)
|
103
103
|
end
|
104
104
|
|
105
|
+
# first android.widget.EditText element that match given selectors
|
105
106
|
# @return [TestaAppiumDriver::Locator]
|
106
107
|
def edit_text(params = {})
|
107
108
|
params[:class] = "android.widget.EditText"
|
108
109
|
add_selector(params)
|
109
110
|
end
|
110
111
|
|
112
|
+
# all android.widget.EditText elements that match given selectors
|
111
113
|
# @return [TestaAppiumDriver::Locator]
|
112
114
|
def edit_texts(params = {})
|
113
115
|
params[:class] = "android.widget.EditText"
|
@@ -115,12 +117,14 @@ module TestaAppiumDriver
|
|
115
117
|
add_selector(params)
|
116
118
|
end
|
117
119
|
|
120
|
+
# first android.widget.ViewGroup element that match given selectors
|
118
121
|
# @return [TestaAppiumDriver::Locator]
|
119
122
|
def view_group(params = {})
|
120
123
|
params[:class] = "android.widget.ViewGroup"
|
121
124
|
add_selector(params)
|
122
125
|
end
|
123
126
|
|
127
|
+
# all android.widget.ViewGroup elements that match given selectors
|
124
128
|
# @return [TestaAppiumDriver::Locator]
|
125
129
|
def view_groups(params = {})
|
126
130
|
params[:class] = "android.widget.ViewGroup"
|
@@ -128,12 +132,14 @@ module TestaAppiumDriver
|
|
128
132
|
add_selector(params)
|
129
133
|
end
|
130
134
|
|
135
|
+
# first android.widget.RelativeLayout element that match given selecotrs
|
131
136
|
# @return [TestaAppiumDriver::Locator]
|
132
137
|
def relative_layout(params = {})
|
133
138
|
params[:class] = "android.widget.RelativeLayout"
|
134
139
|
add_selector(params)
|
135
140
|
end
|
136
141
|
|
142
|
+
# all android.widget.RelativeLayout elements that match given selectors
|
137
143
|
# @return [TestaAppiumDriver::Locator]
|
138
144
|
def relative_layouts(params = {})
|
139
145
|
params[:class] = "android.widget.RelativeLayout"
|
@@ -141,12 +147,14 @@ module TestaAppiumDriver
|
|
141
147
|
add_selector(params)
|
142
148
|
end
|
143
149
|
|
150
|
+
# first androidx.recyclerview.widget.RecyclerView element that match given selectors
|
144
151
|
# @return [TestaAppiumDriver::Locator]
|
145
152
|
def recycler_view(params = {})
|
146
153
|
params[:class] = "androidx.recyclerview.widget.RecyclerView"
|
147
154
|
add_selector(params)
|
148
155
|
end
|
149
156
|
|
157
|
+
# all androidx.recyclerview.widget.RecyclerView elements that match given selectors
|
150
158
|
# @return [TestaAppiumDriver::Locator]
|
151
159
|
def recycler_views(params = {})
|
152
160
|
params[:class] = "androidx.recyclerview.widget.RecyclerView"
|
@@ -154,12 +162,14 @@ module TestaAppiumDriver
|
|
154
162
|
add_selector(params)
|
155
163
|
end
|
156
164
|
|
165
|
+
# first android.widget.Button element that match given selectors
|
157
166
|
# @return [TestaAppiumDriver::Locator]
|
158
167
|
def button(params = {})
|
159
168
|
params[:class] = "android.widget.Button"
|
160
169
|
add_selector(params)
|
161
170
|
end
|
162
171
|
|
172
|
+
# all android.widget.Button elements that match given selectors
|
163
173
|
# @return [TestaAppiumDriver::Locator]
|
164
174
|
def buttons(params = {})
|
165
175
|
params[:class] = "android.widget.Button"
|
@@ -167,12 +177,14 @@ module TestaAppiumDriver
|
|
167
177
|
add_selector(params)
|
168
178
|
end
|
169
179
|
|
180
|
+
# first android.widget.ImageButton element that match given selectors
|
170
181
|
# @return [TestaAppiumDriver::Locator]
|
171
182
|
def image_button(params = {})
|
172
183
|
params[:class] = "android.widget.ImageButton"
|
173
184
|
add_selector(params)
|
174
185
|
end
|
175
186
|
|
187
|
+
# all android.widget.ImageButton elements that match given selectors
|
176
188
|
# @return [TestaAppiumDriver::Locator]
|
177
189
|
def image_buttons(params = {})
|
178
190
|
params[:class] = "android.widget.ImageButton"
|
@@ -180,12 +192,14 @@ module TestaAppiumDriver
|
|
180
192
|
add_selector(params)
|
181
193
|
end
|
182
194
|
|
195
|
+
# first android.widget.HorizontalScrollView element that match given selectors
|
183
196
|
# @return [TestaAppiumDriver::Locator]
|
184
197
|
def horizontal_scroll_view(params = {})
|
185
198
|
params[:class] = "android.widget.HorizontalScrollView"
|
186
199
|
add_selector(params)
|
187
200
|
end
|
188
201
|
|
202
|
+
# all android.widget.HorizontalScrollView elements that match given selectors
|
189
203
|
# @return [TestaAppiumDriver::Locator]
|
190
204
|
def horizontal_scroll_views(params = {})
|
191
205
|
params[:class] = "android.widget.HorizontalScrollView"
|
@@ -193,12 +207,14 @@ module TestaAppiumDriver
|
|
193
207
|
add_selector(params)
|
194
208
|
end
|
195
209
|
|
210
|
+
# first android.widget.ScrollView element that match given selectors
|
196
211
|
# @return [TestaAppiumDriver::Locator]
|
197
212
|
def scroll_view(params = {})
|
198
213
|
params[:class] = "android.widget.ScrollView"
|
199
214
|
add_selector(params)
|
200
215
|
end
|
201
216
|
|
217
|
+
# all android.widget.ScrollView elements that match given selectors
|
202
218
|
# @return [TestaAppiumDriver::Locator]
|
203
219
|
def scroll_views(params = {})
|
204
220
|
params[:class] = "android.widget.ScrollView"
|
@@ -206,12 +222,14 @@ module TestaAppiumDriver
|
|
206
222
|
add_selector(params)
|
207
223
|
end
|
208
224
|
|
225
|
+
# first viewpager.widget.ViewPager element that match given selectors
|
209
226
|
# @return [TestaAppiumDriver::Locator]
|
210
227
|
def view_pager(params = {})
|
211
228
|
params[:class] = "androidx.viewpager.widget.ViewPager"
|
212
229
|
add_selector(params)
|
213
230
|
end
|
214
231
|
|
232
|
+
# all viewpager.widget.ViewPager elements that match given selectors
|
215
233
|
# @return [TestaAppiumDriver::Locator]
|
216
234
|
def view_pagers(params = {})
|
217
235
|
params[:class] = "androidx.viewpager.widget.ViewPager"
|
@@ -219,12 +237,14 @@ module TestaAppiumDriver
|
|
219
237
|
add_selector(params)
|
220
238
|
end
|
221
239
|
|
240
|
+
# first android.widget.CheckBox element that match given selectors
|
222
241
|
# @return [TestaAppiumDriver::Locator]
|
223
242
|
def check_box(params = {})
|
224
243
|
params[:class] = "android.widget.CheckBox"
|
225
244
|
add_selector(params)
|
226
245
|
end
|
227
246
|
|
247
|
+
# all android.widget.CheckBox elements that match given selectors
|
228
248
|
# @return [TestaAppiumDriver::Locator]
|
229
249
|
def check_boxes(params = {})
|
230
250
|
params[:class] = "android.widget.CheckBox"
|
@@ -232,12 +252,14 @@ module TestaAppiumDriver
|
|
232
252
|
add_selector(params)
|
233
253
|
end
|
234
254
|
|
255
|
+
# first android.widget.ListView element that match given selectors
|
235
256
|
# @return [TestaAppiumDriver::Locator]
|
236
257
|
def list_view(params = {})
|
237
258
|
params[:class] = "android.widget.ListView"
|
238
259
|
add_selector(params)
|
239
260
|
end
|
240
261
|
|
262
|
+
# all android.widget.ListView elements that match given selectors
|
241
263
|
# @return [TestaAppiumDriver::Locator]
|
242
264
|
def list_views(params = {})
|
243
265
|
params[:class] = "android.widget.ListView"
|
@@ -245,12 +267,14 @@ module TestaAppiumDriver
|
|
245
267
|
add_selector(params)
|
246
268
|
end
|
247
269
|
|
270
|
+
# first android.widget.ProgressBar element that match given selectors
|
248
271
|
# @return [TestaAppiumDriver::Locator]
|
249
272
|
def progress_bar(params = {})
|
250
273
|
params[:class] = "android.widget.ProgressBar"
|
251
274
|
add_selector(params)
|
252
275
|
end
|
253
276
|
|
277
|
+
# all android.widget.ProgressBar elements that match given selectors
|
254
278
|
# @return [TestaAppiumDriver::Locator]
|
255
279
|
def progress_bars(params = {})
|
256
280
|
params[:class] = "android.widget.ProgressBar"
|
@@ -258,12 +282,14 @@ module TestaAppiumDriver
|
|
258
282
|
add_selector(params)
|
259
283
|
end
|
260
284
|
|
285
|
+
# first android.widget.RadioButton element that match given selectors
|
261
286
|
# @return [TestaAppiumDriver::Locator]
|
262
287
|
def radio_button(params = {})
|
263
288
|
params[:class] = "android.widget.RadioButton"
|
264
289
|
add_selector(params)
|
265
290
|
end
|
266
291
|
|
292
|
+
# all android.widget.RadioButton elements that match given selectors
|
267
293
|
# @return [TestaAppiumDriver::Locator]
|
268
294
|
def radio_buttons(params = {})
|
269
295
|
params[:class] = "android.widget.RadioButton"
|
@@ -271,12 +297,14 @@ module TestaAppiumDriver
|
|
271
297
|
add_selector(params)
|
272
298
|
end
|
273
299
|
|
300
|
+
# first android.widget.RadioGroup element that match given selectors
|
274
301
|
# @return [TestaAppiumDriver::Locator]
|
275
302
|
def radio_group(params = {})
|
276
303
|
params[:class] = "android.widget.RadioGroup"
|
277
304
|
add_selector(params)
|
278
305
|
end
|
279
306
|
|
307
|
+
# all android.widget.RadioGroup elements that match given selectors
|
280
308
|
# @return [TestaAppiumDriver::Locator]
|
281
309
|
def radio_groups(params = {})
|
282
310
|
params[:class] = "android.widget.RadioGroup"
|
@@ -284,12 +312,14 @@ module TestaAppiumDriver
|
|
284
312
|
add_selector(params)
|
285
313
|
end
|
286
314
|
|
315
|
+
# first android.widget.SearchView element that match given selectors
|
287
316
|
# @return [TestaAppiumDriver::Locator]
|
288
317
|
def search_view(params = {})
|
289
318
|
params[:class] = "android.widget.SearchView"
|
290
319
|
add_selector(params)
|
291
320
|
end
|
292
321
|
|
322
|
+
# all android.widget.SearchView elements that match given selectors
|
293
323
|
# @return [TestaAppiumDriver::Locator]
|
294
324
|
def search_views(params = {})
|
295
325
|
params[:class] = "android.widget.SearchView"
|
@@ -297,12 +327,14 @@ module TestaAppiumDriver
|
|
297
327
|
add_selector(params)
|
298
328
|
end
|
299
329
|
|
330
|
+
# first android.widget.Spinner element that match given selectors
|
300
331
|
# @return [TestaAppiumDriver::Locator]
|
301
332
|
def spinner(params = {})
|
302
333
|
params[:class] = "android.widget.Spinner"
|
303
334
|
add_selector(params)
|
304
335
|
end
|
305
336
|
|
337
|
+
# all android.widget.Spinner elements that match given selectors
|
306
338
|
# @return [TestaAppiumDriver::Locator]
|
307
339
|
def spinners(params = {})
|
308
340
|
params[:class] = "android.widget.Spinner"
|
@@ -310,12 +342,14 @@ module TestaAppiumDriver
|
|
310
342
|
add_selector(params)
|
311
343
|
end
|
312
344
|
|
345
|
+
# first android.widget.Toast element that match given selectors
|
313
346
|
# @return [TestaAppiumDriver::Locator]
|
314
347
|
def toast(params = {})
|
315
348
|
params[:class] = "android.widget.Toast"
|
316
349
|
add_selector(params)
|
317
350
|
end
|
318
351
|
|
352
|
+
# all android.widget.Toast elements that match given selectors
|
319
353
|
# @return [TestaAppiumDriver::Locator]
|
320
354
|
def toasts(params = {})
|
321
355
|
params[:class] = "android.widget.Toast"
|
@@ -323,12 +357,14 @@ module TestaAppiumDriver
|
|
323
357
|
add_selector(params)
|
324
358
|
end
|
325
359
|
|
360
|
+
# first android.widget.Toolbar element that match given selectors
|
326
361
|
# @return [TestaAppiumDriver::Locator]
|
327
362
|
def toolbar(params = {})
|
328
363
|
params[:class] = "android.widget.Toolbar"
|
329
364
|
add_selector(params)
|
330
365
|
end
|
331
366
|
|
367
|
+
# all android.widget.Toolbar elements that match given selectors
|
332
368
|
# @return [TestaAppiumDriver::Locator]
|
333
369
|
def toolbars(params = {})
|
334
370
|
params[:class] = "android.widget.Toolbar"
|
@@ -336,12 +372,14 @@ module TestaAppiumDriver
|
|
336
372
|
add_selector(params)
|
337
373
|
end
|
338
374
|
|
375
|
+
# first android.widget.TextView element that match given selectors
|
339
376
|
# @return [TestaAppiumDriver::Locator]
|
340
377
|
def text_view(params = {})
|
341
378
|
params[:class] = "android.widget.TextView"
|
342
379
|
add_selector(params)
|
343
380
|
end
|
344
381
|
|
382
|
+
# all android.widget.TextView elements that match given selectors
|
345
383
|
# @return [TestaAppiumDriver::Locator]
|
346
384
|
def text_views(params = {})
|
347
385
|
params[:class] = "android.widget.TextView"
|
@@ -349,5 +387,52 @@ module TestaAppiumDriver
|
|
349
387
|
add_selector(params)
|
350
388
|
end
|
351
389
|
|
390
|
+
|
391
|
+
# first androidx.cardview.widget.CardView element that match given selectors
|
392
|
+
# @return [TestaAppiumDriver::Locator]
|
393
|
+
def card_view(params = {})
|
394
|
+
params[:class] = "androidx.cardview.widget.CardView"
|
395
|
+
add_selector(params)
|
396
|
+
end
|
397
|
+
|
398
|
+
# all androidx.cardview.widget.CardView elements that match given selectors
|
399
|
+
# @return [TestaAppiumDriver::Locator]
|
400
|
+
def card_views(params = {})
|
401
|
+
params[:class] = "androidx.cardview.widget.CardView"
|
402
|
+
params[:single] = false
|
403
|
+
add_selector(params)
|
404
|
+
end
|
405
|
+
|
406
|
+
# first android.widget.Switch element that match given selectors
|
407
|
+
# @return [TestaAppiumDriver::Locator]
|
408
|
+
def switch(params = {})
|
409
|
+
params[:class] = "android.widget.Switch"
|
410
|
+
add_selector(params)
|
411
|
+
end
|
412
|
+
|
413
|
+
# all android.widget.Switch elements that match given selectors
|
414
|
+
# @return [TestaAppiumDriver::Locator]
|
415
|
+
def switches(params = {})
|
416
|
+
params[:class] = "android.widget.Switch"
|
417
|
+
params[:single] = false
|
418
|
+
add_selector(params)
|
419
|
+
end
|
420
|
+
|
421
|
+
|
422
|
+
# first android.webkit.WebView element that match given selectors
|
423
|
+
# @return [TestaAppiumDriver::Locator]
|
424
|
+
def web_view(params = {})
|
425
|
+
params[:class] = "android.webkit.WebView"
|
426
|
+
add_selector(params)
|
427
|
+
end
|
428
|
+
|
429
|
+
# all android.webkit.WebView elements that match given selectors
|
430
|
+
# @return [TestaAppiumDriver::Locator]
|
431
|
+
def web_views(params = {})
|
432
|
+
params[:class] = "android.webkit.WebView"
|
433
|
+
params[:single] = false
|
434
|
+
add_selector(params)
|
435
|
+
end
|
436
|
+
|
352
437
|
end
|
353
438
|
end
|
@@ -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,24 @@ module TestaAppiumDriver
|
|
24
24
|
end
|
25
25
|
|
26
26
|
|
27
|
+
def scrollable
|
28
|
+
locator = Locator.new(self, self, {single: true})
|
29
|
+
locator.xpath_selector = "//androidx.recyclerview.widget.RecyclerView|//android.widget.ScrollView|//android.widget.ListView|//android.widget.HorizontalScrollView"
|
30
|
+
locator.ui_selector = "new UiSelector().scrollable(true).instance(0)"
|
31
|
+
locator
|
32
|
+
end
|
33
|
+
|
34
|
+
|
35
|
+
def scrollables
|
36
|
+
locator = Locator.new(self, self, {single: false})
|
37
|
+
locator.xpath_selector = "//androidx.recyclerview.widget.RecyclerView|//android.widget.ScrollView|//android.widget.ListView|//android.widget.HorizontalScrollView"
|
38
|
+
locator.ui_selector = "new UiSelector().scrollable(true)"
|
39
|
+
locator
|
40
|
+
end
|
41
|
+
|
42
|
+
|
43
|
+
|
44
|
+
private
|
27
45
|
def handle_testa_opts
|
28
46
|
if @testa_opts[:default_find_strategy].nil?
|
29
47
|
@default_find_strategy = DEFAULT_ANDROID_FIND_STRATEGY
|
@@ -36,15 +36,23 @@ module TestaAppiumDriver
|
|
36
36
|
|
37
37
|
|
38
38
|
# resolve selector which will be used for finding element
|
39
|
-
def
|
39
|
+
def strategies_and_selectors
|
40
|
+
ss = []
|
40
41
|
if @can_use_id_strategy
|
41
|
-
|
42
|
+
ss.push({"#{FIND_STRATEGY_ID}": @can_use_id_strategy})
|
42
43
|
end
|
43
|
-
if
|
44
|
-
|
45
|
-
elsif (@strategy.nil? && @default_find_strategy == FIND_STRATEGY_XPATH) || @strategy == FIND_STRATEGY_XPATH
|
46
|
-
[FIND_STRATEGY_XPATH, @xpath_selector]
|
44
|
+
if @strategy.nil? || @strategy == FIND_STRATEGY_UIAUTOMATOR
|
45
|
+
ss.push({"#{FIND_STRATEGY_UIAUTOMATOR}": ui_selector})
|
47
46
|
end
|
47
|
+
|
48
|
+
if @strategy.nil? || @strategy == FIND_STRATEGY_XPATH
|
49
|
+
ss.push({"#{FIND_STRATEGY_XPATH}": @xpath_selector})
|
50
|
+
end
|
51
|
+
|
52
|
+
if @strategy == FIND_STRATEGY_IMAGE
|
53
|
+
ss.push({"#{FIND_STRATEGY_IMAGE}": @image_selector})
|
54
|
+
end
|
55
|
+
ss
|
48
56
|
end
|
49
57
|
|
50
58
|
|
@@ -75,7 +83,7 @@ module TestaAppiumDriver
|
|
75
83
|
end
|
76
84
|
|
77
85
|
|
78
|
-
# @return [Locator]
|
86
|
+
# @return [Locator] new child locator element
|
79
87
|
def add_child_selector(params)
|
80
88
|
params, selectors = extract_selectors_from_params(params)
|
81
89
|
single = params[:single]
|
@@ -89,6 +97,8 @@ module TestaAppiumDriver
|
|
89
97
|
add_xpath_child_selectors(locator, selectors, single)
|
90
98
|
elsif @strategy == FIND_STRATEGY_UIAUTOMATOR
|
91
99
|
locator = add_uiautomator_child_selector(locator, selectors, single)
|
100
|
+
elsif @strategy == FIND_STRATEGY_IMAGE
|
101
|
+
locator = add_image_child_selector(locator, selectors, single)
|
92
102
|
else
|
93
103
|
# both paths are valid
|
94
104
|
add_xpath_child_selectors(locator, selectors, single)
|
@@ -123,5 +133,10 @@ module TestaAppiumDriver
|
|
123
133
|
locator
|
124
134
|
end
|
125
135
|
end
|
136
|
+
|
137
|
+
def add_image_child_selector(locator, selectors, single)
|
138
|
+
params = selectors.merge({single: single, scrollable_locator: locator.scrollable_locator})
|
139
|
+
Locator.new(@driver, self, params)
|
140
|
+
end
|
126
141
|
end
|
127
142
|
end
|
@@ -4,8 +4,6 @@ module TestaAppiumDriver
|
|
4
4
|
private
|
5
5
|
|
6
6
|
def uiautomator_scroll_to_start_or_end(type)
|
7
|
-
@driver.disable_wait_for_idle
|
8
|
-
@driver.disable_implicit_wait
|
9
7
|
|
10
8
|
scrollable_selector = @scrollable.ui_selector(false)
|
11
9
|
orientation = @scrollable.scroll_orientation == :vertical ? ".setAsVerticalList()" : ".setAsHorizontalList()"
|
@@ -19,18 +17,12 @@ module TestaAppiumDriver
|
|
19
17
|
end
|
20
18
|
|
21
19
|
|
22
|
-
@driver.enable_implicit_wait
|
23
|
-
@driver.enable_wait_for_idle
|
24
20
|
end
|
25
21
|
|
26
22
|
|
27
23
|
def uiautomator_scroll_to
|
28
24
|
raise "UiAutomator scroll cannot work with specified direction" unless @direction.nil?
|
29
25
|
|
30
|
-
|
31
|
-
@driver.disable_wait_for_idle
|
32
|
-
@driver.disable_implicit_wait
|
33
|
-
|
34
26
|
scrollable_selector = @scrollable.ui_selector(false)
|
35
27
|
element_selector = @locator.ui_selector(false)
|
36
28
|
orientation_command = @scrollable.scroll_orientation == :vertical ? ".setAsVerticalList()" : ".setAsHorizontalList()"
|
@@ -41,15 +33,11 @@ module TestaAppiumDriver
|
|
41
33
|
rescue
|
42
34
|
# Ignored
|
43
35
|
ensure
|
44
|
-
@driver.enable_implicit_wait
|
45
|
-
@driver.enable_wait_for_idle
|
46
36
|
end
|
47
37
|
end
|
48
38
|
|
49
39
|
|
50
40
|
def uiautomator_page_or_fling(type, direction)
|
51
|
-
@driver.disable_wait_for_idle
|
52
|
-
@driver.disable_implicit_wait
|
53
41
|
|
54
42
|
scrollable_selector = @scrollable.ui_selector(false)
|
55
43
|
orientation = direction == :up || direction == :down ? ".setAsVerticalList()" : ".setAsHorizontalList()"
|
@@ -67,8 +55,6 @@ module TestaAppiumDriver
|
|
67
55
|
rescue
|
68
56
|
# Ignored
|
69
57
|
end
|
70
|
-
@driver.enable_implicit_wait
|
71
|
-
@driver.enable_wait_for_idle
|
72
58
|
end
|
73
59
|
|
74
60
|
|
@@ -120,7 +120,9 @@ module TestaAppiumDriver
|
|
120
120
|
command = "#{ command }[@focused=\"#{ hash[:focused] }\"]" unless hash[:focused].nil?
|
121
121
|
command = "#{ command }[@index=\"#{ hash[:index] }\"]" unless hash[:index].nil?
|
122
122
|
command = "#{ command }[@selected=\"#{ hash[:selected] }\"]" unless hash[:selected].nil?
|
123
|
-
|
123
|
+
|
124
|
+
# it seems like you cannot query by scrollable
|
125
|
+
# command = "#{ command }[@scrollable=\"#{ hash[:scrollable] }\"]" unless hash[:scrollable].nil?
|
124
126
|
else
|
125
127
|
|
126
128
|
hash[:type] = hash[:class] unless hash[:class].nil?
|
@@ -205,6 +207,8 @@ module TestaAppiumDriver
|
|
205
207
|
:visible,
|
206
208
|
:name,
|
207
209
|
:value,
|
210
|
+
|
211
|
+
:image
|
208
212
|
].include?(key) }
|
209
213
|
params = Hash[params.to_a - selectors.to_a]
|
210
214
|
|