appium_lib_core 1.3.0 → 1.3.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
  SHA1:
3
- metadata.gz: beb4e9d4de4aee51d10e20d5928b5643eb11718e
4
- data.tar.gz: 8b84e2bf079a746c6dcfe8fda67ae20043c0abd5
3
+ metadata.gz: c04b7c34dd2c6871b41e81187a83b88ff5d88d1d
4
+ data.tar.gz: 2cb5ab6893ac740b4302364110a8b4fdf67afcbd
5
5
  SHA512:
6
- metadata.gz: 46386acb4309665c91025d6e3dff55d91eed8a453d31deac7a018bd55d66148f7218189323fab82fb40938206b1195736bd19af0678985cc1a72e20ced113e1d
7
- data.tar.gz: 431ad7793eb318ffff75fb8d97862977a16c0cfa55ddc4db9d2c3143f24a085563baa72eecf27a16cf8c2ac86fddc793835a77fa0591109097efdcf8cf808ab6
6
+ metadata.gz: e246e7f8d8c553bf034a90fc9a11678c50e4a171c77cc1ea9cb1a74bc4600a7e176908f70c30edd5c93d3c12519794aa2ff6135d8844215d82b489a9460a5f35
7
+ data.tar.gz: 49060b3ba5fd7bc18ada2e6f01f4e3e5e9021759d6d4f9ed208f54ce01a9173298b329d04306db627d8745b73c41ae071a70441c52092dc4d9f121d4bc24fde7
@@ -8,6 +8,31 @@ All notable changes to this project will be documented in this file.
8
8
 
9
9
  ### Deprecations
10
10
 
11
+ ## [1.3.1] - 2018-02-14
12
+ ### Enhancements
13
+ - add some app management commands [#58](https://github.com/appium/ruby_lib_core/pull/58)
14
+ - Require Appium 1.8.0+
15
+ - Both platforms work absolute based axis for `move_to` and `swipe`
16
+ - **Breaking Changes**
17
+ - Android was relevant, previously.
18
+ - e.g.:
19
+ ```ruby
20
+ # Do not move because of the start and end point is the same
21
+ # Tap (75, 500) and move the point to (75, 500) with duration 500ms.
22
+ Appium::Core::TouchAction.new(@driver)
23
+ .swipe(start_x: 75, start_y: 500, offset_x: 75, offset_y: 500, duration: 500)
24
+ .perform
25
+
26
+ # Tap (75, 500) and move the point to (75, 1000) with duration 500ms.
27
+ Appium::Core::TouchAction.new(@driver)
28
+ .swipe(start_x: 75, start_y: 500, offset_x: 75, offset_y: 1000, duration: 500)
29
+ .perform
30
+ ```
31
+
32
+ ### Bug fixes
33
+
34
+ ### Deprecations
35
+
11
36
  ## [1.3.0] - 2018-01-28
12
37
  ### Enhancements
13
38
  - `start_recording_screen`/`stop_recording_screen` support iOS from `Appium 1.8.0` [#48](https://github.com/appium/ruby_lib_core/issues/48)
@@ -9,6 +9,7 @@ require_relative 'appium_lib_core/driver'
9
9
  require_relative 'appium_lib_core/device/touch_actions'
10
10
  require_relative 'appium_lib_core/device/multi_touch'
11
11
  require_relative 'appium_lib_core/device/screen_record'
12
+ require_relative 'appium_lib_core/device/app_state'
12
13
 
13
14
  require_relative 'appium_lib_core/android'
14
15
  require_relative 'appium_lib_core/android_uiautomator2'
@@ -1,5 +1,4 @@
1
1
  # loaded in common/driver.rb
2
2
  require_relative 'android/search_context'
3
3
  require_relative 'android/device'
4
- require_relative 'android/touch'
5
4
  require_relative 'android/uiautomator1/bridge'
@@ -3,6 +3,8 @@ module Appium
3
3
  module Device
4
4
  extend Forwardable
5
5
 
6
+ # rubocop:disable Metrics/LineLength
7
+
6
8
  # @!method hide_keyboard(close_key = nil, strategy = nil)
7
9
  # Hide the onscreen keyboard
8
10
  # @param [String] close_key The name of the key which closes the keyboard.
@@ -27,10 +29,11 @@ module Appium
27
29
  # @!method start_activity(opts)
28
30
  # Android only. Start a new activity within the current app or launch a new app and start the target activity.
29
31
  #
30
- # @option [String] The package owning the activity [required]
31
- # @option [String] The target activity [required]
32
- # @option opts [String] The package to start before the target package [optional]
33
- # @option opts [String] The activity to start before the target activity [optional]
32
+ # @param opts [Hash] Options
33
+ # @option opts [String] :app_package The package owning the activity [required]
34
+ # @option opts [String] :app_activity The target activity [required]
35
+ # @option opts [String] :app_wait_package The package to start before the target package [optional]
36
+ # @option opts [String] :app_wait_activity The activity to start before the target activity [optional]
34
37
  #
35
38
  # @example
36
39
  #
@@ -69,19 +72,17 @@ module Appium
69
72
  # @!method get_performance_data(package_name:, data_type:, data_read_timeout: 1000)
70
73
  # Get the resource usage information of the application.
71
74
  # https://github.com/appium/appium-base-driver/blob/be29aec2318316d12b5c3295e924a5ba8f09b0fb/lib/mjsonwp/routes.js#L303
72
- # @param [String] package_name Package name
73
- # @param [String] data_type Data type get with `get_performance_data_types`
74
- # @param [String] data_read_timeout Command timeout. Default is 2.
75
+ # @param [String] package_name: Package name
76
+ # @param [String] data_type: Data type get with `get_performance_data_types`
77
+ # @param [String] data_read_timeout: Command timeout. Default is 2.
75
78
  #
76
79
  # @example
77
80
  #
78
81
  # @driver.get_performance_data package_name: package_name, data_type: data_type, data_read_timeout: 2
79
82
  #
80
83
 
81
- # @!method start_recording_screen(remote_path:, user:, pass:, method:, force_restart:,
82
- # video_size:, time_limit:, bit_rate:)
83
- #
84
- # @option [String] remote_path The path to the remote location, where the resulting video should be uploaded.
84
+ # @!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')
85
+ # @param [String] remote_path: The path to the remote location, where the resulting video should be uploaded.
85
86
  # The following protocols are supported: http/https, ftp.
86
87
  # Null or empty string value (the default setting) means the content of resulting
87
88
  # file should be encoded as Base64 and passed as the endpoint response value.
@@ -89,20 +90,20 @@ module Appium
89
90
  # fit into the available process memory.
90
91
  # This option only has an effect if there is screen recording process in progress
91
92
  # and `forceRestart` parameter is not set to `true`.
92
- # @option [String] user The name of the user for the remote authentication.
93
- # @option [String] pass The password for the remote authentication.
94
- # @option [String] method The http multipart upload method name. The 'PUT' one is used by default.
95
- # @option [Boolean] force_restart Whether to try to catch and upload/return the currently running screen recording
93
+ # @param [String] user: The name of the user for the remote authentication.
94
+ # @param [String] pass: The password for the remote authentication.
95
+ # @param [String] method: The http multipart upload method name. The 'PUT' one is used by default.
96
+ # @param [Boolean] force_restart: Whether to try to catch and upload/return the currently running screen recording
96
97
  # (`false`, the default setting on server) or ignore the result of it
97
98
  # and start a new recording immediately (`true`).
98
99
  #
99
- # @option [String] video_size The format is widthxheight.
100
+ # @param [String] video_size: The format is widthxheight.
100
101
  # The default value is the device's native display resolution (if supported),
101
102
  # 1280x720 if not. For best results,
102
103
  # use a size supported by your device's Advanced Video Coding (AVC) encoder.
103
104
  # For example, "1280x720"
104
- # @param [String] time_limit Recording time. 180 seconds is by default.
105
- # @param [String] bit_rate The video bit rate for the video, in megabits per second. 4 Mbps(4000000) is by default.
105
+ # @param [String] time_limit: Recording time. 180 seconds is by default.
106
+ # @param [String] bit_rate: The video bit rate for the video, in megabits per second. 4 Mbps(4000000) is by default.
106
107
  #
107
108
  # @example
108
109
  #
@@ -114,6 +115,8 @@ module Appium
114
115
  ## class << self
115
116
  ####
116
117
 
118
+ # rubocop:enable Metrics/LineLength
119
+
117
120
  class << self
118
121
  def extended(_mod)
119
122
  Appium::Core::Device.extend_webdriver_with_forwardable
@@ -6,8 +6,6 @@ module Appium
6
6
  def self.for(target)
7
7
  target.extend Appium::Android::Device
8
8
  Core::Android::SearchContext.extend
9
-
10
- Core::Android::Touch.extend_touch_actions
11
9
  end
12
10
  end
13
11
  end
@@ -6,8 +6,6 @@ module Appium
6
6
  def self.for(target)
7
7
  target.extend Appium::Android::Device
8
8
  Core::Android::SearchContext.extend
9
-
10
- Core::Android::Touch.extend_touch_actions
11
9
  end
12
10
  end
13
11
  end
@@ -6,8 +6,6 @@ module Appium
6
6
  def self.for(target)
7
7
  target.extend Appium::Android::Device
8
8
  Core::Android::SearchContext.extend
9
-
10
- Core::Android::Touch.extend_touch_actions
11
9
  end
12
10
  end
13
11
  end
@@ -1,5 +1,4 @@
1
1
  # loaded in common/driver.rb
2
2
  require_relative 'android/search_context'
3
3
  require_relative 'android/device'
4
- require_relative 'android/touch'
5
4
  require_relative 'android/espresso/bridge'
@@ -1,5 +1,4 @@
1
1
  # loaded in common/driver.rb
2
2
  require_relative 'android/search_context'
3
3
  require_relative 'android/device'
4
- require_relative 'android/touch'
5
4
  require_relative 'android/uiautomator2/bridge'
@@ -38,6 +38,9 @@ module Appium
38
38
  install_app: [:post, 'session/:session_id/appium/device/install_app'.freeze],
39
39
  remove_app: [:post, 'session/:session_id/appium/device/remove_app'.freeze],
40
40
  app_installed?: [:post, 'session/:session_id/appium/device/app_installed'.freeze],
41
+ activate_app: [:post, 'session/:session_id/appium/device/activate_app'.freeze],
42
+ terminate_app: [:post, 'session/:session_id/appium/device/terminate_app'.freeze],
43
+ app_state: [:post, 'session/:session_id/appium/device/app_state'.freeze],
41
44
  background_app: [:post, 'session/:session_id/appium/app/background'.freeze],
42
45
  hide_keyboard: [:post, 'session/:session_id/appium/device/hide_keyboard'.freeze],
43
46
  press_keycode: [:post, 'session/:session_id/appium/device/press_keycode'.freeze],
@@ -5,6 +5,8 @@ module Appium
5
5
  module Device
6
6
  extend Forwardable
7
7
 
8
+ # rubocop:disable Metrics/LineLength
9
+
8
10
  ####
9
11
  ## No argument
10
12
  ####
@@ -47,7 +49,7 @@ module Appium
47
49
 
48
50
  # @!method is_keyboard_shown
49
51
  # Get whether keyboard is displayed or not.
50
- # @return [Bool] Return true if keyboard is shown. Return false if keyboard is hidden.
52
+ # @return [Boolean] Return true if keyboard is shown. Return false if keyboard is hidden.
51
53
  #
52
54
  # @example
53
55
  # @driver.is_keyboard_shown # false
@@ -140,31 +142,83 @@ module Appium
140
142
  ## With arguments
141
143
  ####
142
144
 
143
- # @!method install_app(path)
145
+ # @!method install_app(path, replace: nil, timeout: nil, allow_test_packages: nil, use_sdcard: nil, grant_permissions: nil)
144
146
  # Install the given app onto the device
145
147
  #
148
+ # @param [String] path The absolute local path or remote http URL to an .ipa or .apk file, or a .zip containing one of these.
149
+ # @param [Boolean] replace: Only for Android. Whether to reinstall/upgrade the package if it is already present on the device under test. `true` by default
150
+ # @param [Integer] timeout: Only for Android. How much time to wait for the installation to complete. 60000ms by default.
151
+ # @param [Boolean] allow_test_packages: Only for Android. Whether to allow installation of packages marked as test in the manifest. `false` by default
152
+ # @param [Boolean] use_sdcard: Only for Android. Whether to use the SD card to install the app. `false` by default
153
+ # @param [Boolean] grant_permissions: Only for Android. whether to automatically grant application permissions on Android 6+ after the installation completes. `false` by default
154
+ #
146
155
  # @example
147
156
  #
148
157
  # @driver.install_app("/path/to/test.apk")
158
+ # @driver.install_app("/path/to/test.apk", replace: true, timeout: 20000, allow_test_packages: true, use_sdcard: false, grant_permissions: false)
149
159
  #
150
160
 
151
- # @!method remove_app(app_id)
152
- # Install the given app onto the device
161
+ # @!method remove_app(app_id, keep_data: nil, timeout: nil)
162
+ #
163
+ # @param [Strong] app_id BundleId for iOS or package name for Android
164
+ # @param [Boolean] keep_data: Only for Android. Whether to keep application data and caches after it is uninstalled. `false` by default
165
+ # @param [Integer] timeout: Only for Android. How much time to wait for the uninstall to complete. 20000ms by default.
153
166
  #
154
167
  # @example
155
168
  #
156
169
  # @driver.remove_app("io.appium.bundle")
170
+ # @driver.remove_app("io.appium.bundle", keep_data: false, timeout, 10000)
157
171
  #
158
172
 
159
173
  # @!method app_installed?(app_id)
160
174
  # Check whether the specified app is installed on the device
161
- # @return [bool]
175
+ # @return [Boolean]
162
176
  #
163
177
  # @example
164
178
  #
165
179
  # @driver.app_installed?("io.appium.bundle")
166
180
  #
167
181
 
182
+ # @!method terminate_app(app_id)
183
+ # Terminate the specified app.
184
+ #
185
+ # @param [Strong] app_id BundleId for iOS or package name for Android
186
+ # @param [Integer] timeout: Only for Android. How much time to wait for the application termination to complete. 500ms by default.
187
+ # @return [Boolean]
188
+ #
189
+ # @example
190
+ #
191
+ # @driver.terminate_app("io.appium.bundle") # true
192
+ # @driver.terminate_app("io.appium.bundle", timeout: 500)
193
+ #
194
+
195
+ # @!method activate_app(app_id)
196
+ # Activate(Launch) the specified app.
197
+ # @return [Hash]
198
+ #
199
+ # @example
200
+ #
201
+ # @driver.activate_app("io.appium.bundle") #=> {}
202
+ #
203
+
204
+ # Get the status of an existing application on the device.
205
+ # State:
206
+ # AppState::NOT_INSTALLED : The current application state cannot be determined/is unknown
207
+ # AppState::NOT_RUNNING : The application is not running
208
+ # AppState::RUNNING_IN_BACKGROUND_SUSPENDED : The application is running in the background and is suspended
209
+ # AppState::RUNNING_IN_BACKGROUND : The application is running in the background and is not suspended
210
+ # AppState::RUNNING_IN_FOREGROUND : The application is running in the foreground
211
+ #
212
+ # For more details: https://developer.apple.com/documentation/xctest/xcuiapplicationstate
213
+ #
214
+ # @param [String] bundle_id A target app's bundle id
215
+ # @return [AppManagement::APP_STATE_NOT_INSTALLED|AppManagement::APP_STATE_NOT_RUNNING|APP_STATE_RUNNING_IN_BACKGROUND_SUSPEND|AppManagement::APP_STATE_RUNNING_IN_BACKGROUND|AppManagement::APP_STATE_RUNNING_IN_FOREGROUND] A number of the state
216
+ #
217
+ # @example
218
+ #
219
+ # @driver.app_state("io.appium.bundle") #=> 1
220
+ #
221
+
168
222
  # @!method app_strings(language = nil)
169
223
  # Return the hash of all localization strings.
170
224
  # @return [Hash]
@@ -402,17 +456,16 @@ module Appium
402
456
  # @driver.take_element_screenshot(element, "fine_name.png")
403
457
  #
404
458
 
405
- # @!method stop_recording_screen(remote_path:, user:, pass:, method:)
406
- #
407
- # @option [String] remote_path The path to the remote location, where the resulting video should be uploaded.
459
+ # @!method stop_recording_screen(remote_path: nil, user: nil, pass: nil, method: 'PUT')
460
+ # @param [String] remote_path: The path to the remote location, where the resulting video should be uploaded.
408
461
  # The following protocols are supported: http/https, ftp.
409
462
  # Null or empty string value (the default setting) means the content of resulting
410
463
  # file should be encoded as Base64 and passed as the endpoint response value.
411
464
  # An exception will be thrown if the generated media file is too big to
412
465
  # fit into the available process memory.
413
- # @option [String] user The name of the user for the remote authentication.
414
- # @option [String] pass The password for the remote authentication.
415
- # @option [String] method The http multipart upload method name. The 'PUT' one is used by default.
466
+ # @param [String] user: The name of the user for the remote authentication.
467
+ # @param [String] pass: The password for the remote authentication.
468
+ # @param [String] method: The http multipart upload method name. The 'PUT' one is used by default.
416
469
  #
417
470
  # @example
418
471
  #
@@ -421,14 +474,15 @@ module Appium
421
474
  #
422
475
 
423
476
  # @!method stop_and_save_recording_screen(file_path)
424
- #
425
- # @option [String] file_path The path to save video decoded from base64 from Appium server.
477
+ # @param [String] file_path The path to save video decoded from base64 from Appium server.
426
478
  #
427
479
  # @example
428
480
  #
429
481
  # @driver.stop_and_save_recording_screen 'example.mp4'
430
482
  #
431
483
 
484
+ # rubocop:enable Metrics/LineLength
485
+
432
486
  ####
433
487
  ## class << self
434
488
  ####
@@ -462,24 +516,6 @@ module Appium
462
516
  end
463
517
  end
464
518
 
465
- add_endpoint_method(:install_app) do
466
- def install_app(path)
467
- execute :install_app, {}, appPath: path
468
- end
469
- end
470
-
471
- add_endpoint_method(:remove_app) do
472
- def remove_app(id)
473
- execute :remove_app, {}, appId: id
474
- end
475
- end
476
-
477
- add_endpoint_method(:app_installed?) do
478
- def app_installed?(app_id)
479
- execute :app_installed?, {}, bundleId: app_id
480
- end
481
- end
482
-
483
519
  add_endpoint_method(:background_app) do
484
520
  def background_app(duration = 0)
485
521
  execute :background_app, {}, seconds: duration
@@ -568,6 +604,7 @@ module Appium
568
604
  add_ime_actions
569
605
  add_handling_context
570
606
  add_screen_recording
607
+ add_app_management
571
608
  end
572
609
 
573
610
  # def extended
@@ -609,6 +646,100 @@ module Appium
609
646
  end
610
647
  end
611
648
 
649
+ # rubocop:disable Metrics/ParameterLists,Metrics/PerceivedComplexity,Metrics/CyclomaticComplexity
650
+ def add_app_management
651
+ add_endpoint_method(:install_app) do
652
+ def install_app(path,
653
+ replace: nil,
654
+ timeout: nil,
655
+ allow_test_packages: nil,
656
+ use_sdcard: nil,
657
+ grant_permissions: nil)
658
+ args = { appPath: path }
659
+
660
+ args[:options] = {} unless options?(replace, timeout, allow_test_packages, use_sdcard, grant_permissions)
661
+
662
+ args[:options][:replace] = replace unless replace.nil?
663
+ args[:options][:timeout] = timeout unless timeout.nil?
664
+ args[:options][:allowTestPackages] = allow_test_packages unless allow_test_packages.nil?
665
+ args[:options][:useSdcard] = use_sdcard unless use_sdcard.nil?
666
+ args[:options][:grantPermissions] = grant_permissions unless grant_permissions.nil?
667
+
668
+ execute :install_app, {}, args
669
+ end
670
+
671
+ private
672
+
673
+ def options?(replace, timeout, allow_test_packages, use_sdcard, grant_permissions)
674
+ replace.nil? || timeout.nil? || allow_test_packages.nil? || use_sdcard.nil? || grant_permissions.nil?
675
+ end
676
+ end
677
+
678
+ add_endpoint_method(:remove_app) do
679
+ def remove_app(id, keep_data: nil, timeout: nil)
680
+ # required: [['appId'], ['bundleId']]
681
+ args = { appId: id }
682
+
683
+ args[:options] = {} unless keep_data.nil? || timeout.nil?
684
+ args[:options][:keepData] = keep_data unless keep_data.nil?
685
+ args[:options][:timeout] = timeout unless timeout.nil?
686
+
687
+ execute :remove_app, {}, args
688
+ end
689
+ end
690
+
691
+ add_endpoint_method(:app_installed?) do
692
+ def app_installed?(app_id)
693
+ # required: [['appId'], ['bundleId']]
694
+ execute :app_installed?, {}, bundleId: app_id
695
+ end
696
+ end
697
+
698
+ add_endpoint_method(:activate_app) do
699
+ def activate_app(app_id)
700
+ # required: [['appId'], ['bundleId']]
701
+ execute :activate_app, {}, bundleId: app_id
702
+ end
703
+ end
704
+
705
+ add_endpoint_method(:terminate_app) do
706
+ def terminate_app(app_id, timeout: nil)
707
+ # required: [['appId'], ['bundleId']]
708
+ #
709
+ args = { appId: app_id }
710
+
711
+ args[:options] = {} unless timeout.nil?
712
+ args[:options][:timeout] = timeout unless timeout.nil?
713
+
714
+ execute :terminate_app, {}, args
715
+ end
716
+ end
717
+
718
+ add_endpoint_method(:app_state) do
719
+ def app_state(app_id)
720
+ # required: [['appId'], ['bundleId']]
721
+ response = execute :app_state, {}, appId: app_id
722
+
723
+ case response
724
+ when 0
725
+ Appium::Core::Device::AppState::NOT_INSTALLED
726
+ when 1
727
+ Appium::Core::Device::AppState::NOT_RUNNING
728
+ when 2
729
+ Appium::Core::Device::AppState::RUNNING_IN_BACKGROUND_SUSPENDED
730
+ when 3
731
+ Appium::Core::Device::AppState::RUNNING_IN_BACKGROUND
732
+ when 4
733
+ Appium::Core::Device::AppState::RUNNING_IN_FOREGROUND
734
+ else
735
+ Appium::Logger.debug("Unexpected status in app_state: #{response}")
736
+ response
737
+ end
738
+ end
739
+ end
740
+ end
741
+ # rubocop:enable Metrics/ParameterLists,Metrics/PerceivedComplexity,Metrics/CyclomaticComplexity
742
+
612
743
  def add_keyevent
613
744
  # Only for Selendroid
614
745
  add_endpoint_method(:keyevent) do
@@ -0,0 +1,13 @@
1
+ module Appium
2
+ module Core
3
+ module Device
4
+ class AppState
5
+ NOT_INSTALLED = 0
6
+ NOT_RUNNING = 1
7
+ RUNNING_IN_BACKGROUND_SUSPENDED = 2
8
+ RUNNING_IN_BACKGROUND = 3
9
+ RUNNING_IN_FOREGROUND = 4
10
+ end
11
+ end
12
+ end
13
+ end
@@ -4,6 +4,11 @@ module Appium
4
4
  #
5
5
  # Each method returns the object itself, so calls can be chained.
6
6
  #
7
+ # Consider to use W3C spec touch action like the followings.
8
+ # https://seleniumhq.github.io/selenium/docs/api/rb/Selenium/WebDriver/W3CActionBuilder.html
9
+ # https://github.com/appium/ruby_lib_core/blob/master/test/functional/android/webdriver/w3c_actions_test.rb
10
+ # https://github.com/appium/ruby_lib_core/blob/master/test/functional/ios/webdriver/w3c_actions_test.rb
11
+ #
7
12
  # @example
8
13
  #
9
14
  # @driver = Appium::Core.for(self, opts).start_driver
@@ -28,6 +33,7 @@ module Appium
28
33
  #
29
34
  # `move_to`'s `x` and `y` have two case. One is working as coordinate, the other is working as offset.
30
35
  #
36
+ # @param opts [Hash] Options
31
37
  # @option opts [integer] :x x co-ordinate to move to if element isn't set. Works as an offset if x is set with Element.
32
38
  # @option opts [integer] :y y co-ordinate to move to if element isn't set. Works as an offset if y is set with Element.
33
39
  # @option opts [WebDriver::Element] Element to scope this move within.
@@ -41,19 +47,20 @@ module Appium
41
47
  # https://github.com/appium/ruby_lib/issues/231#issuecomment-269895512
42
48
  # e.g. Appium::TouchAction.new.press(x: 280, y: 530).wait(2000).release.perform
43
49
  #
44
- # @option element [WebDriver::Element] the element to press.
45
- # @option x [integer] x co-ordinate to press on.
46
- # @option y [integer] y co-ordinate to press on.
47
- # @option duration [integer] Number of milliseconds to press.
50
+ # @param opts [Hash] Options
51
+ # @option opts [WebDriver::Element] element the element to press.
52
+ # @option opts [integer] x X co-ordinate to press on.
53
+ # @option opts [integer] y Y co-ordinate to press on.
54
+ # @option opts [integer] duration Number of milliseconds to press.
48
55
  def long_press(opts)
49
56
  args = opts.select { |k, _v| %i(element x y duration).include? k }
50
57
  args = args_with_ele_ref(args)
51
58
  chain_method(:longPress, args) # longPress is what the appium server expects
52
59
  end
53
60
 
54
- # Press a finger onto the screen. Finger will stay down until you call
55
- # `release`.
61
+ # Press a finger onto the screen. Finger will stay down until you call `release`.
56
62
  #
63
+ # @param opts [Hash] Options
57
64
  # @option opts [WebDriver::Element] :element (Optional) Element to press within.
58
65
  # @option opts [integer] :x x co-ordinate to press on
59
66
  # @option opts [integer] :y y co-ordinate to press on
@@ -65,6 +72,7 @@ module Appium
65
72
 
66
73
  # Remove a finger from the screen.
67
74
  #
75
+ # @param opts [Hash] Options
68
76
  # @option opts [WebDriver::Element] :element (Optional) Element to release from.
69
77
  # @option opts [integer] :x x co-ordinate to release from
70
78
  # @option opts [integer] :y y co-ordinate to release from
@@ -76,6 +84,7 @@ module Appium
76
84
  # Touch a point on the screen.
77
85
  # Alternatively, you can use `press(...).release.perform` instead of `tap(...).perform`.
78
86
  #
87
+ # @param opts [Hash] Options
79
88
  # @option opts [WebDriver::Element] :element (Optional) Element to restrict scope too.
80
89
  # @option opts [integer] :x x co-ordinate to tap
81
90
  # @option opts [integer] :y y co-ordinate to tap
@@ -89,6 +98,7 @@ module Appium
89
98
 
90
99
  # Double tap an element on the screen
91
100
  #
101
+ # @param opts [Hash] Options
92
102
  # @option opts [WebDriver::Element] :element (Optional) Element to restrict scope too.
93
103
  # @option opts [integer] :x x co-ordinate to tap
94
104
  # @option opts [integer] :y y co-ordinate to tap
@@ -101,6 +111,7 @@ module Appium
101
111
 
102
112
  # Two finger tap an element on the screen
103
113
  #
114
+ # @param opts [Hash] Options
104
115
  # @option opts [WebDriver::Element] :element (Optional) Element to restrict scope too.
105
116
  # @option opts [integer] :x x co-ordinate to tap
106
117
  # @option opts [integer] :y y co-ordinate to tap
@@ -117,21 +128,13 @@ module Appium
117
128
  chain_method(:wait, args)
118
129
  end
119
130
 
120
- # Convenience method to peform a swipe.
121
- #
122
- # Note that iOS 7 simulators have broken swipe.
123
- #
124
- # For iOS: Use `offset_x` and `offset_y` to define the end point.
125
- #
126
- # For Android: Use `end_x` and `end_y` to define the end point.
127
- #
128
- # If you'd like more details, please read tests and its log samples in
129
- # `ios_tests/lib/ios/specs/device/touch_actions.rb` and `ios_tests/lib/ios/specs/device/touch_actions.rb`
131
+ # Convenience method to perform a swipe.
130
132
  #
133
+ # @param opts [Hash] Options
131
134
  # @option opts [int] :start_x Where to start swiping, on the x axis. Default 0.
132
135
  # @option opts [int] :start_y Where to start swiping, on the y axis. Default 0.
133
- # @option opts [int] :offset_x Offset, on the x axis. Default 0.
134
- # @option opts [int] :offset_y Offset, on the y axis. Default 0.
136
+ # @option opts [int] :offset_x Move to the end, on the x axis. Default 0.
137
+ # @option opts [int] :offset_y Move to the end, on the y axis. Default 0.
135
138
  # @option opts [int] :duration How long the actual swipe takes to complete in milliseconds. Default 200.
136
139
  def swipe(opts, ele = nil)
137
140
  start_x = opts.fetch :start_x, 0
@@ -140,15 +143,13 @@ module Appium
140
143
  offset_y = opts.fetch :offset_y, 0
141
144
  duration = opts.fetch :duration, 200
142
145
 
143
- coordinates = swipe_coordinates(start_x: start_x, start_y: start_y, offset_x: offset_x, offset_y: offset_y)
144
-
145
146
  if ele # pinch/zoom for XCUITest
146
147
  press x: start_x, y: start_y, element: ele
147
- move_to x: coordinates[:offset_x], y: coordinates[:offset_y], element: ele
148
+ move_to x: offset_x, y: offset_y, element: ele
148
149
  else
149
150
  press x: start_x, y: start_y
150
151
  wait(duration) if duration
151
- move_to x: coordinates[:offset_x], y: coordinates[:offset_y]
152
+ move_to x: offset_x, y: offset_y
152
153
  end
153
154
  release
154
155
 
@@ -169,13 +170,6 @@ module Appium
169
170
  self
170
171
  end
171
172
 
172
- # Visible for testing
173
- # @private
174
- def swipe_coordinates(start_x: 0, start_y: 0, offset_x: 0, offset_y: 0)
175
- Appium::Logger.info "start_x: #{start_x}, start_y: #{start_y}, offset_x: #{offset_x}, offset_y: #{offset_y}"
176
- { offset_x: offset_x, offset_y: offset_y }
177
- end
178
-
179
173
  private
180
174
 
181
175
  def chain_method(method, args = nil)
@@ -19,7 +19,7 @@ module Appium
19
19
  attr_reader :automation_name
20
20
 
21
21
  # Custom URL for the selenium server. If set this attribute, ruby_lib_core try to handshake to the custom url.
22
- # False is by default and then "http://127.0.0.1:#{@port}/wd/hub" is used.
22
+ # False is by default and then "http://127.0.0.1:#{port}/wd/hub" is used.
23
23
  # @return [String]
24
24
  attr_reader :custom_url
25
25
 
@@ -116,6 +116,7 @@ module Appium
116
116
  # You can customise http_client as the following
117
117
  #
118
118
  # @param [String] server_url Custom server url to send to requests. Default is "http://127.0.0.1:4723/wd/hub".
119
+ # @param http_client_ops [Hash] Options for http client
119
120
  # @option http_client_ops [Hash] :http_client Custom HTTP Client
120
121
  # @option http_client_ops [Hash] :open_timeout Custom open timeout for http client.
121
122
  # @option http_client_ops [Hash] :read_timeout Custom read timeout for http client.
@@ -1,7 +1,6 @@
1
1
  # loaded in common/driver.rb
2
2
  require_relative 'ios/search_context'
3
3
  require_relative 'ios/device'
4
- require_relative 'ios/touch'
5
4
 
6
5
  require_relative 'ios/uiautomation/patch'
7
6
  require_relative 'ios/uiautomation/bridge'
@@ -8,8 +8,6 @@ module Appium
8
8
  target.extend Appium::Ios::Device
9
9
 
10
10
  Core::Ios::Uiautomation.patch_webdriver_element
11
-
12
- Core::Ios::Touch.extend_touch_actions
13
11
  end
14
12
  end
15
13
  end
@@ -8,8 +8,6 @@ module Appium
8
8
  Core::Ios::Xcuitest::SearchContext.extend
9
9
  target.extend Appium::Ios::Device
10
10
  target.extend Appium::Ios::Xcuitest::Device
11
-
12
- Core::Ios::Touch.extend_touch_actions
13
11
  end
14
12
  end
15
13
  end
@@ -4,6 +4,8 @@ module Appium
4
4
  module Device
5
5
  extend Forwardable
6
6
 
7
+ # rubocop:disable Metrics/LineLength
8
+
7
9
  # @!method hide_keyboard(close_key = nil, strategy = nil)
8
10
  # Hide the onscreen keyboard
9
11
  # @param [String] close_key The name of the key which closes the keyboard.
@@ -29,10 +31,8 @@ module Appium
29
31
  # @driver.background_app(-1) #=> the app never come back. https://github.com/appium/appium/issues/7741
30
32
  #
31
33
 
32
- # @!method start_recording_screen(remote_path:, user:, pass:, method:, force_restart:,
33
- # video_type:, time_limit:, video_quality:)
34
- #
35
- # @option [String] remote_path The path to the remote location, where the resulting video should be uploaded.
34
+ # @!method start_recording_screen(remote_path: nil, user: nil, pass: nil, method: nil, force_restart: nil, video_type: 'mp4', time_limit: '180', video_quality: 'medium')
35
+ # @param [String] remote_path: The path to the remote location, where the resulting video should be uploaded.
36
36
  # The following protocols are supported: http/https, ftp.
37
37
  # Null or empty string value (the default setting) means the content of resulting
38
38
  # file should be encoded as Base64 and passed as the endpount response value.
@@ -40,18 +40,17 @@ module Appium
40
40
  # fit into the available process memory.
41
41
  # This option only has an effect if there is screen recording process in progreess
42
42
  # and `forceRestart` parameter is not set to `true`.
43
- # @option [String] user The name of the user for the remote authentication.
44
- # @option [String] pass The password for the remote authentication.
45
- # @option [String] method The http multipart upload method name. The 'PUT' one is used by default.
46
- # @option [Boolean] force_restart Whether to try to catch and upload/return the currently running screen recording
43
+ # @param [String] user: The name of the user for the remote authentication.
44
+ # @param [String] pass: The password for the remote authentication.
45
+ # @param [String] method: The http multipart upload method name. The 'PUT' one is used by default.
46
+ # @param [Boolean] force_restart: Whether to try to catch and upload/return the currently running screen recording
47
47
  # (`false`, the default setting on server) or ignore the result of it
48
48
  # and start a new recording immediately (`true`).
49
- #
50
- # @param [String] video_type The format of the screen capture to be recorded.
49
+ # @param [String] video_type: The format of the screen capture to be recorded.
51
50
  # Available formats: "h264", "mp4" or "fmp4". Default is "mp4".
52
51
  # Only works for Simulator.
53
- # @param [String] time_limit Recording time. 180 seconds is by default.
54
- # @param [String] video_quality The video encoding quality (low, medium, high, photo - defaults to medium).
52
+ # @param [String] time_limit: Recording time. 180 seconds is by default.
53
+ # @param [String] video_quality: The video encoding quality (low, medium, high, photo - defaults to medium).
55
54
  # Only works for real devices.
56
55
  #
57
56
  # @example
@@ -60,6 +59,8 @@ module Appium
60
59
  # @driver.start_recording_screen video_type: 'h264', time_limit: '260'
61
60
  #
62
61
 
62
+ # rubocop:enable Metrics/LineLength
63
+
63
64
  ####
64
65
  ## class << self
65
66
  ####
@@ -1,7 +1,6 @@
1
1
  # loaded in common/driver.rb
2
2
  require_relative 'ios/search_context'
3
3
  require_relative 'ios/device'
4
- require_relative 'ios/touch'
5
4
 
6
5
  require_relative 'ios/xcuitest/search_context'
7
6
  require_relative 'ios/xcuitest/device'
@@ -1,6 +1,6 @@
1
1
  module Appium
2
2
  module Core
3
- VERSION = '1.3.0'.freeze unless defined? ::Appium::Core::VERSION
4
- DATE = '2018-01-28'.freeze unless defined? ::Appium::Core::DATE
3
+ VERSION = '1.3.1'.freeze unless defined? ::Appium::Core::VERSION
4
+ DATE = '2018-02-14'.freeze unless defined? ::Appium::Core::DATE
5
5
  end
6
6
  end
@@ -1,3 +1,14 @@
1
+ #### v1.3.1 2018-02-14
2
+
3
+ - [d107749](https://github.com/appium/ruby_lib_core/commit/d107749782e3eae49aeb9c17411a120eecb5a242) Release 1.3.1
4
+ - [9dc38d6](https://github.com/appium/ruby_lib_core/commit/9dc38d65a1c0d8975fc67a8274c1d2ebd43e7e5d) remove unused method
5
+ - [3ca89ff](https://github.com/appium/ruby_lib_core/commit/3ca89ff6a81e016739f602a1cc60c4a7538ae96a) remove corrdinator for moveTo in swipe (#57)
6
+ - [29c528e](https://github.com/appium/ruby_lib_core/commit/29c528e8b407591072a65d4a544af65413a93b9d) arrange consts names and add some options for app management (#59)
7
+ - [da7fd55](https://github.com/appium/ruby_lib_core/commit/da7fd55fb7a8330e778fe7295807646e984f262a) Update CHANGELOG.md
8
+ - [b1b484d](https://github.com/appium/ruby_lib_core/commit/b1b484ddced5011daedca6c0546d236624511d1a) add terminate, app_state and activate app (#58)
9
+ - [0ba7b1c](https://github.com/appium/ruby_lib_core/commit/0ba7b1c726f02e11d6daa46481309b1e0e54b00e) fix documentation
10
+
11
+
1
12
  #### v1.3.0 2018-01-28
2
13
 
3
14
  - [b7a994b](https://github.com/appium/ruby_lib_core/commit/b7a994ba29b3870257cf7e8af602deb147afd791) Release 1.3.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: 1.3.0
4
+ version: 1.3.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: 2018-01-28 00:00:00.000000000 Z
11
+ date: 2018-02-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: selenium-webdriver
@@ -196,7 +196,6 @@ files:
196
196
  - lib/appium_lib_core/android/device.rb
197
197
  - lib/appium_lib_core/android/espresso/bridge.rb
198
198
  - lib/appium_lib_core/android/search_context.rb
199
- - lib/appium_lib_core/android/touch.rb
200
199
  - lib/appium_lib_core/android/uiautomator1/bridge.rb
201
200
  - lib/appium_lib_core/android/uiautomator2/bridge.rb
202
201
  - lib/appium_lib_core/android_espresso.rb
@@ -217,6 +216,7 @@ files:
217
216
  - lib/appium_lib_core/common/error.rb
218
217
  - lib/appium_lib_core/common/log.rb
219
218
  - lib/appium_lib_core/common/logger.rb
219
+ - lib/appium_lib_core/device/app_state.rb
220
220
  - lib/appium_lib_core/device/multi_touch.rb
221
221
  - lib/appium_lib_core/device/screen_record.rb
222
222
  - lib/appium_lib_core/device/touch_actions.rb
@@ -224,7 +224,6 @@ files:
224
224
  - lib/appium_lib_core/ios.rb
225
225
  - lib/appium_lib_core/ios/device.rb
226
226
  - lib/appium_lib_core/ios/search_context.rb
227
- - lib/appium_lib_core/ios/touch.rb
228
227
  - lib/appium_lib_core/ios/uiautomation/bridge.rb
229
228
  - lib/appium_lib_core/ios/uiautomation/patch.rb
230
229
  - lib/appium_lib_core/ios/xcuitest/bridge.rb
@@ -1,19 +0,0 @@
1
- module Appium
2
- module Core
3
- module Android
4
- module Touch
5
- def self.extend_touch_actions
6
- ::Appium::Core::TouchAction.class_eval do
7
- # Visible for testing
8
- # @private
9
- def swipe_coordinates(start_x: 0, start_y: 0, offset_x: 0, offset_y: 0)
10
- Appium::Logger.info "extended Appium::Core::Android::Touch, start_x: #{start_x},"\
11
- " start_y: #{start_y}, offset_x: #{offset_x}, offset_y: #{offset_y}"
12
- { offset_x: (start_x + offset_x), offset_y: (start_y + offset_y) }
13
- end
14
- end
15
- end
16
- end
17
- end
18
- end
19
- end
@@ -1,19 +0,0 @@
1
- module Appium
2
- module Core
3
- module Ios
4
- module Touch
5
- def self.extend_touch_actions
6
- ::Appium::Core::TouchAction.class_eval do
7
- # Visible for testing
8
- # @private
9
- def swipe_coordinates(start_x: 0, start_y: 0, offset_x: 0, offset_y: 0)
10
- Appium::Logger.info "extended Appium::Core::Ios::Touch, start_x: #{start_x},"\
11
- " start_y: #{start_y}, offset_x: #{offset_x}, offset_y: #{offset_y}"
12
- { offset_x: offset_x, offset_y: offset_y }
13
- end
14
- end
15
- end
16
- end
17
- end
18
- end
19
- end