appium_lib_core 7.4.0 → 8.0.0

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: 76742dd6cc95afc285f18d8a4b8509e49e81365a16b88526fbce2df392075289
4
- data.tar.gz: 7ca26f49b6473acc7c1523c7b29f1bed896e88e154ef8c750586202fb69ba4a6
3
+ metadata.gz: e0dede67687fe20659b7d6835475a0d5f3afec17cacdfe524e85fe969acf5065
4
+ data.tar.gz: da99daf2ab73305fdae7ac88114bf07db61612806d5d0ad35184c14bd3ee2932
5
5
  SHA512:
6
- metadata.gz: 3fcb537d9a24c1e7572151f2224c2ff2d7279325de914916031c2b3615561c258a231eaebf99c4b9d029987db4541f24357ac7c9a81f2c809d4c91ba8ff8c799
7
- data.tar.gz: ba7acfeddd8820d895e4d927dfb7e487f14f3307761d12dcfcf306f1f98d86d4eef50fd3255b8a383b30a85807de66395b01b026c9d307c53b5c51460f52eaac
6
+ metadata.gz: 89ceab3e96728f645bca3e76aa749679da6061af73d4b5ad46c03975f0e4bc4818a8602f5f391d808083883d4ad1e4075167fee3b877adb69a1081d390a66afe
7
+ data.tar.gz: 4701430819ac1d48552d30fa81096e264e27ce370820526b9cd4511001b7077c782b6aa708a540e5a4de5670827241cd0c29ada6b3821512403239b20115384d
data/CHANGELOG.md CHANGED
@@ -10,6 +10,26 @@ Read `release_notes.md` for commit level details.
10
10
 
11
11
  ### Deprecations
12
12
 
13
+ ## [8.0.0] - 2024-03-08
14
+
15
+ ### Deprecations
16
+ - Removed deprecated methods
17
+ - `launch_app`, `close_app` and `reset`
18
+ - Please use `activate_app`, `terminate_app`, or launch/activate/terminate commands by `mobile:` command
19
+ - `TouchActions`, `MultiActions`
20
+ - Please refer to W3C WebDriver actions
21
+ - https://www.rubydoc.info/gems/appium_lib_core/Appium/Core/Base/Bridge#action-instance_method
22
+ - `immediate_value` and `replace_value`
23
+ - `end_coverage`
24
+ - `sessions` and `session_capabilities` since they are not W3C WebDriver spec and already removed from the dependent selenium clients.
25
+ - To get events info, please use `driver.logs.events` instead
26
+ - `switch_to_default_context`
27
+ - Please set proper context instead
28
+
29
+ ## [7.5.0] - 2024-02-21
30
+ - Remove upper limitation in `selenium-webdriver`
31
+ - Users can control the version in their Gemfile
32
+ - ruby_lib_core will fix when the future release requires changes
13
33
 
14
34
  ## [7.4.0] - 2024-01-23
15
35
 
@@ -22,15 +22,15 @@ Gem::Specification.new do |spec|
22
22
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
23
  spec.require_paths = ['lib']
24
24
 
25
- spec.add_runtime_dependency 'selenium-webdriver', '~> 4.2', '< 4.18'
25
+ spec.add_runtime_dependency 'selenium-webdriver', '~> 4.2'
26
26
  spec.add_runtime_dependency 'faye-websocket', '~> 0.11.0'
27
27
 
28
28
  spec.add_development_dependency 'rake', '~> 13.0'
29
29
  spec.add_development_dependency 'yard', '~> 0.9.11'
30
30
  spec.add_development_dependency 'minitest', '~> 5.0'
31
31
  spec.add_development_dependency 'minitest-reporters', '~> 1.1'
32
- spec.add_development_dependency 'webmock', '~> 3.19.0'
33
- spec.add_development_dependency 'rubocop', '1.60.1'
32
+ spec.add_development_dependency 'webmock', '~> 3.23.0'
33
+ spec.add_development_dependency 'rubocop', '1.62.0'
34
34
  spec.add_development_dependency 'appium_thor', '~> 1.0'
35
35
  spec.add_development_dependency 'parallel_tests'
36
36
  spec.add_development_dependency 'simplecov'
@@ -188,13 +188,6 @@ module Appium
188
188
  # @driver.hide_keyboard(nil, :tapOutside) # Close a keyboard with tapping out side of keyboard
189
189
  #
190
190
 
191
- # @deprecated The method no longer exists. This method will be removed.
192
- # @!method end_coverage(path, intent)
193
- # Android only; Ends the test coverage and writes the results to the given path on device.
194
- # @param [String] path Path on the device to write too.
195
- # @param [String] intent Intent to broadcast when ending coverage.
196
- #
197
-
198
191
  # @deprecated Use 'mobile: startActivity' extension instead.
199
192
  # @!method start_activity(opts)
200
193
  # Android only. Start a new activity within the current app or launch a new app and start the target activity.
@@ -481,14 +474,6 @@ module Appium
481
474
  end
482
475
  end
483
476
 
484
- # TODO: TEST ME
485
- ::Appium::Core::Device.add_endpoint_method(:end_coverage) do
486
- def end_coverage(path, intent)
487
- ::Appium::Logger.warn '[DEPRECATION] The method no longer exists. This method will be removed.'
488
- execute :end_coverage, {}, path: path, intent: intent
489
- end
490
- end
491
-
492
477
  ::Appium::Core::Device.add_endpoint_method(:execute_cdp) do
493
478
  # SeleniumWebdriver could already define this method
494
479
  return if method_defined? :execute_cdp
@@ -21,7 +21,6 @@ module Appium
21
21
  include Device::ImeActions
22
22
  include Device::Setting
23
23
  include Device::Context
24
- include Device::Value
25
24
  include Device::FileManagement
26
25
  include Device::KeyEvent
27
26
  include Device::ImageComparison
@@ -29,7 +28,6 @@ module Appium
29
28
  include Device::AppState
30
29
  include Device::ScreenRecord::Command
31
30
  include Device::Device
32
- include Device::TouchActions
33
31
  include Device::ExecuteDriver
34
32
  include Device::Orientation
35
33
 
@@ -170,11 +168,6 @@ module Appium
170
168
  @available_commands[command]
171
169
  end
172
170
 
173
- # Returns all available sessions on the Appium server instance
174
- def sessions
175
- execute :get_all_sessions
176
- end
177
-
178
171
  def status
179
172
  execute :status
180
173
  end
@@ -207,11 +200,6 @@ module Appium
207
200
  execute :get_timeouts
208
201
  end
209
202
 
210
- # Port from MJSONWP
211
- def session_capabilities
212
- ::Appium::Core::Base::Capabilities.json_create execute(:get_capabilities)
213
- end
214
-
215
203
  # For Appium
216
204
  # override
217
205
  def element_displayed?(element)
@@ -434,18 +434,6 @@ module Appium
434
434
  block_given? ? @bridge.within_context(context, &block) : @bridge.within_context(context)
435
435
  end
436
436
 
437
- # @deprecated Use set context with proper context name instead.
438
- # Change to the default context. This is equivalent to +set_context nil+.
439
- #
440
- # @example
441
- #
442
- # @driver.switch_to_default_context
443
- #
444
- def switch_to_default_context
445
- ::Appium::Logger.warn '[DEPRECATION] Please set proper context instead of calling this method.'
446
- @bridge.switch_to_default_context
447
- end
448
-
449
437
  # @return [String] The context currently being used.
450
438
  #
451
439
  # @example
@@ -603,43 +591,6 @@ module Appium
603
591
  @bridge.long_press_keycode(key, metastate: metastate, flags: flags)
604
592
  end
605
593
 
606
- # @deprecated Will be removed, or use 'windows: launchApp' extension instead for Windows.
607
- # Start the simulator and application configured with desired capabilities
608
- #
609
- # @example
610
- #
611
- # @driver.launch_app
612
- #
613
- def launch_app
614
- @bridge.launch_app
615
- end
616
-
617
- # @deprecated Will be removed, or use 'windows: closeApp' extension instead for Windows.
618
- # Close an app on device
619
- #
620
- # @example
621
- #
622
- # @driver.close_app
623
- #
624
- def close_app
625
- @bridge.close_app
626
- end
627
-
628
- # @deprecated
629
- # Reset the device, relaunching the application.
630
- #
631
- # @example
632
- #
633
- # @driver.reset
634
- #
635
- def reset
636
- ::Appium::Logger.warn(
637
- '[DEPRECATION] reset is deprecated. Please use terminate_app and activate_app, ' \
638
- 'or quit and create a new session instead.'
639
- )
640
- @bridge.reset
641
- end
642
-
643
594
  # @deprecated Use 'mobile: getAppStrings' extension instead.
644
595
  # Return the hash of all localization strings.
645
596
  # @return [Hash]
@@ -852,15 +803,6 @@ module Appium
852
803
  @bridge.device_time(format)
853
804
  end
854
805
 
855
- # touch actions
856
- def touch_actions(actions)
857
- @bridge.touch_actions(actions)
858
- end
859
-
860
- def multi_touch(actions)
861
- @bridge.multi_touch(actions)
862
- end
863
-
864
806
  #
865
807
  # Send multiple W3C action chains to server. Use +@driver.action+ for single action chain.
866
808
  #
@@ -959,101 +901,6 @@ module Appium
959
901
  @bridge.get_timeouts
960
902
  end
961
903
 
962
- # Retrieve the capabilities of the specified session.
963
- # It's almost same as +@driver.capabilities+ but you can get more details.
964
- #
965
- # @return [Selenium::WebDriver::Remote::Capabilities, Selenium::WebDriver::Remote::Capabilities]
966
- #
967
- # @example
968
- # @driver.session_capabilities
969
- #
970
- # #=> uiautomator2
971
- # # <Selenium::WebDriver::Remote::Capabilities:0x007fa38dae1360
972
- # # @capabilities=
973
- # # {:browser_name=>nil,
974
- # # :browser_version=>nil,
975
- # # :platform_name=>"android",
976
- # # :page_load_strategy=>nil,
977
- # # :remote_session_id=>nil,
978
- # # :accessibility_checks=>nil,
979
- # # :profile=>nil,
980
- # # :rotatable=>nil,
981
- # # :device=>nil,
982
- # # "platform"=>"LINUX",
983
- # # "webStorageEnabled"=>false,
984
- # # "takesScreenshot"=>true,
985
- # # "javascriptEnabled"=>true,
986
- # # "databaseEnabled"=>false,
987
- # # "networkConnectionEnabled"=>true,
988
- # # "locationContextEnabled"=>false,
989
- # # "warnings"=>{},
990
- # # "desired"=>
991
- # # {"platformName"=>"android",
992
- # # "automationName"=>"uiautomator2",
993
- # # "app"=>"/path/to/app/api.apk.zip",
994
- # # "platformVersion"=>"8.1.0",
995
- # # "deviceName"=>"Android Emulator",
996
- # # "appPackage"=>"io.appium.android.apis",
997
- # # "appActivity"=>"io.appium.android.apis.ApiDemos",
998
- # # "someCapability"=>"some_capability",
999
- # # "automationName"=>"uiautomator2",
1000
- # # "app"=>"/path/to/app/api.apk.zip",
1001
- # # "platformVersion"=>"8.1.0",
1002
- # # "deviceName"=>"emulator-5554",
1003
- # # "appPackage"=>"io.appium.android.apis",
1004
- # # "appActivity"=>"io.appium.android.apis.ApiDemos",
1005
- # # "someCapability"=>"some_capability",
1006
- # # "deviceUDID"=>"emulator-5554",
1007
- # # "deviceScreenSize"=>"1080x1920",
1008
- # # "deviceScreenDensity"=>420,
1009
- # # "deviceModel"=>"Android SDK built for x86",
1010
- # # "deviceManufacturer"=>"Google",
1011
- # # "pixelRatio"=>2.625,
1012
- # # "statBarHeight"=>63,
1013
- # # "viewportRect"=>{"left"=>0, "top"=>63, "width"=>1080, "height"=>1731}}>
1014
- # #
1015
- # #=> XCUITest
1016
- # # <Selenium::WebDriver::Remote::Capabilities:0x007fb15dc01370
1017
- # # @capabilities=
1018
- # # {:browser_name=>"UICatalog",
1019
- # # :browser_version=>nil,
1020
- # # :platform_name=>"ios",
1021
- # # :page_load_strategy=>nil,
1022
- # # :remote_session_id=>nil,
1023
- # # :accessibility_checks=>nil,
1024
- # # :profile=>nil,
1025
- # # :rotatable=>nil,
1026
- # # :device=>"iphone",
1027
- # # "udid"=>"DED4DBAD-8E5E-4AD6-BDC4-E75CF9AD84D8",
1028
- # # "automationName"=>"XCUITest",
1029
- # # "app"=>"/path/to/app/UICatalog.app",
1030
- # # "platformVersion"=>"11.4",
1031
- # # "deviceName"=>"iPhone Simulator",
1032
- # # "useNewWDA"=>true,
1033
- # # "useJSONSource"=>true,
1034
- # # "someCapability"=>"some_capability",
1035
- # # "sdkVersion"=>"11.4",
1036
- # # "CFBundleIdentifier"=>"com.example.apple-samplecode.UICatalog",
1037
- # # "pixelRatio"=>2,
1038
- # # "statBarHeight"=>23.4375,
1039
- # # "viewportRect"=>{"left"=>0, "top"=>47, "width"=>750, "height"=>1287}}>
1040
- #
1041
- def session_capabilities
1042
- @bridge.session_capabilities
1043
- end
1044
-
1045
- # Returns available sessions on the Appium server
1046
- #
1047
- # @return [[Hash]]
1048
- #
1049
- # @example
1050
- #
1051
- # @driver.sessions #=> [{'id' => 'c363add8-a7ca-4455-b9e3-9ac4d69e95b3', 'capabilities' => { capabilities as Hash }}]
1052
- #
1053
- def sessions
1054
- @bridge.sessions
1055
- end
1056
-
1057
904
  # Image Comparison
1058
905
  def match_images_features(first_image:,
1059
906
  second_image:,
@@ -29,12 +29,7 @@ module Appium
29
29
  view_matcher: '-android viewmatcher', # Available in Espresso
30
30
  # iOS
31
31
  predicate: '-ios predicate string',
32
- class_chain: '-ios class chain',
33
- # Windows with windows prefix
34
- # @deprecated
35
- windows_uiautomation: '-windows uiautomation',
36
- # Tizen with Tizen prefix
37
- tizen_uiautomation: '-tizen uiautomation'
32
+ class_chain: '-ios class chain'
38
33
  )
39
34
 
40
35
  # rubocop:disable Layout/LineLength
@@ -121,13 +116,6 @@ module Appium
121
116
  # e = find_element :class_chain, "**/XCUIElementTypeStaticText[$name == 'Buttons'$]"
122
117
  # e.tag_name #=> "XCUIElementTypeStaticText"
123
118
  #
124
- # # For Windows
125
- # # @deprecated
126
- # @driver.find_elements :windows_uiautomation, '....'
127
- #
128
- # # For Tizen
129
- # @driver.find_elements :tizen_uiautomation, '....'
130
- #
131
119
  # rubocop:enable Layout/LineLength
132
120
  def find_element(*args)
133
121
  how, what = extract_args(args)
@@ -159,12 +147,6 @@ module Appium
159
147
  private
160
148
 
161
149
  def _set_by_from_finders(how)
162
- if how == :windows_uiautomation
163
- ::Appium::Logger.warn(
164
- '[DEPRECATION] :windows_uiautomation is deprecated. Please use other locators.'
165
- )
166
- end
167
-
168
150
  by = FINDERS[how.to_sym]
169
151
  unless by
170
152
  raise ::Appium::Core::Error::ArgumentError,
@@ -17,7 +17,6 @@ require_relative 'device/keyboard'
17
17
  require_relative 'device/ime_actions'
18
18
  require_relative 'device/setting'
19
19
  require_relative 'device/context'
20
- require_relative 'device/value'
21
20
  require_relative 'device/file_management'
22
21
  require_relative 'device/keyevent'
23
22
  require_relative 'device/image_comparison'
@@ -27,7 +26,6 @@ require_relative 'device/screen_record'
27
26
  require_relative 'device/battery_status'
28
27
  require_relative 'device/clipboard_content_type'
29
28
  require_relative 'device/device'
30
- require_relative 'device/touch_actions'
31
29
  require_relative 'device/execute_driver'
32
30
  require_relative 'device/orientation'
33
31
 
@@ -157,10 +157,6 @@ module Appium
157
157
 
158
158
  get_timeouts: [:get, 'session/:session_id/timeouts'], # https://w3c.github.io/webdriver/#get-timeouts
159
159
 
160
- # Add OSS commands to W3C commands. We can remove them if we would like to remove them from W3C module.
161
- ### Session capability
162
- get_capabilities: [:get, 'session/:session_id'],
163
-
164
160
  ### rotatable
165
161
  get_screen_orientation: [:get, 'session/:session_id/orientation'],
166
162
  set_screen_orientation: [:post, 'session/:session_id/orientation'],
@@ -184,21 +180,10 @@ module Appium
184
180
  ###
185
181
 
186
182
  # common
187
- get_all_sessions: [:get, 'sessions'],
188
183
  available_contexts: [:get, 'session/:session_id/contexts'],
189
184
  set_context: [:post, 'session/:session_id/context'],
190
185
  current_context: [:get, 'session/:session_id/context'],
191
186
 
192
- touch_actions: [:post, 'session/:session_id/touch/perform'],
193
- multi_touch: [:post, 'session/:session_id/touch/multi/perform'],
194
-
195
- # TODO: remove
196
- set_immediate_value: [:post, 'session/:session_id/appium/element/:id/value'],
197
- replace_value: [:post, 'session/:session_id/appium/element/:id/replace_value'],
198
-
199
- launch_app: [:post, 'session/:session_id/appium/app/launch'],
200
- close_app: [:post, 'session/:session_id/appium/app/close'],
201
- reset: [:post, 'session/:session_id/appium/app/reset'],
202
187
  background_app: [:post, 'session/:session_id/appium/app/background'],
203
188
  app_strings: [:post, 'session/:session_id/appium/app/strings'],
204
189
 
@@ -244,7 +229,6 @@ module Appium
244
229
  toggle_wifi: [:post, 'session/:session_id/appium/device/toggle_wifi'],
245
230
  toggle_data: [:post, 'session/:session_id/appium/device/toggle_data'],
246
231
  toggle_location_services: [:post, 'session/:session_id/appium/device/toggle_location_services'],
247
- end_coverage: [:post, 'session/:session_id/appium/app/end_test_coverage'],
248
232
  get_performance_data_types: [:post, 'session/:session_id/appium/performanceData/types'],
249
233
  get_performance_data: [:post, 'session/:session_id/appium/getPerformanceData'],
250
234
  get_network_connection: [:get, 'session/:session_id/network_connection'], # defined also in OSS
@@ -17,24 +17,6 @@ module Appium
17
17
  class Base
18
18
  module Device
19
19
  module AppManagement
20
- def launch_app
21
- ::Appium::Logger.warn(
22
- '[DEPRECATION] launch_app is deprecated. Please use activate_app instead.'
23
- )
24
- execute :launch_app
25
- end
26
-
27
- def close_app
28
- ::Appium::Logger.warn(
29
- '[DEPRECATION] close_app is deprecated. Please use terminate_app instead.'
30
- )
31
- execute :close_app
32
- end
33
-
34
- def reset
35
- execute :reset
36
- end
37
-
38
20
  def app_strings(language = nil)
39
21
  opts = language ? { language: language } : {}
40
22
  execute :app_strings, {}, opts
@@ -29,10 +29,6 @@ module Appium
29
29
  end
30
30
  end
31
31
 
32
- def switch_to_default_context
33
- set_context nil
34
- end
35
-
36
32
  def current_context
37
33
  execute :current_context
38
34
  end
@@ -44,8 +44,7 @@ module Appium
44
44
 
45
45
  # @since Appium 1.16.0
46
46
  #
47
- # Logs a custom event. The event is available via {::Appium::Core::Events#get} or
48
- # <code>@driver.session_capabilities['events']</code> with <code>eventTimings</code> capabilities.
47
+ # Logs a custom event. The event is available via {::Appium::Core::Events#get}.
49
48
  #
50
49
  # @param [String] vendor The vendor prefix for the event
51
50
  # @param [String] event The name of event
@@ -54,7 +53,6 @@ module Appium
54
53
  # @example
55
54
  #
56
55
  # @driver.logs.event vendor: 'appium', event: 'funEvent'
57
- # @driver.session_capabilities['events'] #=> {...., 'appium:funEvent' => 1572957315}
58
56
  #
59
57
  # @driver.logs.event = { vendor: 'appium', event: 'anotherEvent' }
60
58
  # @driver.logs.events #=> {...., 'appium:funEvent' => [1572957315, 1572960305],
@@ -29,17 +29,15 @@ module Appium
29
29
  :hide_keyboard, :is_keyboard_shown,
30
30
  :ime_activate, :ime_available_engines, :ime_active_engine, :ime_activated, :ime_deactivate,
31
31
  :get_settings, :update_settings,
32
- :within_context, :switch_to_default_context, :current_context, :available_contexts, :set_context,
33
- :set_immediate_value, :replace_value,
32
+ :within_context, :current_context, :available_contexts, :set_context,
34
33
  :push_file, :pull_file, :pull_folder,
35
34
  :keyevent, :press_keycode, :long_press_keycode,
36
35
  :match_images_features, :find_image_occurrence, :get_images_similarity, :compare_images,
37
- :launch_app, :close_app, :reset, :app_strings, :background_app,
36
+ :app_strings, :background_app,
38
37
  :install_app, :remove_app, :app_installed?, :activate_app, :terminate_app,
39
38
  :app_state,
40
39
  :stop_recording_screen, :stop_and_save_recording_screen,
41
40
  :shake, :device_time,
42
- :touch_actions, :multi_touch,
43
41
  :execute_driver, :execute_cdp
44
42
  ].each(&method(:delegate_from_appium_driver))
45
43
  end
@@ -64,35 +64,6 @@ module Appium
64
64
  # Alias for type
65
65
  alias type send_keys
66
66
 
67
- # @deprecated Use element send_keys instead.
68
- # Set the value to element directly
69
- #
70
- # @example
71
- #
72
- # element.immediate_value 'hello'
73
- #
74
- def immediate_value(*value)
75
- ::Appium::Logger.warn(
76
- '[DEPRECATION] element.immediate_value is deprecated. Please use element.send_keys instead.'
77
- )
78
- @bridge.set_immediate_value @id, *value
79
- end
80
-
81
- # @deprecated Use element send_keys or 'mobile: replaceElementValue' for UIAutomator2 instead.
82
- # Replace the value to element directly
83
- #
84
- # @example
85
- #
86
- # element.replace_value 'hello'
87
- #
88
- def replace_value(*value)
89
- ::Appium::Logger.warn(
90
- '[DEPRECATION] element.replace_value is deprecated. Please use element.send_keys instead, ' \
91
- 'or "mobile: replaceElementValue" for UIAutomator2.'
92
- )
93
- @bridge.replace_value @id, *value
94
- end
95
-
96
67
  # For use with location_rel.
97
68
  #
98
69
  # @return [::Selenium::WebDriver::Point] the relative x, y in a struct. ex: { x: 0.50, y: 0.20 }
@@ -14,7 +14,7 @@
14
14
 
15
15
  module Appium
16
16
  module Core
17
- VERSION = '7.4.0' unless defined? ::Appium::Core::VERSION
18
- DATE = '2024-01-23' unless defined? ::Appium::Core::DATE
17
+ VERSION = '8.0.0' unless defined? ::Appium::Core::VERSION
18
+ DATE = '2024-03-08' unless defined? ::Appium::Core::DATE
19
19
  end
20
20
  end
@@ -13,7 +13,6 @@
13
13
  # limitations under the License.
14
14
 
15
15
  require_relative 'device/screen'
16
- require_relative 'device/app_management'
17
16
 
18
17
  module Appium
19
18
  module Core
@@ -79,7 +78,6 @@ module Appium
79
78
  class << self
80
79
  def extended(_mod)
81
80
  Screen.add_methods
82
- AppManagement.add_methods
83
81
  end
84
82
  end # class << self
85
83
  end # module Device
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: 7.4.0
4
+ version: 8.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kazuaki MATSUO
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-01-24 00:00:00.000000000 Z
11
+ date: 2024-03-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: selenium-webdriver
@@ -17,9 +17,6 @@ dependencies:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '4.2'
20
- - - "<"
21
- - !ruby/object:Gem::Version
22
- version: '4.18'
23
20
  type: :runtime
24
21
  prerelease: false
25
22
  version_requirements: !ruby/object:Gem::Requirement
@@ -27,9 +24,6 @@ dependencies:
27
24
  - - "~>"
28
25
  - !ruby/object:Gem::Version
29
26
  version: '4.2'
30
- - - "<"
31
- - !ruby/object:Gem::Version
32
- version: '4.18'
33
27
  - !ruby/object:Gem::Dependency
34
28
  name: faye-websocket
35
29
  requirement: !ruby/object:Gem::Requirement
@@ -106,28 +100,28 @@ dependencies:
106
100
  requirements:
107
101
  - - "~>"
108
102
  - !ruby/object:Gem::Version
109
- version: 3.19.0
103
+ version: 3.23.0
110
104
  type: :development
111
105
  prerelease: false
112
106
  version_requirements: !ruby/object:Gem::Requirement
113
107
  requirements:
114
108
  - - "~>"
115
109
  - !ruby/object:Gem::Version
116
- version: 3.19.0
110
+ version: 3.23.0
117
111
  - !ruby/object:Gem::Dependency
118
112
  name: rubocop
119
113
  requirement: !ruby/object:Gem::Requirement
120
114
  requirements:
121
115
  - - '='
122
116
  - !ruby/object:Gem::Version
123
- version: 1.60.1
117
+ version: 1.62.0
124
118
  type: :development
125
119
  prerelease: false
126
120
  version_requirements: !ruby/object:Gem::Requirement
127
121
  requirements:
128
122
  - - '='
129
123
  - !ruby/object:Gem::Version
130
- version: 1.60.1
124
+ version: 1.62.0
131
125
  - !ruby/object:Gem::Dependency
132
126
  name: appium_thor
133
127
  requirement: !ruby/object:Gem::Requirement
@@ -234,13 +228,9 @@ files:
234
228
  - lib/appium_lib_core/common/device/orientation.rb
235
229
  - lib/appium_lib_core/common/device/screen_record.rb
236
230
  - lib/appium_lib_core/common/device/setting.rb
237
- - lib/appium_lib_core/common/device/touch_actions.rb
238
- - lib/appium_lib_core/common/device/value.rb
239
231
  - lib/appium_lib_core/common/error.rb
240
232
  - lib/appium_lib_core/common/log.rb
241
233
  - lib/appium_lib_core/common/logger.rb
242
- - lib/appium_lib_core/common/touch_action/multi_touch.rb
243
- - lib/appium_lib_core/common/touch_action/touch_actions.rb
244
234
  - lib/appium_lib_core/common/wait.rb
245
235
  - lib/appium_lib_core/common/wait/timer.rb
246
236
  - lib/appium_lib_core/common/ws/websocket.rb
@@ -264,7 +254,6 @@ files:
264
254
  - lib/appium_lib_core/windows.rb
265
255
  - lib/appium_lib_core/windows/bridge.rb
266
256
  - lib/appium_lib_core/windows/device.rb
267
- - lib/appium_lib_core/windows/device/app_management.rb
268
257
  - lib/appium_lib_core/windows/device/screen.rb
269
258
  homepage: https://github.com/appium/ruby_lib_core/
270
259
  licenses:
@@ -1,37 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
-
15
- require_relative '../touch_action/touch_actions'
16
- require_relative '../touch_action/multi_touch'
17
-
18
- module Appium
19
- module Core
20
- class Base
21
- module Device
22
- module TouchActions
23
- # @deprecated Use W3C actions instead
24
- def touch_actions(actions)
25
- actions = { actions: [actions].flatten }
26
- execute :touch_actions, {}, actions
27
- end
28
-
29
- # @deprecated Use W3C actions instead
30
- def multi_touch(actions)
31
- execute :multi_touch, {}, actions: actions
32
- end
33
- end # module TouchActions
34
- end # module Device
35
- end # class Base
36
- end # module Core
37
- end # module Appium
@@ -1,50 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
-
15
- module Appium
16
- module Core
17
- class Base
18
- module Device
19
- module Value
20
- def set_immediate_value(element_id, *value)
21
- execute :set_immediate_value, { id: element_id }, generate_value_and_text(value)
22
- end
23
-
24
- def replace_value(element_id, *value)
25
- execute :replace_value, { id: element_id }, generate_value_and_text(value)
26
- end
27
-
28
- private
29
-
30
- def generate_value_and_text(*value)
31
- keys = ::Selenium::WebDriver::Keys.encode(*value)
32
-
33
- if @file_detector
34
- local_files = keys.first.split("\n").map { |key| @file_detector.call(Array(key)) }.compact
35
- if local_files.any?
36
- keys = local_files.map { |local_file| upload(local_file) }
37
- keys = Array(keys.join("\n"))
38
- end
39
- end
40
-
41
- # Keep .split(//) for backward compatibility for now
42
- text = keys.join
43
-
44
- { text: text }
45
- end
46
- end # module Value
47
- end # module Device
48
- end # class Base
49
- end # module Core
50
- end # module Appium
@@ -1,75 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
-
15
- module Appium
16
- module Core
17
- #
18
- # @deprecated Use W3C actions instead
19
- #
20
- # MultiTouch actions allow for multiple touches to happen at the same time,
21
- # for instance, to simulate multiple finger swipes.
22
- #
23
- # Create a series of touch actions by themselves (without a +prepare()+), then
24
- # add to a new MultiTouch action. When ready, call +prepare()+ and all
25
- # actions will be executed simultaneously.
26
- #
27
- # Consider to use W3C spec touch action like the followings.
28
- # https://www.selenium.dev/selenium/docs/api/rb/Selenium/WebDriver/PointerActions.html
29
- # https://github.com/appium/ruby_lib_core/blob/master/test/functional/android/webdriver/w3c_actions_test.rb
30
- # https://github.com/appium/ruby_lib_core/blob/master/test/functional/ios/webdriver/w3c_actions_test.rb
31
- #
32
- # About W3C actions
33
- # https://www.youtube.com/watch?v=oAJ7jwMNFVU
34
- # https://appiumpro.com/editions/30-ios-specific-touch-action-methods
35
- # https://appiumpro.com/editions/29-automating-complex-gestures-with-the-w3c-actions-api
36
- #
37
- # Functional test code in ruby_lib_core repository also helps.
38
- #
39
- # @example
40
- #
41
- # @driver = Appium::Core.for(opts).start_driver
42
- # action_1 = Appium::Core::TouchAction.new(@driver).press(x: 45, y: 100).wait(600).release
43
- # action_2 = Appium::Core::TouchAction.new(@driver).tap(element: el, x: 50, y:5, count: 3)
44
- #
45
- # multi_touch_action = MultiTouch.new(@driver)
46
- # multi_touch_action.add action_1
47
- # multi_touch_action.add action_2
48
- # multi_touch_action.perform
49
- #
50
- class MultiTouch
51
- attr_reader :driver
52
-
53
- def initialize(driver)
54
- ::Appium::Logger.warn(
55
- '[DEPRECATION] Appium::Core::MultiTouch is deprecated in W3C spec. Use W3C actions instead'
56
- )
57
-
58
- @actions = []
59
- @driver = driver
60
- end
61
-
62
- # Add a touch_action to be performed
63
- # @param chain (TouchAction) The action to add to the chain
64
- def add(chain)
65
- @actions << chain.actions
66
- end
67
-
68
- # Ask Appium to perform the actions
69
- def perform
70
- @driver.multi_touch @actions
71
- @actions.clear
72
- end
73
- end # class MultiTouch
74
- end # module Core
75
- end # module Appium
@@ -1,217 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
-
15
- module Appium
16
- module Core
17
- #
18
- # @deprecated Use W3C actions instead
19
- #
20
- # Perform a series of gestures, one after another. Gestures are chained
21
- # together and only performed when +perform()+ is called. Default is conducted by global driver.
22
- #
23
- # Each method returns the object itself, so calls can be chained.
24
- #
25
- # Consider to use W3C spec touch action like the followings.
26
- # https://www.selenium.dev/selenium/docs/api/rb/Selenium/WebDriver/PointerActions.html
27
- # https://github.com/appium/ruby_lib_core/blob/master/test/functional/android/webdriver/w3c_actions_test.rb
28
- # https://github.com/appium/ruby_lib_core/blob/master/test/functional/ios/webdriver/w3c_actions_test.rb
29
- #
30
- # About W3C actions
31
- # https://www.youtube.com/watch?v=oAJ7jwMNFVU
32
- # https://appiumpro.com/editions/30-ios-specific-touch-action-methods
33
- # https://appiumpro.com/editions/29-automating-complex-gestures-with-the-w3c-actions-api
34
- #
35
- # Functional test code in ruby_lib_core repository also helps.
36
- #
37
- # @example
38
- #
39
- # @driver = Appium::Core.for(opts).start_driver
40
- # action = Appium::Core::TouchAction.new(@driver).press(x: 45, y: 100).wait(600).release
41
- # action.perform
42
- # action = Appium::Core::TouchAction.new(@driver).swipe(....)
43
- # action.perform
44
- #
45
- class TouchAction
46
- ACTIONS = %i(move_to long_press double_tap two_finger_tap press release tap wait perform).freeze
47
- COMPLEX_ACTIONS = %i(swipe).freeze
48
-
49
- attr_reader :actions, :driver
50
-
51
- def initialize(driver)
52
- ::Appium::Logger.warn(
53
- '[DEPRECATION] Appium::Core::TouchAction is deprecated in W3C spec. Use W3C actions instead'
54
- )
55
-
56
- @actions = []
57
- @driver = driver
58
- end
59
-
60
- # Move to the given co-ordinates.
61
- #
62
- # +move_to+'s +x+ and +y+ have two case. One is working as coordinate, the other is working as offset.
63
- #
64
- # @param opts [Hash] Options
65
- # @option opts [integer] :x x co-ordinate to move to if element isn't set. Works as an absolute if x is set with Element.
66
- # @option opts [integer] :y y co-ordinate to move to if element isn't set. Works as an absolute if y is set with Element.
67
- # @option opts [WebDriver::Element] Element to scope this move within.
68
- def move_to(opts)
69
- opts = args_with_ele_ref(opts)
70
- chain_method(:moveTo, opts)
71
- end
72
-
73
- # Press down for a specific duration.
74
- # Alternatively, you can use +press(...).wait(...).release()+ instead of +long_press+ if duration doesn't work well.
75
- # https://github.com/appium/ruby_lib/issues/231#issuecomment-269895512
76
- # e.g. Appium::Core::TouchAction.new.press(x: 280, y: 530).wait(2000).release.perform
77
- #
78
- # @param opts [Hash] Options
79
- # @option opts [WebDriver::Element] element the element to press.
80
- # @option opts [integer] x X co-ordinate to press on.
81
- # @option opts [integer] y Y co-ordinate to press on.
82
- # @option opts [integer] duration Number of milliseconds to press.
83
- def long_press(opts)
84
- args = opts.select { |k, _v| %i(element x y duration).include? k }
85
- args = args_with_ele_ref(args)
86
- chain_method(:longPress, args) # longPress is what the appium server expects
87
- end
88
-
89
- # Press a finger onto the screen. Finger will stay down until you call +release+.
90
- #
91
- # @param opts [Hash] Options
92
- # @option opts [WebDriver::Element] :element (Optional) Element to press within.
93
- # @option opts [integer] :x x co-ordinate to press on
94
- # @option opts [integer] :y y co-ordinate to press on
95
- # @option opts [Float] pressure (iOS Only) press as force touch.
96
- # See the description of +force+ property on Apple's UITouch class
97
- # (https://developer.apple.com/documentation/uikit/uitouch?language=objc)
98
- # for more details on possible value ranges.
99
- def press(opts)
100
- args = opts.select { |k, _v| %i(element x y).include? k }
101
- args = args_with_ele_ref(args)
102
- args[:pressure] = opts.delete(:pressure) unless opts[:pressure].nil?
103
- chain_method(:press, args)
104
- end
105
-
106
- # Remove a finger from the screen.
107
- #
108
- # @param opts [Hash] Options
109
- # @option opts [WebDriver::Element] :element (Optional) Element to release from.
110
- # @option opts [integer] :x x co-ordinate to release from
111
- # @option opts [integer] :y y co-ordinate to release from
112
- def release(opts = nil)
113
- args = args_with_ele_ref(opts) if opts
114
- chain_method(:release, args)
115
- end
116
-
117
- # Touch a point on the screen.
118
- # Alternatively, you can use +press(...).release.perform+ instead of +tap(...).perform+.
119
- #
120
- # @param opts [Hash] Options
121
- # @option opts [WebDriver::Element] :element (Optional) Element to restrict scope too.
122
- # @option opts [integer] :x x co-ordinate to tap
123
- # @option opts [integer] :y y co-ordinate to tap
124
- # @option opts [integer] :fingers how many fingers to tap with (Default 1)
125
- def tap(opts)
126
- opts[:count] = opts.delete(:fingers) if opts[:fingers]
127
- opts[:count] ||= 1
128
- args = args_with_ele_ref opts
129
- chain_method(:tap, args)
130
- end
131
-
132
- # Double tap an element on the screen
133
- #
134
- # @param opts [Hash] Options
135
- # @option opts [WebDriver::Element] :element (Optional) Element to restrict scope too.
136
- # @option opts [integer] :x x co-ordinate to tap
137
- # @option opts [integer] :y y co-ordinate to tap
138
-
139
- def double_tap(opts)
140
- args = opts.select { |k, _v| %i(element x y).include? k }
141
- args = args_with_ele_ref(args)
142
- chain_method(:doubleTap, args) # doubleTap is what the appium server expects
143
- end
144
-
145
- # Two finger tap an element on the screen
146
- #
147
- # @param opts [Hash] Options
148
- # @option opts [WebDriver::Element] :element (Optional) Element to restrict scope too.
149
- # @option opts [integer] :x x co-ordinate to tap
150
- # @option opts [integer] :y y co-ordinate to tap
151
- def two_finger_tap(opts)
152
- args = opts.select { |k, _v| %i(element x y).include? k }
153
- args = args_with_ele_ref(args)
154
- chain_method(:twoFingerTap, args) # twoFingerTap is what the appium server expects
155
- end
156
-
157
- # Pause for a number of milliseconds before the next action
158
- # @param milliseconds [integer] Number of milliseconds to pause for
159
- def wait(milliseconds)
160
- args = { ms: milliseconds }
161
- chain_method(:wait, args)
162
- end
163
-
164
- # Convenience method to perform a swipe.
165
- #
166
- # @param opts [Hash] Options
167
- # @option opts [int] :start_x Where to start swiping, on the x axis. Default 0.
168
- # @option opts [int] :start_y Where to start swiping, on the y axis. Default 0.
169
- # @option opts [int] :end_x Move to the end, on the x axis. Default 0.
170
- # @option opts [int] :end_y Move to the end, on the y axis. Default 0.
171
- # @option opts [int] :duration How long the actual swipe takes to complete in milliseconds. Default 200.
172
- def swipe(opts)
173
- start_x = opts.fetch :start_x, 0
174
- start_y = opts.fetch :start_y, 0
175
- end_x = opts.fetch :end_x, 0
176
- end_y = opts.fetch :end_y, 0
177
-
178
- duration = opts.fetch :duration, 200
179
-
180
- press x: start_x, y: start_y
181
- wait(duration) if duration
182
- move_to x: end_x, y: end_y
183
-
184
- release
185
-
186
- self
187
- end
188
-
189
- # Ask the driver to perform all actions in this action chain.
190
- def perform
191
- @driver.touch_actions @actions
192
- @actions.clear
193
- self
194
- end
195
-
196
- # Does nothing, currently.
197
- def cancel
198
- @actions << { action: cancel }
199
- @driver.touch_actions @actions
200
- self
201
- end
202
-
203
- private
204
-
205
- def chain_method(method, args = nil)
206
- action = args ? { action: method, options: args } : { action: method }
207
- @actions << action
208
- self
209
- end
210
-
211
- def args_with_ele_ref(args)
212
- args[:element] = args[:element].id if args.key? :element
213
- args
214
- end
215
- end # class TouchAction
216
- end # module Core
217
- end # module Appium
@@ -1,38 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
-
15
- module Appium
16
- module Core
17
- module Windows
18
- module Device
19
- module AppManagement
20
- # override
21
- def self.add_methods
22
- ::Appium::Core::Device.add_endpoint_method(:launch_app) do
23
- def launch_app
24
- execute :launch_app
25
- end
26
- end
27
-
28
- ::Appium::Core::Device.add_endpoint_method(:close_app) do
29
- def close_app
30
- execute :close_app
31
- end
32
- end
33
- end
34
- end # module AppManagement
35
- end # module Device
36
- end # module Windows
37
- end # module Core
38
- end # module Appium