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.
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