appium_lib_core 3.0.0 → 3.0.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 964bd12f85a4c6d913e71f664c9a672114b978f0b439fcee38470891128d1740
4
- data.tar.gz: bc62600215d921364530c368bf3d02d6b685444130bd9c36209ac42f7d2b92d9
3
+ metadata.gz: 92b2cc51e93cc1cafd0eab292b939f2c8a4857d37c4b058d1cd3d88efc3905c5
4
+ data.tar.gz: 35b8bd65ee71b69e266a12f79f0f8a47817e3ac3049657808a5c19b0b78651dc
5
5
  SHA512:
6
- metadata.gz: 57e0aae70e9a102f94012dba112df99f6ed2a1ad615f18d91e55000eca18c3c29648403765b712c3019df880cb43b9453c1ec0de664f6c6674b656411b8ad3af
7
- data.tar.gz: b2327a0fb7650b001f36f87bee57d77bc00d34a906dba295c20d2bc2a10254c9c8ecceb30aaa673e2bf89fe7d7b56732b6121db85c6bceb0534fd1b0a0118f03
6
+ metadata.gz: e5cdd8c9da12e8a996b1b314ab56a04e31b8411323bb4de172e721f7e48f4bd9807cb1b25466361448c2189d1f0eec1b37ea81303e29e580cdc59b2d5f2ed2d0
7
+ data.tar.gz: 419ce910892d446ebeb341c34853bee00e48a363f631d97362c6435a31d187a9223defcc25ac273cdd212ee4d082710afdc0e321a1a0c9f45ccf620dc15a9b32
data/CHANGELOG.md CHANGED
@@ -10,6 +10,15 @@ Read `release_notes.md` for commit level details.
10
10
 
11
11
  ### Deprecations
12
12
 
13
+ ## [3.0.1] - 2019-02-25
14
+
15
+ ### Enhancements
16
+ - Add `:data_matcher` find_element/s attribute [appium-espresso-driver#386](https://github.com/appium/appium-espresso-driver/pull/386)
17
+
18
+ ### Bug fixes
19
+
20
+ ### Deprecations
21
+
13
22
  ## [3.0.0] - 2019-02-06
14
23
 
15
24
  This release has a breaking change about an implicit wait.
@@ -18,9 +27,9 @@ The behaviour follows the default spec in WebDriver.
18
27
 
19
28
  ### Enhancements
20
29
  - **Breaking changes**
21
- - Set implicit wait zero by default
30
+ - Set implicit wait zero by default [#186](https://github.com/appium/ruby_lib_core/pull/186)
22
31
  - Can configure `wait: 20` as `appium_lib` capability to keep the behaviour
23
- - [Experimental] Add `direct_connect` capability for the Ruby client in order to handle `directConnect` capability in a create session response by Appium server
32
+ - [Experimental] Add `direct_connect` capability for the Ruby client in order to handle `directConnect` capability in a create session response by Appium server [#189](https://github.com/appium/ruby_lib_core/pull/189)
24
33
  - Update http client following `directConnectProtocol`, `directConnectHost`, `directConnectPort` and `directConnectPath`
25
34
  if `direct_connect` capability for ruby_lib_core is `true`
26
35
  - This will resolve a performance issue if a user has a proxy server to handle requests from client to Appium server.
@@ -33,7 +42,7 @@ The behaviour follows the default spec in WebDriver.
33
42
  ```
34
43
 
35
44
  ### Bug fixes
36
- - Fix potential override of `AppManagement#background_app`
45
+ - Fix potential override of `AppManagement#background_app` [#188](https://github.com/appium/ruby_lib_core/pull/188)
37
46
 
38
47
  ### Deprecations
39
48
 
data/README.md CHANGED
@@ -40,7 +40,7 @@ $ appium --relaxed-security # To run all tests in local
40
40
  ```bash
41
41
  $ bundle install
42
42
  $ rake test:func:android # Andorid, uiautomator2
43
- $ AUTOMATION_NAME=espresso rake test:func:android # Andorid, uiautomator2
43
+ $ AUTOMATION_NAME_DROID=espresso rake test:func:android # Andorid, uiautomator2
44
44
  $ rake test:func:ios # iOS
45
45
  ```
46
46
 
@@ -97,6 +97,11 @@ $ PARALLEL=1 bundle exec parallel_test test/functional/ios -n 2
97
97
  # shell 2
98
98
  $ ruby test.rb
99
99
  ```
100
+
101
+ ### Capabilities
102
+
103
+ Read [Appium/Core/Driver](https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Driver) to catch up with available capabilities.
104
+ Capabilities affect only ruby_lib is [Appium/Core/Options](https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Options).
100
105
 
101
106
  # Development
102
107
  - Demo app
@@ -60,9 +60,9 @@ module Appium
60
60
  # @!method get_network_connection
61
61
  # Get the device network connection current status
62
62
  # See set_network_connection method for return value
63
- # Same as `#network_connection_type` in selenium-webdriver.
63
+ # Same as #network_connection_type in selenium-webdriver.
64
64
  #
65
- # Returns a key of {:airplane_mode: 1, wifi: 2, data: 4, all: 6, none: 0} in `#network_connection_type`
65
+ # Returns a key of <code>{:airplane_mode: 1, wifi: 2, data: 4, all: 6, none: 0}</code> in #network_connection_type
66
66
  # Returns a number of the mode in `#get_network_connection`
67
67
  #
68
68
  # @example
@@ -150,7 +150,7 @@ module Appium
150
150
  # Same as `#network_connection_type` in selenium-webdriver.
151
151
  #
152
152
  # @param [String] mode Bit mask that represent the network mode
153
- # Or the key matched with `{:airplane_mode: 1, wifi: 2, data: 4, all: 6, none: 0}`
153
+ # Or the key matched with <code>{:airplane_mode: 1, wifi: 2, data: 4, all: 6, none: 0}</code>
154
154
  #
155
155
  # Value (Alias) | Data | Wifi | Airplane Mode
156
156
  # -------------------------------------------------
@@ -189,8 +189,8 @@ module Appium
189
189
  # @driver.get_performance_data package_name: package_name, data_type: data_type, data_read_timeout: 2
190
190
  #
191
191
 
192
- # @!method start_recording_screen(remote_path: nil, user: nil, pass: nil, method: 'PUT', force_restart: nil, video_size: nil, time_limit: '180', bit_rate: '4000000')
193
- # @param [String] remote_path: The path to the remote location, where the resulting video should be uploaded.
192
+ # @!method start_recording_screen(remote_path: nil, user: nil, pass: nil, method: 'PUT', force_restart: nil, video_size: nil, time_limit: '180', bit_rate: '4000000', bug_report: nil)
193
+ # @param [String] remote_path The path to the remote location, where the resulting video should be uploaded.
194
194
  # The following protocols are supported: http/https, ftp.
195
195
  # Null or empty string value (the default setting) means the content of resulting
196
196
  # file should be encoded as Base64 and passed as the endpoint response value.
@@ -198,29 +198,29 @@ module Appium
198
198
  # fit into the available process memory.
199
199
  # This option only has an effect if there is screen recording process in progress
200
200
  # and `forceRestart` parameter is not set to `true`.
201
- # @param [String] user: The name of the user for the remote authentication.
202
- # @param [String] pass: The password for the remote authentication.
203
- # @param [String] method: The http multipart upload method name. The 'PUT' one is used by default.
204
- # @param [Boolean] force_restart: Whether to try to catch and upload/return the currently running screen recording
201
+ # @param [String] user The name of the user for the remote authentication.
202
+ # @param [String] pass The password for the remote authentication.
203
+ # @param [String] method The http multipart upload method name. The 'PUT' one is used by default.
204
+ # @param [Boolean] force_restart Whether to try to catch and upload/return the currently running screen recording
205
205
  # (`false`, the default setting on server) or ignore the result of it
206
206
  # and start a new recording immediately (`true`).
207
207
  #
208
- # @param [String] video_size: The format is widthxheight.
209
- # The default value is the device's native display resolution (if supported),
210
- # 1280x720 if not. For best results,
211
- # use a size supported by your device's Advanced Video Coding (AVC) encoder.
212
- # For example, "1280x720"
213
- # @param [String] time_limit: Recording time. 180 seconds is by default.
214
- # Since Appium 1.8.2 the time limit can be up to 1800 seconds (30 minutes).
215
- # Appium will automatically try to merge the 3-minutes chunks recorded
216
- # by the screenrecord utility, however, this requires FFMPEG utility
217
- # to be installed and available in PATH on the server machine. If the utility is not
218
- # present then the most recent screen recording chunk is going to be returned as the result.
219
- # @param [String] bit_rate: The video bit rate for the video, in megabits per second.
220
- # 4 Mbp/s(4000000) is by default for Android API level below 27. 20 Mb/s(20000000) for API level 27 and above.
221
- # @param [Boolean] bug_report: Set it to `true` in order to display additional information on the video overlay,
222
- # such as a timestamp, that is helpful in videos captured to illustrate bugs.
223
- # This option is only supported since API level 27 (Android P).
208
+ # @param [String] video_size The format is widthxheight.
209
+ # The default value is the device's native display resolution (if supported),
210
+ # 1280x720 if not. For best results,
211
+ # use a size supported by your device's Advanced Video Coding (AVC) encoder.
212
+ # For example, "1280x720"
213
+ # @param [String] time_limit Recording time. 180 seconds is by default.
214
+ # Since Appium 1.8.2 the time limit can be up to 1800 seconds (30 minutes).
215
+ # Appium will automatically try to merge the 3-minutes chunks recorded
216
+ # by the screenrecord utility, however, this requires FFMPEG utility
217
+ # to be installed and available in PATH on the server machine. If the utility is not
218
+ # present then the most recent screen recording chunk is going to be returned as the result.
219
+ # @param [String] bit_rate The video bit rate for the video, in megabits per second.
220
+ # 4 Mbp/s(4000000) is by default for Android API level below 27. 20 Mb/s(20000000) for API level 27 and above.
221
+ # @param [Boolean] bug_report Set it to `true` in order to display additional information on the video overlay,
222
+ # such as a timestamp, that is helpful in videos captured to illustrate bugs.
223
+ # This option is only supported since API level 27 (Android P).
224
224
  #
225
225
  # @example
226
226
  #
@@ -49,7 +49,7 @@ module Appium
49
49
  # If `desired_capabilities` has `forceMjsonwp: true` in the capability, this bridge works with mjsonwp protocol.
50
50
  # If `forceMjsonwp: false` or no the capability, it depends on server side whether this bridge works as w3c or mjsonwp.
51
51
  #
52
- # @param [::Selenium::WebDriver::Remote::W3C::Capabilities, Hash] capabilities A capability
52
+ # @param [::Selenium::WebDriver::Remote::W3C::Capabilities, Hash] desired_capabilities A capability
53
53
  # @return [::Selenium::WebDriver::Remote::Capabilities, ::Selenium::WebDriver::Remote::W3C::Capabilities]
54
54
  #
55
55
  # @example
@@ -371,9 +371,11 @@ module Appium
371
371
  # On Android, the application under test should be built with debuggable flag enabled in order to get access to
372
372
  # its container on the internal file system.
373
373
  #
374
- # @see https://github.com/libimobiledevice/ifuse iFuse GitHub page6
375
- # @see https://github.com/osxfuse/osxfuse/wiki/FAQ osxFuse FAQ
376
- # @see https://developer.android.com/studio/debug/ 'Debug Your App' developer article
374
+ # {https://github.com/libimobiledevice/ifuse iFuse GitHub page6}
375
+ #
376
+ # {https://github.com/osxfuse/osxfuse/wiki/FAQ osxFuse FAQ}
377
+ #
378
+ # {https://developer.android.com/studio/debug 'Debug Your App' developer article}
377
379
  #
378
380
  # @param [String] path Either an absolute path OR, for iOS devices, a path relative to the app, as described.
379
381
  # If the path starts with application id prefix, then the file will be pushed to the root of
@@ -397,9 +399,11 @@ module Appium
397
399
  # On Android the application under test should be built with debuggable flag enabled in order to get access
398
400
  # to its container on the internal file system.
399
401
  #
400
- # @see https://github.com/libimobiledevice/ifuse iFuse GitHub page6
401
- # @see https://github.com/osxfuse/osxfuse/wiki/FAQ osxFuse FAQ
402
- # @see https://developer.android.com/studio/debug/ 'Debug Your App' developer article
402
+ # {https://github.com/libimobiledevice/ifuse iFuse GitHub page6}
403
+ #
404
+ # {https://github.com/osxfuse/osxfuse/wiki/FAQ osxFuse FAQ}
405
+ #
406
+ # {https://developer.android.com/studio/debug 'Debug Your App' developer article}
403
407
  #
404
408
  # @param [String] path Either an absolute path OR, for iOS devices, a path relative to the app, as described.
405
409
  # If the path starts with application id prefix, then the file will be pulled from the root
@@ -423,9 +427,9 @@ module Appium
423
427
  # On Android the application under test should be built with debuggable flag enabled in order to get access to
424
428
  # its container on the internal file system.
425
429
  #
426
- # @see https://github.com/libimobiledevice/ifuse iFuse GitHub page6
427
- # @see https://github.com/osxfuse/osxfuse/wiki/FAQ osxFuse FAQ
428
- # @see https://developer.android.com/studio/debug/ 'Debug Your App' developer article
430
+ # {https://github.com/libimobiledevice/ifuse iFuse GitHub page6}
431
+ # {https://github.com/osxfuse/osxfuse/wiki/FAQ osxFuse FAQ}
432
+ # {https://developer.android.com/studio/debug/ 'Debug Your App' developer article}
429
433
  #
430
434
  # @param [String] path Absolute path to the folder.
431
435
  # If the path starts with <em>@applicationId/</em> prefix, then the folder will be pulled
@@ -460,13 +464,13 @@ module Appium
460
464
  # http://developer.android.com/reference/android/view/KeyEvent.html
461
465
  # @param [Integer] key The key to press. The values which have `KEYCODE_` prefix in http://developer.android.com/reference/android/view/KeyEvent.html
462
466
  # e.g.: KEYCODE_HOME is `3` or `0x00000003`
463
- # @param [[Integer]] metastate: The state the metakeys should be in when pressing the key. Default is empty Array.
464
- # Metastate have `META_` prefix in https://developer.android.com/reference/android/view/KeyEvent.html
465
- # e.g.: META_SHIFT_ON is `1` or `0x00000001`
466
- # @param [[Integer]] flags: Native Android flag value. Several flags can be combined into a single key event.
467
- # Default is empty Array. Can set multiple flags as Array.
468
- # Flags have `FLAG_` prefix in http://developer.android.com/reference/android/view/KeyEvent.html
469
- # e.g.: FLAG_CANCELED is `32` or `0x00000020`
467
+ # @param [[Integer]] metastate The state the metakeys should be in when pressing the key. Default is empty Array.
468
+ # Metastate have `META_` prefix in https://developer.android.com/reference/android/view/KeyEvent.html
469
+ # e.g.: META_SHIFT_ON is `1` or `0x00000001`
470
+ # @param [[Integer]] flags Native Android flag value. Several flags can be combined into a single key event.
471
+ # Default is empty Array. Can set multiple flags as Array.
472
+ # Flags have `FLAG_` prefix in http://developer.android.com/reference/android/view/KeyEvent.html
473
+ # e.g.: FLAG_CANCELED is `32` or `0x00000020`
470
474
  #
471
475
  # @example
472
476
  #
@@ -482,13 +486,13 @@ module Appium
482
486
  # http://developer.android.com/reference/android/view/KeyEvent.html
483
487
  # @param [Integer] key The key to long press. The values which have `KEYCODE_` prefix in http://developer.android.com/reference/android/view/KeyEvent.html
484
488
  # e.g.: KEYCODE_HOME is `3` or `0x00000003`
485
- # @param [[Integer]] metastate: The state the metakeys should be in when pressing the key. Default is empty Array.
486
- # Metastate have `META_` prefix in https://developer.android.com/reference/android/view/KeyEvent.html
487
- # e.g.: META_SHIFT_ON is `1` or `0x00000001`
488
- # @param [[Integer]] flags: Native Android flag value. Several flags can be combined into a single key event.
489
- # Default is empty Array. Can set multiple flags as Array.
490
- # Flags have `FLAG_` prefix in http://developer.android.com/reference/android/view/KeyEvent.html
491
- # e.g.: FLAG_CANCELED is `32` or `0x00000020`
489
+ # @param [[Integer]] metastate The state the metakeys should be in when pressing the key. Default is empty Array.
490
+ # Metastate have `META_` prefix in https://developer.android.com/reference/android/view/KeyEvent.html
491
+ # e.g.: META_SHIFT_ON is `1` or `0x00000001`
492
+ # @param [[Integer]] flags Native Android flag value. Several flags can be combined into a single key event.
493
+ # Default is empty Array. Can set multiple flags as Array.
494
+ # Flags have `FLAG_` prefix in http://developer.android.com/reference/android/view/KeyEvent.html
495
+ # e.g.: FLAG_CANCELED is `32` or `0x00000020`
492
496
  #
493
497
  # @example
494
498
  #
@@ -560,15 +564,15 @@ module Appium
560
564
  #
561
565
  # @param [String] path The absolute local path or remote http URL to an .ipa or .apk file,
562
566
  # or a .zip containing one of these.
563
- # @param [Boolean] replace: Only for Android. Whether to reinstall/upgrade the package if it is already present
564
- # on the device under test. `true` by default
565
- # @param [Integer] timeout: Only for Android. How much time to wait for the installation to complete.
566
- # 60000ms by default.
567
- # @param [Boolean] allow_test_packages: Only for Android. Whether to allow installation of packages marked as test
568
- # in the manifest. `false` by default
569
- # @param [Boolean] use_sdcard: Only for Android. Whether to use the SD card to install the app. `false` by default
570
- # @param [Boolean] grant_permissions: Only for Android. whether to automatically grant application permissions
571
- # on Android 6+ after the installation completes. `false` by default
567
+ # @param [Boolean] replace Only for Android. Whether to reinstall/upgrade the package if it is already present
568
+ # on the device under test. `true` by default
569
+ # @param [Integer] timeout Only for Android. How much time to wait for the installation to complete.
570
+ # 60000ms by default.
571
+ # @param [Boolean] allow_test_packages Only for Android. Whether to allow installation of packages marked as test
572
+ # in the manifest. `false` by default
573
+ # @param [Boolean] use_sdcard Only for Android. Whether to use the SD card to install the app. `false` by default
574
+ # @param [Boolean] grant_permissions Only for Android. whether to automatically grant application permissions
575
+ # on Android 6+ after the installation completes. `false` by default
572
576
  #
573
577
  # @example
574
578
  #
@@ -591,9 +595,9 @@ module Appium
591
595
  end
592
596
 
593
597
  # @param [Strong] app_id BundleId for iOS or package name for Android
594
- # @param [Boolean] keep_data: Only for Android. Whether to keep application data and caches after it is uninstalled.
598
+ # @param [Boolean] keep_data Only for Android. Whether to keep application data and caches after it is uninstalled.
595
599
  # `false` by default
596
- # @param [Integer] timeout: Only for Android. How much time to wait for the uninstall to complete. 20000ms by default.
600
+ # @param [Integer] timeout Only for Android. How much time to wait for the uninstall to complete. 20000ms by default.
597
601
  #
598
602
  # @example
599
603
  #
@@ -629,8 +633,8 @@ module Appium
629
633
  # Terminate the specified app.
630
634
  #
631
635
  # @param [Strong] app_id BundleId for iOS or package name for Android
632
- # @param [Integer] timeout: Only for Android. How much time to wait for the application termination to complete.
633
- # 500ms by default.
636
+ # @param [Integer] timeout Only for Android. How much time to wait for the application termination to complete.
637
+ # 500ms by default.
634
638
  # @return [Boolean]
635
639
  #
636
640
  # @example
@@ -666,15 +670,15 @@ module Appium
666
670
  end
667
671
  alias query_app_state app_state
668
672
 
669
- # @param [String] remote_path: The path to the remote location, where the resulting video should be uploaded.
673
+ # @param [String] remote_path The path to the remote location, where the resulting video should be uploaded.
670
674
  # The following protocols are supported: http/https, ftp.
671
675
  # Null or empty string value (the default setting) means the content of resulting
672
676
  # file should be encoded as Base64 and passed as the endpoint response value.
673
677
  # An exception will be thrown if the generated media file is too big to
674
678
  # fit into the available process memory.
675
- # @param [String] user: The name of the user for the remote authentication.
676
- # @param [String] pass: The password for the remote authentication.
677
- # @param [String] method: The http multipart upload method name. The 'PUT' one is used by default.
679
+ # @param [String] user The name of the user for the remote authentication.
680
+ # @param [String] pass The password for the remote authentication.
681
+ # @param [String] method The http multipart upload method name. The 'PUT' one is used by default.
678
682
  #
679
683
  # @example
680
684
  #
@@ -951,9 +955,10 @@ module Appium
951
955
 
952
956
  # @since Appium 1.8.2
953
957
  # Return an element if current view has a partial image. The logic depends on template matching by OpenCV.
954
- # @see https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/image-comparison.md
958
+ # {https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/image-comparison.md image-comparison}
959
+ #
955
960
  # You can handle settings for the comparision following below.
956
- # @see https://github.com/appium/appium-base-driver/blob/master/lib/basedriver/device-settings.js#L6
961
+ # {https://github.com/appium/appium-base-driver/blob/master/lib/basedriver/device-settings.js#L6 device-settings}
957
962
  #
958
963
  # @param [String] img_path A path to a partial image you'd like to find
959
964
  #
@@ -972,9 +977,10 @@ module Appium
972
977
 
973
978
  # @since Appium 1.8.2
974
979
  # Return elements if current view has a partial image. The logic depends on template matching by OpenCV.
975
- # @see https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/image-comparison.md
980
+ # {https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/image-comparison.md image-comparison}
981
+ #
976
982
  # You can handle settings for the comparision following below.
977
- # @see https://github.com/appium/appium-base-driver/blob/master/lib/basedriver/device-settings.js#L6
983
+ # {https://github.com/appium/appium-base-driver/blob/master/lib/basedriver/device-settings.js#L6 device-settings}
978
984
  #
979
985
  # @param [String] img_path A path to a partial image you'd like to find
980
986
  #
@@ -12,14 +12,13 @@ module Appium
12
12
  "appium/ruby_lib_core/#{VERSION} (#{::Selenium::WebDriver::Remote::Http::Common::DEFAULT_HEADERS['User-Agent']})"
13
13
  }.freeze
14
14
 
15
- # Update `server_url` to.
16
- # Set `@http` as nil to re-create http client for the server_url
17
- # @private
15
+ # Update <code>server_url</code> provided when ruby_lib _core created a default http client.
16
+ # Set <code>@http</code> as nil to re-create http client for the <code>server_url</code>
18
17
  #
19
- # @param [string] scheme: A scheme to update server_url to
20
- # @param [string] host: A host to update server_url to
21
- # @param [string|integer] port: A port number to update server_url to
22
- # @param [string] path: A path to update server_url to
18
+ # @param [string] scheme A scheme to update server_url to
19
+ # @param [string] host A host to update server_url to
20
+ # @param [string|integer] port A port number to update server_url to
21
+ # @param [string] path A path to update server_url to
23
22
  #
24
23
  # @return [URI] An instance of URI updated to. Returns default `server_url` if some of arguments are `nil`
25
24
  def update_sending_request_to(scheme:, host:, port:, path:)
@@ -12,29 +12,49 @@ module Appium
12
12
  # Android
13
13
  uiautomator: '-android uiautomator', # Unavailable in Espresso
14
14
  viewtag: '-android viewtag', # Available in Espresso
15
+ data_matcher: '-android datamatcher', # Available in Espresso
15
16
  # iOS
16
17
  uiautomation: '-ios uiautomation',
17
18
  predicate: '-ios predicate string',
18
19
  class_chain: '-ios class chain',
19
- # Windows
20
+ # Windows with windows prefix
20
21
  windows_uiautomation: '-windows uiautomation',
21
- # Tizen
22
+ # Tizen with Tizen prefix
22
23
  tizen_uiautomation: '-tizen uiautomation'
23
24
  )
24
25
  # rubocop:enable Layout/AlignHash
25
26
 
27
+ # rubocop:disable Metrics/LineLength
26
28
  #
27
29
  # Find the first element matching the given arguments
28
30
  #
29
- # Android can find with uiautomator like a [UISelector](http://developer.android.com/tools/help/uiautomator/UiSelector.html).
30
- # iOS can find with a [UIAutomation command](https://developer.apple.com/library/ios/documentation/ToolsLanguages/Reference/UIAWindowClassReference/UIAWindow/UIAWindow.html#//apple_ref/doc/uid/TP40009930).
31
- # iOS, only for XCUITest(WebDriverAgent), can find with a [class chain]( https://github.com/facebook/WebDriverAgent/wiki/Queries)
31
+ # - Android can find with uiautomator like a {http://developer.android.com/tools/help/uiautomator/UiSelector.html UISelector}.
32
+ # - iOS can find with a {https://developer.apple.com/library/ios/documentation/ToolsLanguages/Reference/UIAWindowClassReference/UIAWindow/UIAWindow.html#//apple_ref/doc/uid/TP40009930 UIAutomation command}.
33
+ # - iOS, only for XCUITest(WebDriverAgent), can find with a {https://github.com/facebook/WebDriverAgent/wiki/Queries class chain}
32
34
  #
33
- # Find with image.
35
+ # == Find with image
34
36
  # Return an element if current view has a partial image. The logic depends on template matching by OpenCV.
35
- # @see https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/image-comparison.md
36
- # You can handle settings for the comparision following below.
37
- # @see https://github.com/appium/appium-base-driver/blob/master/lib/basedriver/device-settings.js#L6
37
+ # {https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/image-comparison.md image-comparison}
38
+ #
39
+ # You can handle settings for the comparision following {https://github.com/appium/appium-base-driver/blob/master/lib/basedriver/device-settings.js#L6 here}
40
+ #
41
+ # == Espresso datamatcher
42
+ # Espresso has an {https://medium.com/androiddevelopers/adapterviews-and-espresso-f4172aa853cf _onData_ matcher} for more reference
43
+ # that allows you to target adapters instead of Views. This method find methods based on reflections
44
+ #
45
+ # This is a selector strategy that allows users to pass a selector of the form:
46
+ #
47
+ # <code>{ name: '<name>', args: ['arg1', 'arg2', '...'], class: '<optional class>' }</code>
48
+ #
49
+ # - _name_: The name of a method to invoke. The method must return
50
+ # a Hamcrest {http://hamcrest.org/JavaHamcrest/javadoc/1.3/org/hamcrest/Matcher.html Matcher}
51
+ # - _args_: The args provided to the method
52
+ # - _class_: The class name that the method is part of (defaults to <code>org.hamcrest.Matchers</code>).
53
+ # Can be fully qualified, or simple, and simple defaults to <code>androidx.test.espresso.matcher</code> package
54
+ # (e.g.: <code>class=CursorMatchers</code> fully qualified is <code>class=androidx.test.espresso.matcher.CursorMatchers</code>
55
+ #
56
+ # See example how to send datamatcher in Ruby client
57
+ #
38
58
  #
39
59
  # @overload find_element(how, what)
40
60
  # @param [Symbol, String] how The method to find the element by
@@ -49,48 +69,51 @@ module Appium
49
69
  # @example Find element with each keys
50
70
  #
51
71
  # # with accessibility id. All platforms.
52
- # find_elements :accessibility_id, 'Animation'
53
- # find_elements :accessibility_id, 'Animation'
72
+ # @driver.find_elements :accessibility_id, 'Animation'
73
+ # @driver.find_elements :accessibility_id, 'Animation'
54
74
  #
55
75
  # # with base64 encoded template image. All platforms.
56
- # find_elements :image, Base64.strict_encode64(File.read(file_path))
76
+ # @driver.find_elements :image, Base64.strict_encode64(File.read(file_path))
57
77
  #
58
78
  # # For Android
59
79
  # ## With uiautomator
60
- # find_elements :uiautomator, 'new UiSelector().clickable(true)'
80
+ # @driver.find_elements :uiautomator, 'new UiSelector().clickable(true)'
61
81
  # ## With viewtag, but only for Espresso
62
82
  # ## `setTag`/`getTag` in https://developer.android.com/reference/android/view/View
63
- # find_elements :viewtag, 'new UiSelector().clickable(true)'
83
+ # @driver.find_elements :viewtag, 'new UiSelector().clickable(true)'
84
+ # # With data_matcher. The argument should be JSON format.
85
+ # @driver.find_elements :data_matcher, { name: 'hasEntry', args: %w(title Animation) }.to_json
64
86
  #
65
87
  # # For iOS
66
88
  # ## With :predicate
67
- # find_elements :predicate, "isWDVisible == 1"
68
- # find_elements :predicate, 'wdName == "Buttons"'
69
- # find_elements :predicate, 'wdValue == "SearchBar" AND isWDDivisible == 1'
89
+ # @driver.find_elements :predicate, "isWDVisible == 1"
90
+ # @driver.find_elements :predicate, 'wdName == "Buttons"'
91
+ # @driver.find_elements :predicate, 'wdValue == "SearchBar" AND isWDDivisible == 1'
70
92
  #
71
93
  # ## With Class Chain
72
94
  # ### select the third child button of the first child window element
73
- # find_elements :class_chain, 'XCUIElementTypeWindow/XCUIElementTypeButton[3]'
95
+ # @driver.find_elements :class_chain, 'XCUIElementTypeWindow/XCUIElementTypeButton[3]'
74
96
  # ### select all the children windows
75
- # find_elements :class_chain, 'XCUIElementTypeWindow'
97
+ # @driver.find_elements :class_chain, 'XCUIElementTypeWindow'
76
98
  # ### select the second last child of the second child window
77
- # find_elements :class_chain, 'XCUIElementTypeWindow[2]/XCUIElementTypeAny[-2]'
99
+ # @driver.find_elements :class_chain, 'XCUIElementTypeWindow[2]/XCUIElementTypeAny[-2]'
78
100
  # ### matching predicate. <code>`</code> is the mark.
79
- # find_elements :class_chain, 'XCUIElementTypeWindow[`visible = 1][`name = "bla"`]'
101
+ # @driver.find_elements :class_chain, 'XCUIElementTypeWindow[`visible = 1][`name = "bla"`]'
80
102
  # ### containing predicate. `$` is the mark.
81
103
  # ### Require appium-xcuitest-driver 2.54.0+. PR: https://github.com/facebook/WebDriverAgent/pull/707/files
82
- # find_elements :class_chain, 'XCUIElementTypeWindow[$name = \"bla$$$bla\"$]'
104
+ # @driver.find_elements :class_chain, 'XCUIElementTypeWindow[$name = \"bla$$$bla\"$]'
83
105
  # e = find_element :class_chain, "**/XCUIElementTypeWindow[$name == 'Buttons'$]"
84
106
  # e.tag_name #=> "XCUIElementTypeWindow"
85
107
  # e = find_element :class_chain, "**/XCUIElementTypeStaticText[$name == 'Buttons'$]"
86
108
  # e.tag_name #=> "XCUIElementTypeStaticText"
87
109
  #
88
110
  # # For Windows
89
- # find_elements :windows_uiautomation, '....'
111
+ # @driver.find_elements :windows_uiautomation, '....'
90
112
  #
91
113
  # # For Tizen
92
- # find_elements :tizen_uiautomation, '....'
114
+ # @driver.find_elements :tizen_uiautomation, '....'
93
115
  #
116
+ # rubocop:enable Metrics/LineLength
94
117
  def find_element(*args)
95
118
  how, what = extract_args(args)
96
119
  by = _set_by_from_finders(how)
@@ -22,9 +22,8 @@ module Appium
22
22
  visualize: [true, false]
23
23
  }.freeze
24
24
 
25
- # @!method match_images_features(first_image:, second_image:, detector_name: 'ORB',
26
- # match_func: 'BruteForce', good_matches_factor: 100, visualize: false)
27
- # Performs images matching by features with default options. Read https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_feature2d/py_matcher/py_matcher.html
25
+ # Performs images matching by features with default options.
26
+ # Read {https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_feature2d/py_matcher/py_matcher.html py_matcher}
28
27
  # for more details on this topic.
29
28
  #
30
29
  # @param [String] first_image An image data. All image formats, that OpenCV library itself accepts, are supported.
@@ -36,8 +35,8 @@ module Appium
36
35
  # @param [String] match_func The name of the matching function. The default one is 'BruteForce'.
37
36
  # @param [String] good_matches_factor The maximum count of "good" matches (e. g. with minimal distances).
38
37
  # The default one is nil.
39
- # @param [Bool] visualise Makes the endpoint to return an image, which contains the visualized result of
40
- # the corresponding picture matching operation. This option is disabled by default.
38
+ # @param [Bool] visualize Makes the endpoint to return an image, which contains the visualized result of
39
+ # the corresponding picture matching operation. This option is disabled by default.
41
40
  #
42
41
  # @example
43
42
  # @driver.match_images_features first_image: "image data 1", second_image: "image data 2"
@@ -45,63 +44,6 @@ module Appium
45
44
  # visual = @@driver.match_images_features first_image: image1, second_image: image2, visualize: true
46
45
  # File.write 'match_images_visual.png', Base64.decode64(visual['visualization']) # if the image is PNG
47
46
  #
48
-
49
- # @!method find_image_occurrence(full_image:, partial_image:, visualize: false, threshold: nil)
50
- # Performs images matching by template to find possible occurrence of the partial image
51
- # in the full image with default options. Read https://docs.opencv.org/2.4/doc/tutorials/imgproc/histograms/template_matching/template_matching.html
52
- # for more details on this topic.
53
- #
54
- # @param [String] full_image: A full image data.
55
- # @param [String] partial_image: A partial image data. All image formats, that OpenCV library itself accepts,
56
- # are supported.
57
- # @param [Bool] visualise: Makes the endpoint to return an image, which contains the visualized result of
58
- # the corresponding picture matching operation. This option is disabled by default.
59
- # @param [Float] threshold: [0.5] At what normalized threshold to reject
60
- #
61
- # @example
62
- # @driver.find_image_occurrence full_image: "image data 1", partial_image: "image data 2"
63
- #
64
- # visual = @@driver.find_image_occurrence full_image: image1, partial_image: image2, visualize: true
65
- # File.write 'find_result_visual.png', Base64.decode64(visual['visualization']) # if the image is PNG
66
- #
67
-
68
- # @!method get_images_similarity(first_image:, second_image:, detector_name: 'ORB', visualize: false)
69
- # Performs images matching to calculate the similarity score between them
70
- # with default options. The flow there is similar to the one used in `find_image_occurrence`
71
- # but it is mandatory that both images are of equal size.
72
- #
73
- # @param [String] first_image: An image data. All image formats, that OpenCV library itself accepts, are supported.
74
- # @param [String] second_image: An image data. All image formats, that OpenCV library itself accepts, are supported.
75
- # @param [Bool] visualise: Makes the endpoint to return an image, which contains the visualized result of
76
- # the corresponding picture matching operation. This option is disabled by default.
77
- #
78
- # @example
79
- # @driver.get_images_similarity first_image: "image data 1", second_image: "image data 2"
80
- #
81
- # visual = @@driver.get_images_similarity first_image: image1, second_image: image2, visualize: true
82
- # File.write 'images_similarity_visual.png', Base64.decode64(visual['visualization']) # if the image is PNG
83
- #
84
-
85
- # @!method compare_images(mode:, first_image:, second_image:, options:)
86
- #
87
- # Performs images comparison using OpenCV framework features.
88
- # It is expected that both OpenCV framework and opencv4nodejs
89
- # module are installed on the machine where Appium server is running.
90
- #
91
- # @param [Symbol] mode: One of possible comparison modes: `:matchFeatures`, `:getSimilarity`, `:matchTemplate`.
92
- # `:matchFeatures is by default.
93
- # @param [String] first_image: An image data. All image formats, that OpenCV library itself accepts, are supported.
94
- # @param [String] second_image: An image data. All image formats, that OpenCV library itself accepts, are supported.
95
- # @param [Hash] options: The content of this dictionary depends on the actual `mode` value.
96
- # See the documentation on `appium-support` module for more details.
97
- # @returns [Hash] The content of the resulting dictionary depends on the actual `mode` and `options` values.
98
- # See the documentation on `appium-support` module for more details.
99
- #
100
-
101
- ####
102
- ## class << self
103
- ####
104
-
105
47
  def match_images_features(first_image:,
106
48
  second_image:,
107
49
  detector_name: 'ORB',
@@ -127,6 +69,25 @@ module Appium
127
69
  compare_images(mode: :matchFeatures, first_image: first_image, second_image: second_image, options: options)
128
70
  end
129
71
 
72
+ # Performs images matching by template to find possible occurrence of the partial image
73
+ # in the full image with default options. Read
74
+ # {https://docs.opencv.org/2.4/doc/tutorials/imgproc/histograms/template_matching/template_matching.html
75
+ # template_matching}
76
+ # for more details on this topic.
77
+ #
78
+ # @param [String] full_image A full image data.
79
+ # @param [String] partial_image A partial image data. All image formats, that OpenCV library itself accepts,
80
+ # are supported.
81
+ # @param [Bool] visualize Makes the endpoint to return an image, which contains the visualized result of
82
+ # the corresponding picture matching operation. This option is disabled by default.
83
+ # @param [Float] threshold [0.5] At what normalized threshold to reject
84
+ #
85
+ # @example
86
+ # @driver.find_image_occurrence full_image: "image data 1", partial_image: "image data 2"
87
+ #
88
+ # visual = @@driver.find_image_occurrence full_image: image1, partial_image: image2, visualize: true
89
+ # File.write 'find_result_visual.png', Base64.decode64(visual['visualization']) # if the image is PNG
90
+ #
130
91
  def find_image_occurrence(full_image:, partial_image:, visualize: false, threshold: nil)
131
92
  raise "visualize should be #{MATCH_TEMPLATE[:visualize]}" unless MATCH_TEMPLATE[:visualize].member?(visualize)
132
93
 
@@ -137,6 +98,21 @@ module Appium
137
98
  compare_images(mode: :matchTemplate, first_image: full_image, second_image: partial_image, options: options)
138
99
  end
139
100
 
101
+ # Performs images matching to calculate the similarity score between them
102
+ # with default options. The flow there is similar to the one used in `find_image_occurrence`
103
+ # but it is mandatory that both images are of equal size.
104
+ #
105
+ # @param [String] first_image An image data. All image formats, that OpenCV library itself accepts, are supported.
106
+ # @param [String] second_image An image data. All image formats, that OpenCV library itself accepts, are supported.
107
+ # @param [Bool] visualize Makes the endpoint to return an image, which contains the visualized result of
108
+ # the corresponding picture matching operation. This option is disabled by default.
109
+ #
110
+ # @example
111
+ # @driver.get_images_similarity first_image: "image data 1", second_image: "image data 2"
112
+ #
113
+ # visual = @@driver.get_images_similarity first_image: image1, second_image: image2, visualize: true
114
+ # File.write 'images_similarity_visual.png', Base64.decode64(visual['visualization']) # if the image is PNG
115
+ #
140
116
  def get_images_similarity(first_image:, second_image:, visualize: false)
141
117
  raise "visualize should be #{GET_SIMILARITY[:visualize]}" unless GET_SIMILARITY[:visualize].member?(visualize)
142
118
 
@@ -146,6 +122,19 @@ module Appium
146
122
  compare_images(mode: :getSimilarity, first_image: first_image, second_image: second_image, options: options)
147
123
  end
148
124
 
125
+ # Performs images comparison using OpenCV framework features.
126
+ # It is expected that both OpenCV framework and opencv4nodejs
127
+ # module are installed on the machine where Appium server is running.
128
+ #
129
+ # @param [Symbol] mode One of possible comparison modes: `:matchFeatures`, `:getSimilarity`, `:matchTemplate`.
130
+ # `:matchFeatures is by default.
131
+ # @param [String] first_image An image data. All image formats, that OpenCV library itself accepts, are supported.
132
+ # @param [String] second_image An image data. All image formats, that OpenCV library itself accepts, are supported.
133
+ # @param [Hash] options The content of this dictionary depends on the actual `mode` value.
134
+ # See the documentation on `appium-support` module for more details.
135
+ # @return [Hash] The content of the resulting dictionary depends on the actual `mode` and `options` values.
136
+ # See the documentation on `appium-support` module for more details.
137
+ #
149
138
  def compare_images(mode: :matchFeatures, first_image:, second_image:, options: nil)
150
139
  raise "content_type should be #{MODE}" unless MODE.member?(mode)
151
140
 
@@ -14,11 +14,11 @@ module Appium
14
14
  #
15
15
  # If only a number is provided then it's treated as the timeout value.
16
16
  #
17
- # @param [Integer] timeout: Seconds to wait before timing out. Set default by `appium_wait_timeout` (30).
18
- # @param [Integer] interval: Seconds to sleep between polls. Set default by `appium_wait_interval` (0.5).
19
- # @param [String] message: Exception message if timed out.
20
- # @param [Array, Exception] ignored: Exceptions to ignore while polling (default: Exception)
21
- # @param [Object, NilClass] object: Object to evaluate block against
17
+ # @param [Integer] timeout Seconds to wait before timing out. Set default by `appium_wait_timeout` (30).
18
+ # @param [Integer] interval Seconds to sleep between polls. Set default by `appium_wait_interval` (0.5).
19
+ # @param [String] message Exception message if timed out.
20
+ # @param [Array, Exception] ignored Exceptions to ignore while polling (default: Exception)
21
+ # @param [Object, NilClass] object Object to evaluate block against
22
22
  #
23
23
  # @example
24
24
  #
@@ -58,11 +58,11 @@ module Appium
58
58
  #
59
59
  # If only a number is provided then it's treated as the timeout value.
60
60
  #
61
- # @param [Integer] timeout: Seconds to wait before timing out. Set default by `appium_wait_timeout` (30).
62
- # @param [Integer] interval: Seconds to sleep between polls. Set default by `appium_wait_interval` (0.5).
63
- # @param [String] message: Exception message if timed out.
64
- # @param [Array, Exception] ignored: Exceptions to ignore while polling (default: Exception)
65
- # @param [Object, NilClass] object: Object to evaluate block against
61
+ # @param [Integer] timeout Seconds to wait before timing out. Set default by `appium_wait_timeout` (30).
62
+ # @param [Integer] interval Seconds to sleep between polls. Set default by `appium_wait_interval` (0.5).
63
+ # @param [String] message Exception message if timed out.
64
+ # @param [Array, Exception] ignored Exceptions to ignore while polling (default: Exception)
65
+ # @param [Object, NilClass] object Object to evaluate block against
66
66
  #
67
67
  # @example
68
68
  #
@@ -114,10 +114,10 @@ module Appium
114
114
  #
115
115
  # If only a number is provided then it's treated as the timeout value.
116
116
  #
117
- # @param [Integer] timeout: Seconds to wait before timing out. Set default by `appium_wait_timeout` (30).
118
- # @param [Integer] interval: Seconds to sleep between polls. Set default by `appium_wait_interval` (0.5).
119
- # @param [String] message: Exception message if timed out.
120
- # @param [Array, Exception] ignored: Exceptions to ignore while polling (default: Exception)
117
+ # @param [Integer] timeout Seconds to wait before timing out. Set default by `appium_wait_timeout` (30).
118
+ # @param [Integer] interval Seconds to sleep between polls. Set default by `appium_wait_interval` (0.5).
119
+ # @param [String] message Exception message if timed out.
120
+ # @param [Array, Exception] ignored Exceptions to ignore while polling (default: Exception)
121
121
  #
122
122
  # @example
123
123
  #
@@ -136,10 +136,10 @@ module Appium
136
136
  #
137
137
  # If only a number is provided then it's treated as the timeout value.
138
138
  #
139
- # @param [Integer] timeout: Seconds to wait before timing out. Set default by `appium_wait_timeout` (30).
140
- # @param [Integer] interval: Seconds to sleep between polls. Set default by `appium_wait_interval` (0.5).
141
- # @param [String] message: Exception message if timed out.
142
- # @param [Array, Exception] ignored: Exceptions to ignore while polling (default: Exception)
139
+ # @param [Integer] timeout Seconds to wait before timing out. Set default by `appium_wait_timeout` (30).
140
+ # @param [Integer] interval Seconds to sleep between polls. Set default by `appium_wait_interval` (0.5).
141
+ # @param [String] message Exception message if timed out.
142
+ # @param [Array, Exception] ignored Exceptions to ignore while polling (default: Exception)
143
143
  #
144
144
  # @example
145
145
  #
@@ -10,14 +10,14 @@ module Appium
10
10
  # Uses eventmachine to wait response from the peer. The eventmachine works on a thread. The thread will exit
11
11
  # with close method.
12
12
  #
13
- # @param [String] url: URL to establish web socket connection. If the URL has no port, the client use:
14
- # `ws`: 80, `wss`: 443 ports.
15
- # @param [Array] protocols: An array of strings representing acceptable subprotocols for use over the socket.
16
- # The driver will negotiate one of these to use via the Sec-WebSocket-Protocol header
17
- # if supported by the other peer. Default is nil.
18
- # The protocols is equal to https://github.com/faye/faye-websocket-ruby/ 's one for client.
19
- # @param [Hash] options: Initialize options for Faye client. Read https://github.com/faye/faye-websocket-ruby#initialization-options
20
- # for more details. Default is `{}`.
13
+ # @param [String] url URL to establish web socket connection. If the URL has no port, the client use:
14
+ # `ws`: 80, `wss`: 443 ports.
15
+ # @param [Array] protocols An array of strings representing acceptable subprotocols for use over the socket.
16
+ # The driver will negotiate one of these to use via the Sec-WebSocket-Protocol header
17
+ # if supported by the other peer. Default is nil.
18
+ # The protocols is equal to https://github.com/faye/faye-websocket-ruby/ 's one for client.
19
+ # @param [Hash] options Initialize options for Faye client. Read https://github.com/faye/faye-websocket-ruby#initialization-options
20
+ # for more details. Default is `{}`.
21
21
  #
22
22
  # @example
23
23
  # ws = WebSocket.new(url: "ws://#{host}:#{port}/ws/session/#{@session_id}/appium/device/logcat")
@@ -57,7 +57,7 @@ module Appium
57
57
  # Sends a ping frame with an optional message and fires the callback when a matching pong is received.
58
58
  #
59
59
  # @param [String] message A message to send ping.
60
- # @param [Block] &callback
60
+ # @param [Block] callback
61
61
  #
62
62
  # @example
63
63
  # ws = WebSocket.new(url: "ws://#{host}:#{port}/ws/session/#{@session_id}/appium/device/logcat")
@@ -82,8 +82,8 @@ module Appium
82
82
 
83
83
  # Closes the connection, sending the given status code and reason text, both of which are optional.
84
84
  #
85
- # @param [Integer] code: A status code to send to the peer with close signal. Default is nil.
86
- # @param [String] reason: A reason to send to the peer with close signal. Default is 'close from ruby_lib_core'.
85
+ # @param [Integer] code A status code to send to the peer with close signal. Default is nil.
86
+ # @param [String] reason A reason to send to the peer with close signal. Default is 'close from ruby_lib_core'.
87
87
  #
88
88
  # @example
89
89
  # ws = WebSocket.new(url: "ws://#{host}:#{port}/ws/session/#{@session_id}/appium/device/logcat")
@@ -13,6 +13,41 @@ module Appium
13
13
  autoload :Xcuitest, 'appium_lib_core/ios_xcuitest'
14
14
  end
15
15
 
16
+ # This options affects only client side as <code>:appium_lib</code> key.<br>
17
+ # Read {::Appium::Core::Driver} about each attribute
18
+ class Options
19
+ attr_reader :custom_url, :default_wait, :export_session, :export_session_path,
20
+ :port, :wait_timeout, :wait_interval, :listener,
21
+ :direct_connect
22
+
23
+ def initialize(appium_lib_opts)
24
+ @custom_url = appium_lib_opts.fetch :server_url, nil
25
+ @default_wait = appium_lib_opts.fetch :wait, Driver::DEFAULT_IMPLICIT_WAIT
26
+
27
+ # bump current session id into a particular file
28
+ @export_session = appium_lib_opts.fetch :export_session, false
29
+ @export_session_path = appium_lib_opts.fetch :export_session_path, default_tmp_appium_lib_session
30
+
31
+ @direct_connect = appium_lib_opts.fetch :direct_connect, false
32
+
33
+ @port = appium_lib_opts.fetch :port, Driver::DEFAULT_APPIUM_PORT
34
+
35
+ # timeout and interval used in ::Appium::Comm.wait/wait_true
36
+ @wait_timeout = appium_lib_opts.fetch :wait_timeout, ::Appium::Core::Wait::DEFAULT_TIMEOUT
37
+ @wait_interval = appium_lib_opts.fetch :wait_interval, ::Appium::Core::Wait::DEFAULT_INTERVAL
38
+
39
+ # to pass it in Selenium.new.
40
+ # `listener = opts.delete(:listener)` is called in Selenium::Driver.new
41
+ @listener = appium_lib_opts.fetch :listener, nil
42
+ end
43
+
44
+ private
45
+
46
+ def default_tmp_appium_lib_session
47
+ ::Appium::Core::Base.platform.windows? ? 'C:\\\\Windows\\Temp\\appium_lib_session' : '/tmp/appium_lib_session'
48
+ end
49
+ end
50
+
16
51
  class Driver
17
52
  include Waitable
18
53
  # Selenium webdriver capabilities
@@ -27,13 +62,13 @@ module Appium
27
62
  # @return [Symbol] :android and :ios, for example
28
63
  attr_reader :device
29
64
 
30
- # Automation name sent to appium server or received from server
31
- # If automation_name is nil, it is not set both client side and server side.
65
+ # Automation name sent to appium server or received by server.<br>
66
+ # If automation_name is <code>nil</code>, it is not set both client side and server side.
32
67
  # @return [Hash]
33
68
  attr_reader :automation_name
34
69
 
35
- # Custom URL for the selenium server. If set this attribute, ruby_lib_core try to handshake to the custom url.
36
- # False is by default and then "http://127.0.0.1:#{port}/wd/hub" is used.
70
+ # Custom URL for the selenium server. If set this attribute, ruby_lib_core try to handshake to the custom url.<br>
71
+ # Defaults to false. Then try to connect to <code>http://127.0.0.1:#{port}/wd/hub<code>.
37
72
  # @return [String]
38
73
  attr_reader :custom_url
39
74
 
@@ -44,28 +79,28 @@ module Appium
44
79
  attr_reader :export_session_path
45
80
 
46
81
  # Default wait time for elements to appear in Appium server side.
47
- # Returns the default client side wait. 0 seconds is by default. Users should handle the timeout stuff in user-side.
48
- # Provide Appium::Drive like { appium_lib: { wait: 30 } }
82
+ # Defaults to {::Appium::Core::Driver::DEFAULT_IMPLICIT_WAIT}.<br>
83
+ # Provide <code>{ appium_lib: { wait: 30 } }</code> to {::Appium::Core.for}
49
84
  # @return [Integer]
50
85
  attr_reader :default_wait
51
86
  DEFAULT_IMPLICIT_WAIT = 0
52
87
 
53
- # Appium's server port. 4723 is by default.
54
- # Provide Appium::Drive like { appium_lib: { port: 8080 } }
55
- # `:custom_url` is prior than `:port` if `:custom_url` is set.
88
+ # Appium's server port. 4723 is by default. Defaults to {::Appium::Core::Driver::DEFAULT_APPIUM_PORT}.<br>
89
+ # Provide <code>{ appium_lib: { port: 8080 } }</code> to {::Appium::Core.for}.
90
+ # <code>:custom_url</code> is prior than <code>:port</code> if <code>:custom_url</code> is set.
56
91
  # @return [Integer]
57
92
  attr_reader :port
58
93
  DEFAULT_APPIUM_PORT = 4723
59
94
 
60
- # Return a time wait timeout. 30 seconds is by default.
61
- # Wait time for ::Appium::Core::Base::Wait, wait and wait_true
62
- # Provide Appium::Drive like { appium_lib: { wait_timeout: 20 } }
95
+ # Return a time wait timeout. 30 seconds is by default {::Appium::Core::Wait::DEFAULT_TIMEOUT}.<br>
96
+ # Wait time for {::Appium::Core::Base::Wait}, wait and wait_true.<br>
97
+ # Provide <code>{ appium_lib: { wait_timeout: 20 } }</code> to {::Appium::Core.for}.
63
98
  # @return [Integer]
64
99
  attr_reader :wait_timeout
65
100
 
66
- # Return a time to wait interval. 0.5 seconds is by default.
67
- # Wait interval time for ::Appium::Core::Base::Wait, wait and wait_true
68
- # Provide Appium::Drive like { appium_lib: { wait_interval: 0.1 } }
101
+ # Return a time to wait interval. 0.5 seconds is by default {::Appium::Core::Wait::DEFAULT_INTERVAL}.<br>
102
+ # Wait interval time for {::Appium::Core::Base::Wait}, wait and wait_true.<br>
103
+ # Provide <code>{ appium_lib: { wait_interval: 0.1 } }</code> to {::Appium::Core.for}.
69
104
  # @return [Integer]
70
105
  attr_reader :wait_interval
71
106
 
@@ -76,19 +111,30 @@ module Appium
76
111
  # @return [Appium::Core::Base::Driver]
77
112
  attr_reader :driver
78
113
 
79
- # [Experimental feature]
80
- # Enable an experimental feature updating Appium HTTP client following `directConnectProtocol`, `directConnectHost`,
81
- # `directConnectPort` and `directConnectPath` after session creation if the server returns them as a part of the response
82
- # capability in _create session_.
114
+ # <b>[Experimental feature]</b><br>
115
+ # Enable an experimental feature updating Http client endpoint following below keys by Appium/Selenium server.<br>
116
+ # This works with {Appium::Core::Base::Http::Default}.
83
117
  #
84
- # Ignore them if this parameter is `false`. Defaults to false.
118
+ # If your Selenium/Appium server decorates the new session capabilities response with the following keys:<br>
119
+ # - <code>directConnectProtocol</code>
120
+ # - <code>directConnectHost</code>
121
+ # - <code>directConnectPort</code>
122
+ # - <code>directConnectPath</code>
123
+ #
124
+ # Ignore them if this parameter is <code>false</code>. Defaults to false.
85
125
  #
86
126
  # @return [Bool]
87
127
  attr_reader :direct_connect
88
128
 
89
- # Creates a new global driver and extend particular methods to `target`
90
- # @param [Class] target Extend particular methods to this target.
129
+ # Creates a new driver and extend particular methods
91
130
  # @param [Hash] opts A options include capabilities for the Appium Server and for the client.
131
+ # @option opts [Hash] :caps Appium capabilities. Prior than :desired_capabilities
132
+ # @option opts [Hash] :desired_capabilities The same as :caps.
133
+ # This param is for compatibility with Selenium WebDriver format
134
+ # @option opts [Appium::Core::Options] :appium_lib Capabilities affect only ruby client
135
+ # @option opts [String] :url The same as :custom_url in :appium_lib.
136
+ # This param is for compatibility with Selenium WebDriver format
137
+ #
92
138
  # @return [Driver]
93
139
  #
94
140
  # @example
@@ -464,25 +510,25 @@ module Appium
464
510
  end
465
511
 
466
512
  # @private
513
+ # Below capabilities are set only for client side.
467
514
  def set_appium_lib_specific_values(appium_lib_opts)
468
- @custom_url ||= appium_lib_opts.fetch :server_url, nil
469
- @default_wait = appium_lib_opts.fetch :wait, DEFAULT_IMPLICIT_WAIT
515
+ opts = Options.new appium_lib_opts
470
516
 
471
- # bump current session id into a particular file
472
- @export_session = appium_lib_opts.fetch :export_session, false
473
- @export_session_path = appium_lib_opts.fetch :export_session_path, default_tmp_appium_lib_session
517
+ @custom_url ||= opts.custom_url # Keep existence capability if it's already provided
474
518
 
475
- @direct_connect = appium_lib_opts.fetch :direct_access, false
519
+ @default_wait = opts.default_wait
476
520
 
477
- @port = appium_lib_opts.fetch :port, DEFAULT_APPIUM_PORT
521
+ @export_session = opts.export_session
522
+ @export_session_path = opts.export_session_path
478
523
 
479
- # timeout and interval used in ::Appium::Comm.wait/wait_true
480
- @wait_timeout = appium_lib_opts.fetch :wait_timeout, ::Appium::Core::Wait::DEFAULT_TIMEOUT
481
- @wait_interval = appium_lib_opts.fetch :wait_interval, ::Appium::Core::Wait::DEFAULT_INTERVAL
524
+ @port = opts.port
482
525
 
483
- # to pass it in Selenium.new.
484
- # `listener = opts.delete(:listener)` is called in Selenium::Driver.new
485
- @listener = appium_lib_opts.fetch :listener, nil
526
+ @wait_timeout = opts.wait_timeout
527
+ @wait_interval = opts.wait_interval
528
+
529
+ @listener = opts.listener
530
+
531
+ @direct_connect = opts.direct_connect
486
532
  end
487
533
 
488
534
  # @private
@@ -511,11 +557,6 @@ module Appium
511
557
  end
512
558
  end
513
559
 
514
- # @private
515
- def default_tmp_appium_lib_session
516
- ::Appium::Core::Base.platform.windows? ? 'C:\\\\Windows\\Temp\\appium_lib_session' : '/tmp/appium_lib_session'
517
- end
518
-
519
560
  # @private
520
561
  def write_session_id(session_id, export_path = '/tmp/appium_lib_session')
521
562
  export_path.tr!('/', '\\') if ::Appium::Core::Base.platform.windows?
@@ -37,13 +37,13 @@ module Appium
37
37
  #
38
38
 
39
39
  # @since Appium 1.9.1
40
- # @!method start_recording_screen(remote_path: nil, user: nil, pass: nil, method: nil, force_restart: nil, video_type: 'mjpeg', time_limit: '180', video_quality: 'medium', video_scale: '320:240')
40
+ # @!method start_recording_screen(remote_path: nil, user: nil, pass: nil, method: nil, force_restart: nil, video_type: 'mjpeg', video_fps: nil, time_limit: '180', video_quality: 'medium', video_scale: '320:240')
41
41
  #
42
42
  # Record the display of devices running iOS Simulator since Xcode 9 or real devices since iOS 11
43
43
  # (ffmpeg utility is required: 'brew install ffmpeg').
44
44
  # We would recommend to play the video by VLC or Mplayer if you can not play the video with other video players.
45
45
  #
46
- # @param [String] remote_path: The path to the remote location, where the resulting video should be uploaded.
46
+ # @param [String] remote_path The path to the remote location, where the resulting video should be uploaded.
47
47
  # The following protocols are supported: http/https, ftp.
48
48
  # Null or empty string value (the default setting) means the content of resulting
49
49
  # file should be encoded as Base64 and passed as the endpount response value.
@@ -51,21 +51,21 @@ module Appium
51
51
  # fit into the available process memory.
52
52
  # This option only has an effect if there is screen recording process in progreess
53
53
  # and `forceRestart` parameter is not set to `true`.
54
- # @param [String] user: The name of the user for the remote authentication.
55
- # @param [String] pass: The password for the remote authentication.
56
- # @param [String] method: The http multipart upload method name. The 'PUT' one is used by default.
57
- # @param [Boolean] force_restart: Whether to try to catch and upload/return the currently running screen recording
58
- # (`false`, the default setting on server) or ignore the result of it
59
- # and start a new recording immediately (`true`).
60
- # @param [String] video_type: The video codec type used for encoding of the be recorded screen capture.
61
- # Execute `ffmpeg -codecs` in the terminal to see the list of supported video codecs.
62
- # 'mjpeg' by default.
63
- # @param [String] time_limit: Recording time. 180 seconds is by default.
64
- # @param [String] video_quality: The video encoding quality (low, medium, high, photo - defaults to medium).
65
- # @param [String] video_fps: The Frames Per Second rate of the recorded video. Change this value if the resulting video
66
- # is too slow or too fast. Defaults to 10. This can decrease the resulting file size.
67
- # @param [String] video_scale: The scaling value to apply. Read https://trac.ffmpeg.org/wiki/Scaling for possible values.
68
- # No scale is applied by default.
54
+ # @param [String] user The name of the user for the remote authentication.
55
+ # @param [String] pass The password for the remote authentication.
56
+ # @param [String] method The http multipart upload method name. The 'PUT' one is used by default.
57
+ # @param [Boolean] force_restart Whether to try to catch and upload/return the currently running screen recording
58
+ # (`false`, the default setting on server) or ignore the result of it
59
+ # and start a new recording immediately (`true`).
60
+ # @param [String] video_type The video codec type used for encoding of the be recorded screen capture.
61
+ # Execute `ffmpeg -codecs` in the terminal to see the list of supported video codecs.
62
+ # 'mjpeg' by default.
63
+ # @param [String] time_limit Recording time. 180 seconds is by default.
64
+ # @param [String] video_quality The video encoding quality (low, medium, high, photo - defaults to medium).
65
+ # @param [String] video_fps The Frames Per Second rate of the recorded video. Change this value if the resulting video
66
+ # is too slow or too fast. Defaults to 10. This can decrease the resulting file size.
67
+ # @param [String] video_scale The scaling value to apply. Read https://trac.ffmpeg.org/wiki/Scaling for possible values.
68
+ # No scale is applied by default.
69
69
  #
70
70
  # @example
71
71
  #
@@ -75,21 +75,21 @@ module Appium
75
75
  #
76
76
 
77
77
  # @since Appium 1.3.4
78
- # @!method start_performance_record(timeout: 300000, profile_name: 'Activity Monitor')
78
+ # @!method start_performance_record(timeout: 300000, profile_name: 'Activity Monitor', pid: nil)
79
79
  #
80
80
  # This is a blocking application. Read https://help.apple.com/instruments/mac/current/ to understand the profiler.
81
81
  #
82
- # @param [Integer|String] timeout: The maximum count of milliseconds to record the profiling information.
83
- # @param [String] profile_name: The name of existing performance profile to apply.
84
- # Execute `instruments -s` to show the list of available profiles.
85
- # Note, that not all profiles are supported on mobile devices.
86
- # @param [Integer|String] pid: The ID of the process to measure the performance for.
87
- # Set it to `current` in order to measure the performance of
88
- # the process, which belongs to the currently active application.
89
- # All processes running on the device are measured if
90
- # pid is unset (the default setting). Setting process ID while
91
- # device under test is Simulator might require `instruments` to be launched
92
- # with sudo privileges, which is not supported and will throw a timeout exception.
82
+ # @param [Integer|String] timeout The maximum count of milliseconds to record the profiling information.
83
+ # @param [String] profile_name The name of existing performance profile to apply.
84
+ # Execute `instruments -s` to show the list of available profiles.
85
+ # Note, that not all profiles are supported on mobile devices.
86
+ # @param [Integer|String] pid The ID of the process to measure the performance for.
87
+ # Set it to `current` in order to measure the performance of
88
+ # the process, which belongs to the currently active application.
89
+ # All processes running on the device are measured if
90
+ # pid is unset (the default setting). Setting process ID while
91
+ # device under test is Simulator might require `instruments` to be launched
92
+ # with sudo privileges, which is not supported and will throw a timeout exception.
93
93
  # @return nil
94
94
  #
95
95
  # @example
@@ -103,22 +103,19 @@ module Appium
103
103
  #
104
104
  # This is a blocking application.
105
105
  #
106
- # @param [String] save_file_path: A path to save data as zipped .trace file
107
- # @param [String] profile_name: The name of existing performance profile to apply.
108
- # Execute `instruments -s` to show the list of available profiles.
109
- # Note, that not all profiles are supported on mobile devices.
110
- # @param [String] save_file_path: The name of existing performance profile to apply.
106
+ # @param [String] save_file_path A path to save data as zipped .trace file
107
+ # @param [String] profile_name The name of existing performance profile to apply.
111
108
  # Execute `instruments -s` to show the list of available profiles.
112
109
  # Note, that not all profiles are supported on mobile devices.
113
- # @param [String] remote_path: The path to the remote location, where the resulting zipped .trace file should be uploaded.
114
- # The following protocols are supported: http/https, ftp.
115
- # Null or empty string value (the default setting) means the content of resulting
116
- # file should be zipped, encoded as Base64 and passed as the endpount response value.
117
- # An exception will be thrown if the generated file is too big to
118
- # fit into the available process memory.
119
- # @param [String] user: The name of the user for the remote authentication. Only works if `remotePath` is provided.
120
- # @param [String] pass: The password for the remote authentication. Only works if `remotePath` is provided.
121
- # @param [String] method: The http multipart upload method name. Only works if `remotePath` is provided.
110
+ # @param [String] remote_path The path to the remote location, where the resulting zipped .trace file should be uploaded.
111
+ # The following protocols are supported: http/https, ftp.
112
+ # Null or empty string value (the default setting) means the content of resulting
113
+ # file should be zipped, encoded as Base64 and passed as the endpount response value.
114
+ # An exception will be thrown if the generated file is too big to
115
+ # fit into the available process memory.
116
+ # @param [String] user The name of the user for the remote authentication. Only works if `remotePath` is provided.
117
+ # @param [String] pass The password for the remote authentication. Only works if `remotePath` is provided.
118
+ # @param [String] method The http multipart upload method name. Only works if `remotePath` is provided.
122
119
  #
123
120
  # @example
124
121
  #
@@ -1,6 +1,6 @@
1
1
  module Appium
2
2
  module Core
3
- VERSION = '3.0.0'.freeze unless defined? ::Appium::Core::VERSION
4
- DATE = '2019-02-06'.freeze unless defined? ::Appium::Core::DATE
3
+ VERSION = '3.0.1'.freeze unless defined? ::Appium::Core::VERSION
4
+ DATE = '2019-02-25'.freeze unless defined? ::Appium::Core::DATE
5
5
  end
6
6
  end
data/release_notes.md CHANGED
@@ -1,3 +1,16 @@
1
+ #### v3.0.1 2019-02-25
2
+
3
+ - [8a63795](https://github.com/appium/ruby_lib_core/commit/8a63795df8ac9caa9a5e2208b69211a7db841108) Release 3.0.1
4
+ - [4d20509](https://github.com/appium/ruby_lib_core/commit/4d20509acca21e75e8e30a127be52b0c9c75f7a4) Separate appium lib (#194)
5
+ - [4c5ff26](https://github.com/appium/ruby_lib_core/commit/4c5ff26b1eb4439f7b8185e91429a3f315cd736a) tweak yardoc
6
+ - [22730a7](https://github.com/appium/ruby_lib_core/commit/22730a7dcfcc843c3030f4c89e3f9ee8fbf5c194) add strict find image (#193)
7
+ - [f6a3f7f](https://github.com/appium/ruby_lib_core/commit/f6a3f7f6eed308652265bd9527cf584e271292f2) add webatom example (#192)
8
+ - [3cd8585](https://github.com/appium/ruby_lib_core/commit/3cd8585b22d4a97958e6df0a29573d8b699e0c98) add a link to matcher
9
+ - [1dad363](https://github.com/appium/ruby_lib_core/commit/1dad3639c879b221480c7181b8f0fa74c6a1f6ae) clean yardoc style (#191)
10
+ - [712f6b1](https://github.com/appium/ruby_lib_core/commit/712f6b1d614369a35eb9cdf39a8661bd558158ce) add android datamatcher (#190)
11
+ - [caa9a9f](https://github.com/appium/ruby_lib_core/commit/caa9a9f7c97fe134166ff1fc629a1a62523d3db4) add links for issues in changelog
12
+
13
+
1
14
  #### v3.0.0 2019-02-06
2
15
 
3
16
  - [ba653c3](https://github.com/appium/ruby_lib_core/commit/ba653c3be70bad3b9a9e233121b4b3a9455fa287) Release 3.0.0
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: appium_lib_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0
4
+ version: 3.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kazuaki MATSUO
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-02-06 00:00:00.000000000 Z
11
+ date: 2019-02-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: selenium-webdriver