appium_lib_core 5.7.0 → 6.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +10 -0
- data/README.md +19 -3
- data/appium_lib_core.gemspec +2 -2
- data/lib/appium_lib_core/common/base/bridge.rb +29 -7
- data/lib/appium_lib_core/common/base/driver.rb +14 -17
- data/lib/appium_lib_core/common/base/search_context.rb +0 -1
- data/lib/appium_lib_core/common/command.rb +4 -0
- data/lib/appium_lib_core/common/device/app_management.rb +6 -0
- data/lib/appium_lib_core/driver.rb +108 -22
- data/lib/appium_lib_core/version.rb +2 -2
- data/lib/appium_lib_core/{ios/uiautomation/bridge.rb → windows/device/app_management.rb} +20 -12
- data/lib/appium_lib_core/windows/device.rb +2 -0
- metadata +9 -12
- data/lib/appium_lib_core/ios/uiautomation/device.rb +0 -44
- data/lib/appium_lib_core/ios/uiautomation/patch.rb +0 -34
- data/lib/appium_lib_core/ios.rb +0 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e147792f868660dca695a4e5bf9c31753f68515f5cd5b5bb66e4150028d7e1b4
|
4
|
+
data.tar.gz: 27b0afff682d0630df7a2e8d1e2ab5bc187b63049dce918b7f4cdc2a7868fd1a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a3711c2f4ad056cc0278d1c7dfc174a6c5ebe87b7f772933f8a8d96dbfd3c9648c9aafc314e0f4e5854f01cd65ae066c7024e6519f4d4678d1c7fc5e48d80eb4
|
7
|
+
data.tar.gz: fb870f142226ee8ceadffd6962d028bd9b557fc8380972c12f138123181a95dc8e8887006365154e00372dbebd0f60a196b6965d6fff81060979519718412b1d
|
data/CHANGELOG.md
CHANGED
@@ -10,6 +10,16 @@ Read `release_notes.md` for commit level details.
|
|
10
10
|
|
11
11
|
### Deprecations
|
12
12
|
|
13
|
+
## [6.0.0] - 2022-12-25
|
14
|
+
- Remove iOS/UiAutomation classes
|
15
|
+
- The version may work for iOS 8. XCUITest driver will be the default behavior for iOS.
|
16
|
+
|
17
|
+
## [5.8.0] - 2022-12-11
|
18
|
+
|
19
|
+
### Enhancements
|
20
|
+
- Add `::Appium::Core::Driver#attach_to` to generate a driver instance which has the given session id.
|
21
|
+
- The primary usage is for debugging to attach to an existing session.
|
22
|
+
|
13
23
|
## [5.7.0] - 2022-12-02
|
14
24
|
|
15
25
|
### Enhancements
|
data/README.md
CHANGED
@@ -32,6 +32,13 @@ $ bundle install
|
|
32
32
|
$ bundle exec parallel_test test/unit/
|
33
33
|
```
|
34
34
|
|
35
|
+
or
|
36
|
+
|
37
|
+
```bash
|
38
|
+
$ bundle install
|
39
|
+
$ bundle exec rake test:unit
|
40
|
+
```
|
41
|
+
|
35
42
|
### Functional Tests
|
36
43
|
Run functional tests which require the Appium server and real device, Simulator/Emulator.
|
37
44
|
|
@@ -104,11 +111,11 @@ $ IGNORE_VERSION_SKIP=true CI=true bundle exec rake test:func:android
|
|
104
111
|
|
105
112
|
opts = {
|
106
113
|
capabilities: { # Append capabilities
|
107
|
-
platformName:
|
114
|
+
platformName: 'ios',
|
108
115
|
platformVersion: '11.0',
|
109
116
|
deviceName: 'iPhone Simulator',
|
110
|
-
|
111
|
-
|
117
|
+
# app: '/path/to/MyiOS.app', # Without 'app' capability, an appium session starts with the home screen
|
118
|
+
automationName: 'XCUITest'
|
112
119
|
},
|
113
120
|
appium_lib: {
|
114
121
|
wait: 30
|
@@ -133,6 +140,15 @@ $ IGNORE_VERSION_SKIP=true CI=true bundle exec rake test:func:android
|
|
133
140
|
|
134
141
|
More examples are in [test/functional](test/functional)
|
135
142
|
|
143
|
+
As of version 5.8.0, the client can attach to an existing session. The main purpose is for debugging.
|
144
|
+
|
145
|
+
```ruby
|
146
|
+
# @driver is the driver instance of an existing session
|
147
|
+
attached_driver = ::Appium::Core::Driver.attach_to @driver.session_id, url: 'http://127.0.0.1:4723/wd/hub', automation_name: 'XCUITest', platform_name: 'ios'
|
148
|
+
assert attached_driver.session_id == @driver.session_id
|
149
|
+
attached_driver.page_source
|
150
|
+
```
|
151
|
+
|
136
152
|
### Capabilities
|
137
153
|
|
138
154
|
Read [Appium/Core/Driver](https://www.rubydoc.info/github/appium/ruby_lib_core/Appium/Core/Driver) to catch up with available capabilities.
|
data/appium_lib_core.gemspec
CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
require 'appium_lib_core/version'
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
|
-
spec.required_ruby_version = '>= 2.7'
|
7
|
+
spec.required_ruby_version = Gem::Requirement.new('>= 2.7')
|
8
8
|
|
9
9
|
spec.name = 'appium_lib_core'
|
10
10
|
spec.version = Appium::Core::VERSION
|
@@ -30,7 +30,7 @@ Gem::Specification.new do |spec|
|
|
30
30
|
spec.add_development_dependency 'minitest', '~> 5.0'
|
31
31
|
spec.add_development_dependency 'minitest-reporters', '~> 1.1'
|
32
32
|
spec.add_development_dependency 'webmock', '~> 3.18.1'
|
33
|
-
spec.add_development_dependency 'rubocop', '1.
|
33
|
+
spec.add_development_dependency 'rubocop', '1.41.1'
|
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'
|
@@ -43,13 +43,39 @@ module Appium
|
|
43
43
|
|
44
44
|
def browser
|
45
45
|
@browser ||= begin
|
46
|
-
name = @capabilities
|
46
|
+
name = @capabilities&.browser_name
|
47
47
|
name ? name.tr(' ', '_').downcase.to_sym : 'unknown'
|
48
48
|
rescue KeyError
|
49
49
|
APPIUM_NATIVE_BROWSER_NAME
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
53
|
+
# Appium only.
|
54
|
+
# Attach to an existing session.
|
55
|
+
#
|
56
|
+
# @param [String] The session id to attach to.
|
57
|
+
# @param [String] platform_name The platform name to keep in the dummy capabilities
|
58
|
+
# @param [String] platform_name The automation name to keep in the dummy capabilities
|
59
|
+
# @return [::Appium::Core::Base::Capabilities]
|
60
|
+
#
|
61
|
+
# @example
|
62
|
+
#
|
63
|
+
# new_driver = ::Appium::Core::Driver.attach_to(
|
64
|
+
# driver.session_id,
|
65
|
+
# url: 'http://127.0.0.1:4723/wd/hub', automation_name: 'UiAutomator2', platform_name: 'Android'
|
66
|
+
# )
|
67
|
+
#
|
68
|
+
def attach_to(session_id, platform_name, automation_name)
|
69
|
+
@available_commands = ::Appium::Core::Commands::COMMANDS.dup
|
70
|
+
@session_id = session_id
|
71
|
+
|
72
|
+
# generate a dummy capabilities instance which only has the given platformName and automationName
|
73
|
+
@capabilities = ::Appium::Core::Base::Capabilities.new(
|
74
|
+
'platformName' => platform_name,
|
75
|
+
'automationName' => automation_name
|
76
|
+
)
|
77
|
+
end
|
78
|
+
|
53
79
|
# Override
|
54
80
|
# Creates session handling.
|
55
81
|
#
|
@@ -185,11 +211,6 @@ module Appium
|
|
185
211
|
::Appium::Core::Base::Capabilities.json_create execute(:get_capabilities)
|
186
212
|
end
|
187
213
|
|
188
|
-
# Override for safe. Newer ruby selenium webdriver already has the same code
|
189
|
-
def page_source
|
190
|
-
execute :get_page_source
|
191
|
-
end
|
192
|
-
|
193
214
|
# For Appium
|
194
215
|
# override
|
195
216
|
def element_displayed?(element)
|
@@ -203,7 +224,8 @@ module Appium
|
|
203
224
|
# override
|
204
225
|
def element_attribute(element, name)
|
205
226
|
# For W3C in Selenium Client
|
206
|
-
# execute_atom :getAttribute, element, name
|
227
|
+
# execute_atom :getAttribute, element, name.
|
228
|
+
# 'dom_attribute' in the WebDriver Selenium.
|
207
229
|
execute :get_element_attribute, id: element.id, name: name
|
208
230
|
end
|
209
231
|
|
@@ -51,10 +51,6 @@ module Appium
|
|
51
51
|
@wait_timeout = opts.delete(:wait_timeout)
|
52
52
|
@wait_interval = opts.delete(:wait_interval)
|
53
53
|
|
54
|
-
# For logging.
|
55
|
-
# TODO: Remove when appium core no longer uses this in this bridge.
|
56
|
-
@automation_name = opts.delete(:automation_name)
|
57
|
-
|
58
54
|
super
|
59
55
|
end
|
60
56
|
|
@@ -63,13 +59,26 @@ module Appium
|
|
63
59
|
# @return [::Appium::Core::Base::Bridge]
|
64
60
|
#
|
65
61
|
def create_bridge(**opts)
|
62
|
+
# for a new session request
|
66
63
|
capabilities = opts.delete(:capabilities)
|
67
64
|
bridge_opts = { http_client: opts.delete(:http_client), url: opts.delete(:url) }
|
65
|
+
|
66
|
+
# for attaching to an existing session
|
67
|
+
session_id = opts.delete(:existing_session_id)
|
68
|
+
automation_name = opts.delete(:automation_name)
|
69
|
+
platform_name = opts.delete(:platform_name)
|
70
|
+
|
68
71
|
raise ::Appium::Core::Error::ArgumentError, "Unable to create a driver with parameters: #{opts}" unless opts.empty?
|
69
72
|
|
70
73
|
bridge = ::Appium::Core::Base::Bridge.new(**bridge_opts)
|
71
74
|
|
72
|
-
|
75
|
+
if session_id.nil?
|
76
|
+
bridge.create_session(capabilities)
|
77
|
+
else
|
78
|
+
# attach to the existing session id
|
79
|
+
bridge.attach_to(session_id, platform_name, automation_name)
|
80
|
+
end
|
81
|
+
|
73
82
|
bridge
|
74
83
|
end
|
75
84
|
|
@@ -566,12 +575,6 @@ module Appium
|
|
566
575
|
# @driver.launch_app
|
567
576
|
#
|
568
577
|
def launch_app
|
569
|
-
# TODO: Define only in Windows module when ruby_lib_core removes this method
|
570
|
-
if @automation_name != :windows
|
571
|
-
::Appium::Logger.warn(
|
572
|
-
'[DEPRECATION] launch_app is deprecated. Please use activate_app instead.'
|
573
|
-
)
|
574
|
-
end
|
575
578
|
@bridge.launch_app
|
576
579
|
end
|
577
580
|
|
@@ -583,12 +586,6 @@ module Appium
|
|
583
586
|
# @driver.close_app
|
584
587
|
#
|
585
588
|
def close_app
|
586
|
-
# TODO: Define only in Windows module when ruby_lib_core removes this method
|
587
|
-
if @automation_name != :windows
|
588
|
-
::Appium::Logger.warn(
|
589
|
-
'[DEPRECATION] close_app is deprecated. Please use terminate_app instead.'
|
590
|
-
)
|
591
|
-
end
|
592
589
|
@bridge.close_app
|
593
590
|
end
|
594
591
|
|
@@ -28,7 +28,6 @@ module Appium
|
|
28
28
|
data_matcher: '-android datamatcher', # Available in Espresso
|
29
29
|
view_matcher: '-android viewmatcher', # Available in Espresso
|
30
30
|
# iOS
|
31
|
-
uiautomation: '-ios uiautomation',
|
32
31
|
predicate: '-ios predicate string',
|
33
32
|
class_chain: '-ios class chain',
|
34
33
|
# Windows with windows prefix
|
@@ -70,11 +70,15 @@ module Appium
|
|
70
70
|
find_elements: [:post, 'session/:session_id/elements'],
|
71
71
|
find_child_element: [:post, 'session/:session_id/element/:id/element'],
|
72
72
|
find_child_elements: [:post, 'session/:session_id/element/:id/elements'],
|
73
|
+
find_shadow_child_element: [:post, 'session/:session_id/shadow/:id/element'],
|
74
|
+
find_shadow_child_elements: [:post, 'session/:session_id/shadow/:id/elements'],
|
73
75
|
get_active_element: [:get, 'session/:session_id/element/active'],
|
74
76
|
is_element_selected: [:get, 'session/:session_id/element/:id/selected'],
|
75
77
|
get_element_attribute: [:get, 'session/:session_id/element/:id/attribute/:name'],
|
76
78
|
get_element_property: [:get, 'session/:session_id/element/:id/property/:name'],
|
77
79
|
get_element_css_value: [:get, 'session/:session_id/element/:id/css/:property_name'],
|
80
|
+
get_element_aria_role: [:get, 'session/:session_id/element/:id/computedrole'],
|
81
|
+
get_element_aria_label: [:get, 'session/:session_id/element/:id/computedlabel'],
|
78
82
|
get_element_text: [:get, 'session/:session_id/element/:id/text'],
|
79
83
|
get_element_tag_name: [:get, 'session/:session_id/element/:id/name'],
|
80
84
|
get_element_rect: [:get, 'session/:session_id/element/:id/rect'],
|
@@ -18,10 +18,16 @@ module Appium
|
|
18
18
|
module Device
|
19
19
|
module AppManagement
|
20
20
|
def launch_app
|
21
|
+
::Appium::Logger.warn(
|
22
|
+
'[DEPRECATION] launch_app is deprecated. Please use activate_app instead.'
|
23
|
+
)
|
21
24
|
execute :launch_app
|
22
25
|
end
|
23
26
|
|
24
27
|
def close_app
|
28
|
+
::Appium::Logger.warn(
|
29
|
+
'[DEPRECATION] close_app is deprecated. Please use terminate_app instead.'
|
30
|
+
)
|
25
31
|
execute :close_app
|
26
32
|
end
|
27
33
|
|
@@ -23,7 +23,6 @@ module Appium
|
|
23
23
|
end
|
24
24
|
|
25
25
|
module Ios
|
26
|
-
autoload :Uiautomation, 'appium_lib_core/ios'
|
27
26
|
autoload :Xcuitest, 'appium_lib_core/ios_xcuitest'
|
28
27
|
end
|
29
28
|
|
@@ -275,7 +274,40 @@ module Appium
|
|
275
274
|
# @core.start_driver # start driver with 'url'. Connect to 'http://custom-host:8080/wd/hub.com'
|
276
275
|
#
|
277
276
|
def self.for(opts = {})
|
278
|
-
new(opts)
|
277
|
+
new.setup_for_new_session(opts)
|
278
|
+
end
|
279
|
+
|
280
|
+
# Attach to an existing session. The main usage of this method is to attach to
|
281
|
+
# an existing session for debugging. The generated driver instance has the capabilities which
|
282
|
+
# has the given automationName and platformName only since the W3C WebDriver spec does not provide
|
283
|
+
# an endpoint to get running session's capabilities.
|
284
|
+
#
|
285
|
+
#
|
286
|
+
# @param [String] The session id to attach to.
|
287
|
+
# @param [String] url The WebDriver URL to attach to with the session_id.
|
288
|
+
# @param [String] automation_name The platform name to keep in the dummy capabilities
|
289
|
+
# @param [String] platform_name The automation name to keep in the dummy capabilities
|
290
|
+
# @return [Selenium::WebDriver] A new driver instance with the given session id.
|
291
|
+
#
|
292
|
+
# @example
|
293
|
+
#
|
294
|
+
# new_driver = ::Appium::Core::Driver.attach_to(
|
295
|
+
# driver.session_id, # The 'driver' has an existing session id
|
296
|
+
# url: 'http://127.0.0.1:4723/wd/hub', automation_name: 'UiAutomator2', platform_name: 'Android'
|
297
|
+
# )
|
298
|
+
# new_driver.page_source # for example
|
299
|
+
#
|
300
|
+
def self.attach_to(
|
301
|
+
session_id, url: nil, automation_name: nil, platform_name: nil,
|
302
|
+
http_client_ops: { http_client: nil, open_timeout: 999_999, read_timeout: 999_999 }
|
303
|
+
)
|
304
|
+
new.attach_to(
|
305
|
+
session_id,
|
306
|
+
automation_name: automation_name,
|
307
|
+
platform_name: platform_name,
|
308
|
+
url: url,
|
309
|
+
http_client_ops: http_client_ops
|
310
|
+
)
|
279
311
|
end
|
280
312
|
|
281
313
|
private
|
@@ -286,12 +318,18 @@ module Appium
|
|
286
318
|
@delegate_target
|
287
319
|
end
|
288
320
|
|
289
|
-
public
|
290
|
-
|
291
321
|
# @private
|
292
|
-
def initialize
|
322
|
+
def initialize
|
293
323
|
@delegate_target = self # for testing purpose
|
294
324
|
@automation_name = nil # initialise before 'set_automation_name'
|
325
|
+
end
|
326
|
+
|
327
|
+
public
|
328
|
+
|
329
|
+
# @private
|
330
|
+
# Set up for a new session
|
331
|
+
def setup_for_new_session(opts = {})
|
332
|
+
@custom_url = opts.delete :url # to set the custom url as :url
|
295
333
|
|
296
334
|
# TODO: Remove when we implement Options
|
297
335
|
# The symbolize_keys is to keep compatiility for the legacy code, which allows capabilities to give 'string' as the key.
|
@@ -299,7 +337,6 @@ module Appium
|
|
299
337
|
# FIXME: First, please try to remove `nested: true` to `nested: false`.
|
300
338
|
opts = Appium.symbolize_keys(opts, nested: true)
|
301
339
|
|
302
|
-
@custom_url = opts.delete :url
|
303
340
|
@caps = get_caps(opts)
|
304
341
|
|
305
342
|
set_appium_lib_specific_values(get_appium_lib_opts(opts))
|
@@ -308,8 +345,7 @@ module Appium
|
|
308
345
|
set_automation_name
|
309
346
|
|
310
347
|
extend_for(device: @device, automation_name: @automation_name)
|
311
|
-
|
312
|
-
self # rubocop:disable Lint/Void
|
348
|
+
self
|
313
349
|
end
|
314
350
|
|
315
351
|
# Creates a new global driver and quits the old one if it exists.
|
@@ -320,7 +356,7 @@ module Appium
|
|
320
356
|
# @option http_client_ops [Hash] :http_client Custom HTTP Client
|
321
357
|
# @option http_client_ops [Hash] :open_timeout Custom open timeout for http client.
|
322
358
|
# @option http_client_ops [Hash] :read_timeout Custom read timeout for http client.
|
323
|
-
# @return [Selenium::WebDriver]
|
359
|
+
# @return [Selenium::WebDriver] A new driver instance
|
324
360
|
#
|
325
361
|
# @example
|
326
362
|
#
|
@@ -377,8 +413,7 @@ module Appium
|
|
377
413
|
capabilities: @caps, # ::Appium::Core::Base::Capabilities
|
378
414
|
url: @custom_url,
|
379
415
|
wait_timeout: @wait_timeout,
|
380
|
-
wait_interval: @wait_interval
|
381
|
-
automation_name: @automation_name)
|
416
|
+
wait_interval: @wait_interval)
|
382
417
|
|
383
418
|
if @direct_connect
|
384
419
|
d_c = DirectConnections.new(@driver.capabilities)
|
@@ -396,6 +431,8 @@ module Appium
|
|
396
431
|
@http_client.additional_headers.delete Appium::Core::Base::Http::RequestHeaders::KEYS[:idempotency]
|
397
432
|
end
|
398
433
|
|
434
|
+
# TODO: this method can be removed after releasing Appium 2.0, and after a while
|
435
|
+
# since Appium 2.0 reuqires 'automationName'. This method won't help anymore then.
|
399
436
|
# If "automationName" is set only server side, this method set "automationName" attribute into @automation_name.
|
400
437
|
# Since @automation_name is set only client side before start_driver is called.
|
401
438
|
set_automation_name_if_nil
|
@@ -405,7 +442,47 @@ module Appium
|
|
405
442
|
@driver
|
406
443
|
end
|
407
444
|
|
408
|
-
private
|
445
|
+
# @private
|
446
|
+
# Attach to an existing session
|
447
|
+
def attach_to(session_id, url: nil, automation_name: nil, platform_name: nil,
|
448
|
+
http_client_ops: { http_client: nil, open_timeout: 999_999, read_timeout: 999_999 })
|
449
|
+
|
450
|
+
raise ::Appium::Core::Error::ArgumentError, 'The :url must not be nil' if url.nil?
|
451
|
+
raise ::Appium::Core::Error::ArgumentError, 'The :automation_name must not be nil' if automation_name.nil?
|
452
|
+
raise ::Appium::Core::Error::ArgumentError, 'The :platform_name must not be nil' if platform_name.nil?
|
453
|
+
|
454
|
+
@custom_url = url
|
455
|
+
|
456
|
+
# use lowercase internally
|
457
|
+
@automation_name = convert_downcase(automation_name)
|
458
|
+
@device = convert_downcase(platform_name)
|
459
|
+
|
460
|
+
extend_for(device: @device, automation_name: @automation_name)
|
461
|
+
|
462
|
+
@http_client = get_http_client http_client: http_client_ops.delete(:http_client),
|
463
|
+
open_timeout: http_client_ops.delete(:open_timeout),
|
464
|
+
read_timeout: http_client_ops.delete(:read_timeout)
|
465
|
+
|
466
|
+
# Note that 'enable_idempotency_header' works only a new session reqeust. The attach_to method skips
|
467
|
+
# the new session request, this it does not needed.
|
468
|
+
|
469
|
+
begin
|
470
|
+
# included https://github.com/SeleniumHQ/selenium/blob/43f8b3f66e7e01124eff6a5805269ee441f65707/rb/lib/selenium/webdriver/remote/driver.rb#L29
|
471
|
+
@driver = ::Appium::Core::Base::Driver.new(http_client: @http_client,
|
472
|
+
url: @custom_url,
|
473
|
+
listener: @listener,
|
474
|
+
existing_session_id: session_id,
|
475
|
+
automation_name: automation_name,
|
476
|
+
platform_name: platform_name)
|
477
|
+
|
478
|
+
# export session
|
479
|
+
write_session_id(@driver.session_id, @export_session_path) if @export_session
|
480
|
+
rescue Errno::ECONNREFUSED
|
481
|
+
raise "ERROR: Unable to connect to Appium. Is the server running on #{@custom_url}?"
|
482
|
+
end
|
483
|
+
|
484
|
+
@driver
|
485
|
+
end
|
409
486
|
|
410
487
|
def get_http_client(http_client: nil, open_timeout: nil, read_timeout: nil)
|
411
488
|
client = http_client || Appium::Core::Base::Http::Default.new
|
@@ -431,9 +508,7 @@ module Appium
|
|
431
508
|
{}
|
432
509
|
end
|
433
510
|
|
434
|
-
|
435
|
-
|
436
|
-
# Quits the driver
|
511
|
+
# [Deprecated] Quits the driver. This method is the same as @driver.quit
|
437
512
|
# @return [void]
|
438
513
|
#
|
439
514
|
# @example
|
@@ -441,6 +516,7 @@ module Appium
|
|
441
516
|
# @core.quit_driver
|
442
517
|
#
|
443
518
|
def quit_driver
|
519
|
+
::Appium::Logger.warn('[DEPRECATION] quit_driver will be removed. Please use @driver.quit instead.')
|
444
520
|
@driver.quit
|
445
521
|
rescue # rubocop:disable Style/RescueStandardError
|
446
522
|
nil
|
@@ -486,6 +562,11 @@ module Appium
|
|
486
562
|
# @core.platform_version #=> [10,1,1]
|
487
563
|
#
|
488
564
|
def platform_version
|
565
|
+
::Appium::Logger.warn(
|
566
|
+
'[DEPRECATION] platform_version method will be. ' \
|
567
|
+
'Please check the platformVersion via @driver.capabilities["platformVersion"] instead.'
|
568
|
+
)
|
569
|
+
|
489
570
|
p_version = @driver.capabilities['platformVersion'] || @driver.session_capabilities['platformVersion']
|
490
571
|
p_version.split('.').map(&:to_i)
|
491
572
|
end
|
@@ -523,10 +604,8 @@ module Appium
|
|
523
604
|
case sym_automation_name
|
524
605
|
when :safari
|
525
606
|
::Appium::Logger.debug('SafariDriver for iOS')
|
526
|
-
|
607
|
+
else # XCUITest
|
527
608
|
::Appium::Core::Ios::Xcuitest::Bridge.for self
|
528
|
-
else # default and UIAutomation
|
529
|
-
::Appium::Core::Ios::Uiautomation::Bridge.for self
|
530
609
|
end
|
531
610
|
when :mac
|
532
611
|
case sym_automation_name
|
@@ -626,7 +705,7 @@ module Appium
|
|
626
705
|
@device = @caps[:platformName] || @caps['platformName']
|
627
706
|
return @device unless @device
|
628
707
|
|
629
|
-
@device =
|
708
|
+
@device = convert_downcase @device
|
630
709
|
end
|
631
710
|
|
632
711
|
# @private
|
@@ -634,9 +713,12 @@ module Appium
|
|
634
713
|
# TODO: check if the Appium.symbolize_keys(opts, nested: false) enoug with this
|
635
714
|
candidate = @caps[:automationName] || @caps['automationName']
|
636
715
|
@automation_name = candidate if candidate
|
637
|
-
@automation_name = if @automation_name
|
638
|
-
|
639
|
-
|
716
|
+
@automation_name = convert_downcase @automation_name if @automation_name
|
717
|
+
end
|
718
|
+
|
719
|
+
# @private
|
720
|
+
def convert_downcase(value)
|
721
|
+
value.is_a?(Symbol) ? value.downcase : value.downcase.strip.intern
|
640
722
|
end
|
641
723
|
|
642
724
|
# @private
|
@@ -650,6 +732,10 @@ module Appium
|
|
650
732
|
|
651
733
|
# @private
|
652
734
|
def write_session_id(session_id, export_path = '/tmp/appium_lib_session')
|
735
|
+
::Appium::Logger.warn(
|
736
|
+
'[DEPRECATION] export_session option will be removed. ' \
|
737
|
+
'Please save the session id by yourself with #session_id method like @driver.session_id.'
|
738
|
+
)
|
653
739
|
export_path = export_path.tr('/', '\\') if ::Appium::Core::Base.platform.windows?
|
654
740
|
File.write(export_path, session_id)
|
655
741
|
rescue IOError => e
|
@@ -14,7 +14,7 @@
|
|
14
14
|
|
15
15
|
module Appium
|
16
16
|
module Core
|
17
|
-
VERSION = '
|
18
|
-
DATE = '2022-12-
|
17
|
+
VERSION = '6.0.0' unless defined? ::Appium::Core::VERSION
|
18
|
+
DATE = '2022-12-25' unless defined? ::Appium::Core::DATE
|
19
19
|
end
|
20
20
|
end
|
@@ -14,17 +14,25 @@
|
|
14
14
|
|
15
15
|
module Appium
|
16
16
|
module Core
|
17
|
-
module
|
18
|
-
module
|
19
|
-
module
|
20
|
-
|
21
|
-
|
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
|
22
27
|
|
23
|
-
Core::
|
24
|
-
|
28
|
+
::Appium::Core::Device.add_endpoint_method(:close_app) do
|
29
|
+
def close_app
|
30
|
+
execute :close_app
|
31
|
+
end
|
32
|
+
end
|
25
33
|
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
34
|
+
end # module AppManagement
|
35
|
+
end # module Device
|
36
|
+
end # module Windows
|
37
|
+
end # module Core
|
38
|
+
end # module Appium
|
@@ -13,6 +13,7 @@
|
|
13
13
|
# limitations under the License.
|
14
14
|
|
15
15
|
require_relative 'device/screen'
|
16
|
+
require_relative 'device/app_management'
|
16
17
|
|
17
18
|
module Appium
|
18
19
|
module Core
|
@@ -78,6 +79,7 @@ module Appium
|
|
78
79
|
class << self
|
79
80
|
def extended(_mod)
|
80
81
|
Screen.add_methods
|
82
|
+
AppManagement.add_methods
|
81
83
|
end
|
82
84
|
end # class << self
|
83
85
|
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:
|
4
|
+
version: 6.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kazuaki MATSUO
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-12-
|
11
|
+
date: 2022-12-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: selenium-webdriver
|
@@ -120,14 +120,14 @@ dependencies:
|
|
120
120
|
requirements:
|
121
121
|
- - '='
|
122
122
|
- !ruby/object:Gem::Version
|
123
|
-
version: 1.
|
123
|
+
version: 1.41.1
|
124
124
|
type: :development
|
125
125
|
prerelease: false
|
126
126
|
version_requirements: !ruby/object:Gem::Requirement
|
127
127
|
requirements:
|
128
128
|
- - '='
|
129
129
|
- !ruby/object:Gem::Version
|
130
|
-
version: 1.
|
130
|
+
version: 1.41.1
|
131
131
|
- !ruby/object:Gem::Dependency
|
132
132
|
name: appium_thor
|
133
133
|
requirement: !ruby/object:Gem::Requirement
|
@@ -247,12 +247,8 @@ files:
|
|
247
247
|
- lib/appium_lib_core/device.rb
|
248
248
|
- lib/appium_lib_core/driver.rb
|
249
249
|
- lib/appium_lib_core/element.rb
|
250
|
-
- lib/appium_lib_core/ios.rb
|
251
250
|
- lib/appium_lib_core/ios/device.rb
|
252
251
|
- lib/appium_lib_core/ios/device/clipboard.rb
|
253
|
-
- lib/appium_lib_core/ios/uiautomation/bridge.rb
|
254
|
-
- lib/appium_lib_core/ios/uiautomation/device.rb
|
255
|
-
- lib/appium_lib_core/ios/uiautomation/patch.rb
|
256
252
|
- lib/appium_lib_core/ios/xcuitest/bridge.rb
|
257
253
|
- lib/appium_lib_core/ios/xcuitest/device.rb
|
258
254
|
- lib/appium_lib_core/ios/xcuitest/device/battery.rb
|
@@ -267,12 +263,13 @@ files:
|
|
267
263
|
- lib/appium_lib_core/windows.rb
|
268
264
|
- lib/appium_lib_core/windows/bridge.rb
|
269
265
|
- lib/appium_lib_core/windows/device.rb
|
266
|
+
- lib/appium_lib_core/windows/device/app_management.rb
|
270
267
|
- lib/appium_lib_core/windows/device/screen.rb
|
271
268
|
homepage: https://github.com/appium/ruby_lib_core/
|
272
269
|
licenses:
|
273
270
|
- Apache-2.0
|
274
271
|
metadata: {}
|
275
|
-
post_install_message:
|
272
|
+
post_install_message:
|
276
273
|
rdoc_options: []
|
277
274
|
require_paths:
|
278
275
|
- lib
|
@@ -287,8 +284,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
287
284
|
- !ruby/object:Gem::Version
|
288
285
|
version: '0'
|
289
286
|
requirements: []
|
290
|
-
rubygems_version: 3.
|
291
|
-
signing_key:
|
287
|
+
rubygems_version: 3.2.14
|
288
|
+
signing_key:
|
292
289
|
specification_version: 4
|
293
290
|
summary: Minimal Ruby library for Appium.
|
294
291
|
test_files: []
|
@@ -1,44 +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 Ios
|
18
|
-
module Uiautomation
|
19
|
-
module Device
|
20
|
-
def self.add_methods
|
21
|
-
# UiAutomation, Override included method in bridge
|
22
|
-
::Appium::Core::Device.add_endpoint_method(:hide_keyboard) do
|
23
|
-
def hide_keyboard(close_key = nil, strategy = nil)
|
24
|
-
option = {}
|
25
|
-
|
26
|
-
option[:key] = close_key || 'Done' # default to Done key.
|
27
|
-
option[:strategy] = strategy || :pressKey # default to pressKey
|
28
|
-
|
29
|
-
execute :hide_keyboard, {}, option
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
# UiAutomation, Override included method in bridge
|
34
|
-
::Appium::Core::Device.add_endpoint_method(:background_app) do
|
35
|
-
def background_app(duration = 0)
|
36
|
-
execute :background_app, {}, seconds: duration
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end # module Device
|
41
|
-
end # module Uiautomation
|
42
|
-
end # module Ios
|
43
|
-
end # module Core
|
44
|
-
end # module Appium
|
@@ -1,34 +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 Ios
|
18
|
-
module Uiautomation
|
19
|
-
# @private
|
20
|
-
# class_eval inside a method because class Selenium::WebDriver::Element
|
21
|
-
# will trigger as soon as the file is required. in contrast a method
|
22
|
-
# will trigger only when invoked.
|
23
|
-
def self.patch_webdriver_element
|
24
|
-
::Appium::Core::Element.class_eval do
|
25
|
-
# Cross platform way of entering text into a textfield
|
26
|
-
def type(text, driver)
|
27
|
-
driver.execute_script %(au.getElement('#{ref}').setValue('#{text}');)
|
28
|
-
end # def type
|
29
|
-
end # Selenium::WebDriver::Element.class_eval
|
30
|
-
end # def patch_webdriver_element
|
31
|
-
end # module Uiautomation
|
32
|
-
end # module Ios
|
33
|
-
end # module Core
|
34
|
-
end # module Appium
|
data/lib/appium_lib_core/ios.rb
DELETED
@@ -1,20 +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
|
-
# loaded in common/driver.rb
|
16
|
-
require_relative 'ios/device'
|
17
|
-
|
18
|
-
require_relative 'ios/uiautomation/patch'
|
19
|
-
require_relative 'ios/uiautomation/device'
|
20
|
-
require_relative 'ios/uiautomation/bridge'
|