appium_lib_core 3.0.0 → 3.0.1

Sign up to get free protection for your applications and to get access to all the features.
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