appium_lib 9.7.5 → 9.8.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +25 -0
  3. data/appium_lib.gemspec +1 -3
  4. data/contributing.md +2 -0
  5. data/docs/android_docs.md +186 -180
  6. data/docs/ios_docs.md +238 -234
  7. data/docs/ios_xcuitest.md +1 -1
  8. data/lib/appium_lib/android/common/helper.rb +0 -30
  9. data/lib/appium_lib/appium.rb +3 -4
  10. data/lib/appium_lib/common/helper.rb +0 -1
  11. data/lib/appium_lib/common/http_client.rb +1 -1
  12. data/lib/appium_lib/common/touch_actions.rb +4 -4
  13. data/lib/appium_lib/common/wait.rb +1 -1
  14. data/lib/appium_lib/driver.rb +7 -8
  15. data/lib/appium_lib/ios/common/helper.rb +1 -8
  16. data/lib/appium_lib/version.rb +2 -2
  17. data/readme.md +29 -8
  18. data/release_notes.md +6 -0
  19. metadata +5 -77
  20. data/lib/appium_lib/core/android.rb +0 -5
  21. data/lib/appium_lib/core/android/device.rb +0 -142
  22. data/lib/appium_lib/core/android/espresso/bridge.rb +0 -18
  23. data/lib/appium_lib/core/android/search_context.rb +0 -17
  24. data/lib/appium_lib/core/android/touch.rb +0 -15
  25. data/lib/appium_lib/core/android/uiautomator1/bridge.rb +0 -18
  26. data/lib/appium_lib/core/android/uiautomator2/bridge.rb +0 -18
  27. data/lib/appium_lib/core/android_espresso.rb +0 -5
  28. data/lib/appium_lib/core/android_uiautomator2.rb +0 -5
  29. data/lib/appium_lib/core/common.rb +0 -6
  30. data/lib/appium_lib/core/common/base.rb +0 -8
  31. data/lib/appium_lib/core/common/base/bridge.rb +0 -47
  32. data/lib/appium_lib/core/common/base/capabilities.rb +0 -16
  33. data/lib/appium_lib/core/common/base/command.rb +0 -10
  34. data/lib/appium_lib/core/common/base/driver.rb +0 -40
  35. data/lib/appium_lib/core/common/base/http_default.rb +0 -12
  36. data/lib/appium_lib/core/common/base/search_context.rb +0 -89
  37. data/lib/appium_lib/core/common/base/wait.rb +0 -56
  38. data/lib/appium_lib/core/common/command.rb +0 -75
  39. data/lib/appium_lib/core/common/device.rb +0 -462
  40. data/lib/appium_lib/core/common/error.rb +0 -18
  41. data/lib/appium_lib/core/common/log.rb +0 -30
  42. data/lib/appium_lib/core/common/logger.rb +0 -35
  43. data/lib/appium_lib/core/core.rb +0 -67
  44. data/lib/appium_lib/core/device/multi_touch.rb +0 -48
  45. data/lib/appium_lib/core/device/touch_actions.rb +0 -191
  46. data/lib/appium_lib/core/driver.rb +0 -417
  47. data/lib/appium_lib/core/ios.rb +0 -7
  48. data/lib/appium_lib/core/ios/device.rb +0 -44
  49. data/lib/appium_lib/core/ios/search_context.rb +0 -27
  50. data/lib/appium_lib/core/ios/touch.rb +0 -16
  51. data/lib/appium_lib/core/ios/uiautomation/bridge.rb +0 -20
  52. data/lib/appium_lib/core/ios/uiautomation/patch.rb +0 -20
  53. data/lib/appium_lib/core/ios/xcuitest/bridge.rb +0 -20
  54. data/lib/appium_lib/core/ios/xcuitest/device.rb +0 -59
  55. data/lib/appium_lib/core/ios/xcuitest/search_context.rb +0 -40
  56. data/lib/appium_lib/core/ios_xcuitest.rb +0 -8
  57. data/lib/appium_lib/core/patch.rb +0 -56
@@ -1,462 +0,0 @@
1
- require 'base64'
2
-
3
- module Appium
4
- module Core
5
- module Device
6
- extend Forwardable
7
-
8
- # @!method app_strings
9
- # Return the hash of all localization strings.
10
- # ```ruby
11
- # app_strings #=> "TransitionsTitle"=>"Transitions", "WebTitle"=>"Web"
12
- # ```
13
-
14
- # @!method background_app
15
- # Backgrounds the app for a set number of seconds.
16
- # This is a blocking application
17
- # @param [Integer] seconds How many seconds to background the app for.
18
- #
19
- # ```ruby
20
- # background_app
21
- # background_app(5)
22
- # background_app(-1) #=> the app never come back. https://github.com/appium/appium/issues/7741
23
- # ```
24
-
25
- # @!method current_activity
26
- # Get current activity name
27
- # @return [String] An activity name
28
- #
29
- # ```ruby
30
- # current_activity # '.ApiDemos'
31
- # ```
32
-
33
- # @!method current_package
34
- # Get current package name
35
- # @return [String] A package name
36
- #
37
- # ```ruby
38
- # current_package # 'com.example.android.apis'
39
- # ```
40
-
41
- # @!method get_system_bars
42
- # Get system bar's information
43
- # @return [String] System bar
44
- #
45
- # ```ruby
46
- # get_system_bars
47
- # ```
48
-
49
- # @!method get_display_density
50
- # Get connected device's density.
51
- # @return [Integer] The size of density
52
- #
53
- # ```ruby
54
- # get_display_density # 320
55
- # ```
56
-
57
- # @!method is_keyboard_shown
58
- # Get whether keyboard is displayed or not.
59
- # @return [Bool] Return true if keyboard is shown. Return false if keyboard is hidden.
60
- #
61
- # ```ruby
62
- # is_keyboard_shown # false
63
- # ```
64
-
65
- # @!method launch_app
66
- # Start the simulator and application configured with desired capabilities
67
-
68
- # @!method reset
69
- # Reset the device, relaunching the application.
70
-
71
- # @!method shake
72
- # Cause the device to shake
73
-
74
- # @!method toggle_flight_mode
75
- # Toggle flight mode on or off
76
-
77
- # @!method device_locked?
78
-
79
- # @!method hide_keyboard
80
- # Hide the onscreen keyboard
81
- # @param [String] close_key The name of the key which closes the keyboard.
82
- # Defaults to 'Done' for iOS(except for XCUITest).
83
- # @param [Symbol] strategy The symbol of the strategy which closes the keyboard.
84
- # XCUITest ignore this argument.
85
- # Default for iOS is `:pressKey`. Default for Android is `:tapOutside`.
86
- # ```ruby
87
- # hide_keyboard # Close a keyboard with the 'Done' button
88
- # hide_keyboard('Finished') # Close a keyboard with the 'Finished' button
89
- # hide_keyboard(nil, :tapOutside) # Close a keyboard with tapping out side of keyboard
90
- # ```
91
-
92
- # @!method press_keycode
93
- # Press keycode on the device.
94
- # http://developer.android.com/reference/android/view/KeyEvent.html
95
- # @param [integer] key The key to press.
96
- # @param [String] metastate The state the metakeys should be in when pressing the key.
97
-
98
- # @!method long_press_keycode
99
- # Long press keycode on the device.
100
- # http://developer.android.com/reference/android/view/KeyEvent.html
101
- # @param [integer] key The key to long press.
102
- # @param [String] metastate The state the metakeys should be in when long pressing the key.
103
-
104
- # @!method push_file
105
- # Place a file in a specific location on the device.
106
- # @param [String] path The absolute path on the device to store data at.
107
- # @param [String] data Raw file data to be sent to the device.
108
-
109
- # @!method pull_file
110
- # Retrieve a file from the device. This can retrieve an absolute path or
111
- # a path relative to the installed app (iOS only).
112
- # @param [String] path Either an absolute path OR, for iOS devices, a path relative to the app, as described.
113
- #
114
- # ```ruby
115
- # pull_file '/local/data/some/path' #=> Get the file at that path
116
- # pull_file 'Shenanigans.app/some/file' #=> Get 'some/file' from the install location of Shenanigans.app
117
- # ```
118
-
119
- # @!method pull_folder
120
- # Retrieve a folder from the device.
121
- # @param [String] path absolute path to the folder
122
- #
123
- # ```ruby
124
- # pull_folder '/data/local/tmp' #=> Get the folder at that path
125
- # ```
126
-
127
- # @!method get_settings
128
- # Get appium Settings for current test session
129
-
130
- # @!method update_settings
131
- # Update appium Settings for current test session
132
- # @param [Hash] settings Settings to update, keys are settings, values to value to set each setting to
133
-
134
- # @!method set_immediate_value
135
- # Set the value to element directly
136
- # for iOS; setValue is called in XCUITest instead because XCUITest doesn't provide set value directly.
137
- # https://github.com/appium/appium-xcuitest-driver/blob/793cdc7d5e84bd553e375076e1c6dc7e242c9cde/lib/commands/element.js#L123
138
- #
139
- # ```ruby
140
- # set_immediate_value element, 'hello'
141
- # ```
142
-
143
- # @!method get_network_connection
144
- # Get the device network connection current status
145
- # See set_network_connection method for return value
146
-
147
- class << self
148
- def extended(_mod)
149
- extend_webdriver_with_forwardable
150
-
151
- ::Appium::Core::Commands::COMMAND_NO_ARG.each_key do |method|
152
- add_endpoint_method method
153
- end
154
-
155
- # call http://www.rubydoc.info/gems/selenium-webdriver/Selenium/WebDriver/DriverExtensions/HasRemoteStatus#remote_status-instance_method
156
- add_endpoint_method(:remote_status) do
157
- def remote_status
158
- execute(:status, {}) || []
159
- end
160
- end
161
-
162
- # TODO: Don't define selenium-side methods. We pick up from them.
163
- # ::Appium::Core::Base::Commands::OSS.each_key do |method|
164
- # add_endpoint_method method
165
- # end
166
-
167
- add_endpoint_method(:available_contexts) do
168
- def available_contexts
169
- # return empty array instead of nil on failure
170
- execute(:available_contexts, {}) || []
171
- end
172
- end
173
-
174
- add_endpoint_method(:app_strings) do
175
- def app_strings(language = nil)
176
- opts = language ? { language: language } : {}
177
- execute :app_strings, {}, opts
178
- end
179
- end
180
-
181
- add_endpoint_method(:lock) do
182
- def lock(duration)
183
- execute :lock, {}, seconds: duration
184
- end
185
- end
186
-
187
- add_endpoint_method(:install_app) do
188
- def install_app(path)
189
- execute :install_app, {}, appPath: path
190
- end
191
- end
192
-
193
- add_endpoint_method(:remove_app) do
194
- def remove_app(id)
195
- execute :remove_app, {}, appId: id
196
- end
197
- end
198
-
199
- add_endpoint_method(:app_installed?) do
200
- def app_installed?(app_id)
201
- execute :app_installed?, {}, bundleId: app_id
202
- end
203
- end
204
-
205
- add_endpoint_method(:background_app) do
206
- def background_app(duration = 0)
207
- execute :background_app, {}, seconds: duration
208
- end
209
- end
210
-
211
- add_endpoint_method(:set_context) do
212
- def set_context(context = null)
213
- execute :set_context, {}, name: context
214
- end
215
- end
216
-
217
- add_endpoint_method(:hide_keyboard) do
218
- def hide_keyboard(close_key = nil, strategy = nil)
219
- option = {}
220
-
221
- option[:key] = close_key || 'Done' # default to Done key.
222
- option[:strategy] = strategy || :pressKey # default to pressKey
223
-
224
- execute :hide_keyboard, {}, option
225
- end
226
- end
227
-
228
- add_endpoint_method(:press_keycode) do
229
- def press_keycode(key, metastate = nil)
230
- args = { keycode: key }
231
- args[:metastate] = metastate if metastate
232
- execute :press_keycode, {}, args
233
- end
234
- end
235
-
236
- add_endpoint_method(:long_press_keycode) do
237
- def long_press_keycode(key, metastate = nil)
238
- args = { keycode: key }
239
- args[:metastate] = metastate if metastate
240
- execute :long_press_keycode, {}, args
241
- end
242
- end
243
-
244
- add_endpoint_method(:set_immediate_value) do
245
- def set_immediate_value(element, *value)
246
- keys = ::Selenium::WebDriver::Keys.encode(value)
247
- execute :set_immediate_value, { id: element.ref }, value: Array(keys)
248
- end
249
- end
250
-
251
- add_endpoint_method(:push_file) do
252
- def push_file(path, filedata)
253
- encoded_data = Base64.encode64 filedata
254
- execute :push_file, {}, path: path, data: encoded_data
255
- end
256
- end
257
-
258
- add_endpoint_method(:pull_file) do
259
- def pull_file(path)
260
- data = execute :pull_file, {}, path: path
261
- Base64.decode64 data
262
- end
263
- end
264
-
265
- # TODO: TEST ME
266
- add_endpoint_method(:pull_folder) do
267
- def pull_folder(path)
268
- data = execute :pull_folder, {}, path: path
269
- Base64.decode64 data
270
- end
271
- end
272
-
273
- add_endpoint_method(:get_settings) do
274
- def get_settings
275
- execute :get_settings, {}
276
- end
277
- end
278
-
279
- add_endpoint_method(:update_settings) do
280
- def update_settings(settings)
281
- execute :update_settings, {}, settings: settings
282
- end
283
- end
284
-
285
- add_touch_actions
286
- add_ime_actions
287
- end
288
-
289
- # def extended
290
-
291
- # @private
292
- def add_endpoint_method(method)
293
- block_given? ? create_bridge_command(method, &Proc.new) : create_bridge_command(method)
294
-
295
- delegate_driver_method method
296
- delegate_from_appium_driver method
297
- end
298
-
299
- # @private CoreBridge
300
- def extend_webdriver_with_forwardable
301
- return if ::Appium::Core::Base::Driver.is_a? Forwardable
302
- ::Appium::Core::Base::Driver.class_eval do
303
- extend Forwardable
304
- end
305
- end
306
-
307
- # @private
308
- def delegate_driver_method(method)
309
- return if ::Appium::Core::Base::Driver.method_defined? method
310
- ::Appium::Core::Base::Driver.class_eval { def_delegator :@bridge, method }
311
- end
312
-
313
- # @private
314
- def delegate_from_appium_driver(method, delegation_target = :driver)
315
- def_delegator delegation_target, method
316
- end
317
-
318
- # @private
319
- def create_bridge_command(method)
320
- ::Appium::Core::Base::CoreBridgeOSS.class_eval do
321
- block_given? ? class_eval(&Proc.new) : define_method(method) { execute method }
322
- end
323
- ::Appium::Core::Base::CoreBridgeW3C.class_eval do
324
- block_given? ? class_eval(&Proc.new) : define_method(method) { execute method }
325
- end
326
- end
327
-
328
- def add_touch_actions
329
- add_endpoint_method(:touch_actions) do
330
- def touch_actions(actions)
331
- actions = { actions: [actions].flatten }
332
- execute :touch_actions, {}, actions
333
- end
334
- end
335
-
336
- add_endpoint_method(:multi_touch) do
337
- def multi_touch(actions)
338
- execute :multi_touch, {}, actions: actions
339
- end
340
- end
341
- end
342
-
343
- def add_ime_actions
344
- # Commands for IME are defined in the following commands.rb, but the driver have no bridge.
345
- # So, appium_lib define just bridge here.
346
- # https://github.com/SeleniumHQ/selenium/blob/selenium-3.0.1/rb/lib/selenium/webdriver/remote/commands.rb#L184-L192
347
-
348
- # @!method ime_activate
349
- # Make an engine that is available active.
350
- #
351
- # Android only.
352
- # @param [String] The IME owning the activity [required]
353
- #
354
- # ```ruby
355
- # ime_activate engine: 'com.android.inputmethod.latin/.LatinIME'
356
- # ```
357
- add_endpoint_method(:ime_activate) do
358
- def ime_activate(ime_name)
359
- # from Selenium::WebDriver::Remote::OSS
360
- execute :ime_activate_engine, {}, engine: ime_name
361
- end
362
- end
363
-
364
- # @!method ime_available_engines
365
- # List all available input engines on the machine.
366
- # Android only.
367
- #
368
- # ```ruby
369
- # ime_available_engines #=> Get the list of IME installed in the target device
370
- # ```
371
- add_endpoint_method(:ime_available_engines) do
372
- def ime_available_engines
373
- execute :ime_get_available_engines
374
- end
375
- end
376
-
377
- # @!method ime_active_engine
378
- # Get the name of the active IME engine.
379
- # Android only.
380
- #
381
- # ```ruby
382
- # ime_active_engine #=> Get the current active IME such as 'com.android.inputmethod.latin/.LatinIME'
383
- # ```
384
- add_endpoint_method(:ime_active_engine) do
385
- # from Selenium::WebDriver::Remote::OSS
386
- def ime_active_engine
387
- execute :ime_get_active_engine
388
- end
389
- end
390
-
391
- # @!method ime_activated
392
- # Indicates whether IME input is active at the moment (not if it is available).
393
- # Android only.
394
- #
395
- # ```ruby
396
- # ime_activated #=> True if IME is activated
397
- # ```
398
- add_endpoint_method(:ime_activated) do
399
- # from Selenium::WebDriver::Remote::OSS
400
- def ime_activated
401
- execute :ime_is_activated
402
- end
403
- end
404
-
405
- # @!method ime_deactivate
406
- # De-activates the currently-active IME engine.
407
- #
408
- # Android only.
409
- #
410
- # ```ruby
411
- # ime_deactivate #=> Deactivate current IME engine
412
- # ```
413
- add_endpoint_method(:ime_deactivate) do
414
- # from Selenium::WebDriver::Remote::OSS
415
- def ime_deactivate
416
- execute :ime_deactivate, {}
417
- end
418
- end
419
- end
420
- end # class << self
421
-
422
- # @!method set_context
423
- # Change the context to the given context.
424
- # @param [String] The context to change to
425
- #
426
- # ```ruby
427
- # set_context "NATIVE_APP"
428
- # ```
429
-
430
- # @!method current_context
431
- # @return [String] The context currently being used.
432
-
433
- # @!method available_contexts
434
- # @return [Array<String>] All usable contexts, as an array of strings.
435
-
436
- # Perform a block within the given context, then switch back to the starting context.
437
- # @param context (String) The context to switch to for the duration of the block.
438
- #
439
- # ```ruby
440
- # result = within_context('NATIVE_APP') do
441
- # find_element :tag, "button"
442
- # end # The result of `find_element :tag, "button"`
443
- # ```
444
- def within_context(context)
445
- existing_context = current_context
446
- set_context context
447
- if block_given?
448
- result = yield
449
- set_context existing_context
450
- result
451
- else
452
- set_context existing_context
453
- end
454
- end
455
-
456
- # Change to the default context. This is equivalent to `set_context nil`.
457
- def switch_to_default_context
458
- set_context nil
459
- end
460
- end # module Device
461
- end # Core
462
- end # module Appium