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.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -2
  3. data/.idea/deployment.xml +10 -2
  4. data/.idea/inspectionProfiles/Project_Default.xml +8 -8
  5. data/.idea/runConfigurations/Android_Test.xml +41 -41
  6. data/.idea/runConfigurations.xml +10 -0
  7. data/.idea/sshConfigs.xml +3 -0
  8. data/.idea/webServers.xml +7 -0
  9. data/.rspec +3 -3
  10. data/.rubocop.yml +13 -13
  11. data/CHANGELOG.md +5 -5
  12. data/CODE_OF_CONDUCT.md +102 -102
  13. data/Gemfile +12 -12
  14. data/LICENSE.txt +21 -21
  15. data/README.md +18 -5
  16. data/Rakefile +12 -12
  17. data/bin/console +17 -17
  18. data/bin/setup +8 -8
  19. data/lib/testa_appium_driver/android/class_selectors.rb +101 -16
  20. data/lib/testa_appium_driver/android/driver.rb +19 -1
  21. data/lib/testa_appium_driver/android/locator.rb +22 -7
  22. data/lib/testa_appium_driver/android/scroll_actions/uiautomator_scroll_actions.rb +0 -14
  23. data/lib/testa_appium_driver/common/constants.rb +1 -0
  24. data/lib/testa_appium_driver/common/helpers.rb +5 -1
  25. data/lib/testa_appium_driver/common/locator/scroll_actions.rb +152 -58
  26. data/lib/testa_appium_driver/common/locator.rb +160 -25
  27. data/lib/testa_appium_driver/common/scroll_actions/w3c_scroll_actions.rb +14 -36
  28. data/lib/testa_appium_driver/common/scroll_actions.rb +30 -8
  29. data/lib/testa_appium_driver/common/selenium_element.rb +2 -2
  30. data/lib/testa_appium_driver/driver.rb +99 -29
  31. data/lib/testa_appium_driver/ios/driver.rb +14 -0
  32. data/lib/testa_appium_driver/ios/locator.rb +10 -5
  33. data/lib/testa_appium_driver/ios/type_selectors.rb +0 -13
  34. data/lib/testa_appium_driver/version.rb +5 -5
  35. data/testa_appium_driver.gemspec +1 -1
  36. data/testa_appium_driver.iml +39 -5
  37. 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
- # @param selectors [Hash]
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 strategy_and_selector
39
+ def strategies_and_selectors
40
+ ss = []
40
41
  if @can_use_id_strategy
41
- return FIND_STRATEGY_ID, @can_use_id_strategy
42
+ ss.push({"#{FIND_STRATEGY_ID}": @can_use_id_strategy})
42
43
  end
43
- if (@strategy.nil? && @default_find_strategy == FIND_STRATEGY_UIAUTOMATOR) || @strategy == FIND_STRATEGY_UIAUTOMATOR
44
- [FIND_STRATEGY_UIAUTOMATOR, ui_selector]
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] existing locator element
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
 
@@ -6,6 +6,7 @@ module TestaAppiumDriver
6
6
  FIND_STRATEGY_XPATH = :xpath
7
7
  FIND_STRATEGY_ID = :id
8
8
  FIND_STRATEGY_NAME = :name
9
+ FIND_STRATEGY_IMAGE = :image
9
10
 
10
11
  SCROLL_STRATEGY_UIAUTOMATOR = :uiautomator
11
12
  SCROLL_STRATEGY_W3C = :w3c
@@ -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
- command = "#{ command }[@scrollable=\"#{ hash[:scrollable] }\"]" unless hash[:scrollable].nil?
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