testa_appium_driver 0.1.3 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
|