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