appium_lib_core 3.7.0 → 3.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -1
- data/CHANGELOG.md +11 -0
- data/lib/appium_lib_core/android/device.rb +6 -1
- data/lib/appium_lib_core/android/device/screen.rb +5 -4
- data/lib/appium_lib_core/common/base/http_default.rb +3 -8
- data/lib/appium_lib_core/common/device/screen_record.rb +9 -3
- data/lib/appium_lib_core/driver.rb +24 -10
- data/lib/appium_lib_core/ios/xcuitest/device.rb +6 -1
- data/lib/appium_lib_core/ios/xcuitest/device/performance.rb +4 -2
- data/lib/appium_lib_core/ios/xcuitest/device/screen.rb +7 -6
- data/lib/appium_lib_core/version.rb +2 -2
- data/lib/appium_lib_core/windows/device/screen.rb +0 -2
- data/release_notes.md +12 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b87c76f4273480fb8a37f7e16f739dced62732a86b673c4ae36fed4f38035329
|
4
|
+
data.tar.gz: 421040d807e1d4cd33b12d0a42ccb7ab905643a9dcd4ccb67706d8386e52b337
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 892368e156ca5145207d9c01bedb55355df22e22d6a653fb0a646b3b357c0677008c8d897bfe5775b725ce89a71b4ae29ec53d93827001b75451a0239a9761c6
|
7
|
+
data.tar.gz: 3736d593e1b450530f269b15c74d9e22730c0ce69a99c40f4df243d87591ba724efa42262b03012cd67f70174e9e621b483f0f0539c228849d080fc68b925af5
|
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -10,6 +10,17 @@ Read `release_notes.md` for commit level details.
|
|
10
10
|
|
11
11
|
### Deprecations
|
12
12
|
|
13
|
+
## [3.8.0] - 2020-05-17
|
14
|
+
|
15
|
+
### Enhancements
|
16
|
+
- Add options for `start_recording_screen`
|
17
|
+
- `file_field_name`, `form_fields` and `headers` are available since Appium 1.18.0
|
18
|
+
|
19
|
+
### Bug fixes
|
20
|
+
- Fix `x-idempotency-key` header to add it only in new session request (https://github.com/appium/ruby_lib_core/issues/262)
|
21
|
+
|
22
|
+
### Deprecations
|
23
|
+
|
13
24
|
## [3.7.0] - 2020-04-18
|
14
25
|
|
15
26
|
### Enhancements
|
@@ -213,7 +213,7 @@ module Appium
|
|
213
213
|
# @driver.get_performance_data package_name: package_name, data_type: data_type, data_read_timeout: 2
|
214
214
|
#
|
215
215
|
|
216
|
-
# @!method start_recording_screen(remote_path: nil, user: nil, pass: nil, method: 'PUT', force_restart: nil, video_size: nil, time_limit: '180', bit_rate: '4000000', bug_report: nil)
|
216
|
+
# @!method start_recording_screen(remote_path: nil, user: nil, pass: nil, method: 'PUT', file_field_name: nil, form_fields: nil, headers: nil, force_restart: nil, video_size: nil, time_limit: '180', bit_rate: '4000000', bug_report: nil)
|
217
217
|
# @param [String] remote_path The path to the remote location, where the resulting video should be uploaded.
|
218
218
|
# The following protocols are supported: http/https, ftp.
|
219
219
|
# Null or empty string value (the default setting) means the content of resulting
|
@@ -225,6 +225,11 @@ module Appium
|
|
225
225
|
# @param [String] user The name of the user for the remote authentication.
|
226
226
|
# @param [String] pass The password for the remote authentication.
|
227
227
|
# @param [String] method The http multipart upload method name. The 'PUT' one is used by default.
|
228
|
+
# @param [String] file_field_name The name of the form field containing the binary payload in multipart/form-data
|
229
|
+
# requests since Appium 1.18.0. Defaults to 'file'.
|
230
|
+
# @param [Array<Hash, Array<String>>] form_fields The form fields mapping in multipart/form-data requests since Appium 1.18.0.
|
231
|
+
# If any entry has the same key in this mapping, then it is going to be ignored.
|
232
|
+
# @param [Hash] headers The additional headers in multipart/form-data requests since Appium 1.18.0.
|
228
233
|
# @param [Boolean] force_restart Whether to try to catch and upload/return the currently running screen recording
|
229
234
|
# (+false+, the default setting on server) or ignore the result of it
|
230
235
|
# and start a new recording immediately (+true+).
|
@@ -25,11 +25,13 @@ module Appium
|
|
25
25
|
end
|
26
26
|
|
27
27
|
::Appium::Core::Device.add_endpoint_method(:start_recording_screen) do
|
28
|
-
|
29
|
-
|
28
|
+
def start_recording_screen(remote_path: nil, user: nil, pass: nil, method: 'PUT',
|
29
|
+
file_field_name: nil, form_fields: nil, headers: nil, force_restart: nil,
|
30
30
|
video_size: nil, time_limit: '180', bit_rate: nil, bug_report: nil)
|
31
31
|
option = ::Appium::Core::Base::Device::ScreenRecord.new(
|
32
|
-
remote_path: remote_path, user: user, pass: pass, method: method,
|
32
|
+
remote_path: remote_path, user: user, pass: pass, method: method,
|
33
|
+
file_field_name: file_field_name, form_fields: form_fields, headers: headers,
|
34
|
+
force_restart: force_restart
|
33
35
|
).upload_option
|
34
36
|
|
35
37
|
option[:videoSize] = video_size unless video_size.nil?
|
@@ -44,7 +46,6 @@ module Appium
|
|
44
46
|
|
45
47
|
execute(:start_recording_screen, {}, { options: option })
|
46
48
|
end
|
47
|
-
# rubocop:enable Metrics/ParameterLists
|
48
49
|
end
|
49
50
|
end
|
50
51
|
end # module Screen
|
@@ -34,17 +34,12 @@ module Appium
|
|
34
34
|
"appium/ruby_lib_core/#{VERSION} (#{::Selenium::WebDriver::Remote::Http::Common::DEFAULT_HEADERS['User-Agent']})"
|
35
35
|
}.freeze
|
36
36
|
|
37
|
-
|
37
|
+
attr_reader :additional_headers
|
38
38
|
|
39
|
-
def initialize(open_timeout: nil, read_timeout: nil
|
39
|
+
def initialize(open_timeout: nil, read_timeout: nil)
|
40
40
|
@open_timeout = open_timeout
|
41
41
|
@read_timeout = read_timeout
|
42
|
-
|
43
|
-
@additional_headers = if enable_idempotency_header
|
44
|
-
{ RequestHeaders::KEYS[:idempotency] => SecureRandom.uuid }
|
45
|
-
else
|
46
|
-
{}
|
47
|
-
end
|
42
|
+
@additional_headers = {}
|
48
43
|
end
|
49
44
|
|
50
45
|
# Update <code>server_url</code> provided when ruby_lib _core created a default http client.
|
@@ -25,7 +25,8 @@ module Appium
|
|
25
25
|
|
26
26
|
METHOD = %w(POST PUT).freeze
|
27
27
|
|
28
|
-
def initialize(remote_path: nil, user: nil, pass: nil, method: 'PUT',
|
28
|
+
def initialize(remote_path: nil, user: nil, pass: nil, method: 'PUT',
|
29
|
+
file_field_name: nil, form_fields: nil, headers: nil, force_restart: nil)
|
29
30
|
@upload_option = if remote_path.nil?
|
30
31
|
{}
|
31
32
|
else
|
@@ -36,6 +37,9 @@ module Appium
|
|
36
37
|
option[:user] = user unless user.nil?
|
37
38
|
option[:pass] = pass unless pass.nil?
|
38
39
|
option[:method] = method
|
40
|
+
option[:fileFieldName] = file_field_name unless file_field_name.nil?
|
41
|
+
option[:formFields] = form_fields unless form_fields.nil?
|
42
|
+
option[:headers] = headers unless headers.nil?
|
39
43
|
option
|
40
44
|
end
|
41
45
|
|
@@ -47,9 +51,11 @@ module Appium
|
|
47
51
|
end
|
48
52
|
|
49
53
|
module Command
|
50
|
-
def stop_recording_screen(remote_path: nil, user: nil, pass: nil, method: 'PUT'
|
54
|
+
def stop_recording_screen(remote_path: nil, user: nil, pass: nil, method: 'PUT',
|
55
|
+
file_field_name: nil, form_fields: nil, headers: nil)
|
51
56
|
option = ::Appium::Core::Base::Device::ScreenRecord.new(
|
52
|
-
remote_path: remote_path, user: user, pass: pass, method: method
|
57
|
+
remote_path: remote_path, user: user, pass: pass, method: method,
|
58
|
+
file_field_name: file_field_name, form_fields: form_fields, headers: headers
|
53
59
|
).upload_option
|
54
60
|
|
55
61
|
params = option.empty? ? {} : { options: option }
|
@@ -105,7 +105,8 @@ module Appium
|
|
105
105
|
# @return [Appium::Core::Base::Http::Default] the http client
|
106
106
|
attr_reader :http_client
|
107
107
|
|
108
|
-
# Return if adding 'x-idempotency-key' header is each request.
|
108
|
+
# Return if adding 'x-idempotency-key' header is enabled for each new session request.
|
109
|
+
# Following commands should not have the key.
|
109
110
|
# The key is unique for each http client instance. Defaults to <code>true</code>
|
110
111
|
# https://github.com/appium/appium-base-driver/pull/400
|
111
112
|
# @return [Bool]
|
@@ -349,9 +350,17 @@ module Appium
|
|
349
350
|
http_client_ops: { http_client: nil, open_timeout: 999_999, read_timeout: 999_999 })
|
350
351
|
@custom_url ||= server_url || "http://127.0.0.1:#{@port}/wd/hub"
|
351
352
|
|
352
|
-
|
353
|
-
|
354
|
-
|
353
|
+
@http_client = get_http_client http_client: http_client_ops.delete(:http_client),
|
354
|
+
open_timeout: http_client_ops.delete(:open_timeout),
|
355
|
+
read_timeout: http_client_ops.delete(:read_timeout)
|
356
|
+
|
357
|
+
if @enable_idempotency_header
|
358
|
+
if @http_client.instance_variable_defined? :@additional_headers
|
359
|
+
@http_client.additional_headers[Appium::Core::Base::Http::RequestHeaders::KEYS[:idempotency]] = SecureRandom.uuid
|
360
|
+
else
|
361
|
+
::Appium::Logger.warn 'No additional_headers attribute in this http client instance'
|
362
|
+
end
|
363
|
+
end
|
355
364
|
|
356
365
|
begin
|
357
366
|
# included https://github.com/SeleniumHQ/selenium/blob/43f8b3f66e7e01124eff6a5805269ee441f65707/rb/lib/selenium/webdriver/remote/driver.rb#L29
|
@@ -371,6 +380,11 @@ module Appium
|
|
371
380
|
raise "ERROR: Unable to connect to Appium. Is the server running on #{@custom_url}?"
|
372
381
|
end
|
373
382
|
|
383
|
+
if @http_client.instance_variable_defined? :@additional_headers
|
384
|
+
# We only need the key for a new session request. Should remove it for other following commands.
|
385
|
+
@http_client.additional_headers.delete Appium::Core::Base::Http::RequestHeaders::KEYS[:idempotency]
|
386
|
+
end
|
387
|
+
|
374
388
|
# If "automationName" is set only server side, this method set "automationName" attribute into @automation_name.
|
375
389
|
# Since @automation_name is set only client side before start_driver is called.
|
376
390
|
set_automation_name_if_nil
|
@@ -382,14 +396,14 @@ module Appium
|
|
382
396
|
|
383
397
|
private
|
384
398
|
|
385
|
-
def
|
386
|
-
|
387
|
-
enable_idempotency_header: @enable_idempotency_header
|
388
|
-
)
|
399
|
+
def get_http_client(http_client: nil, open_timeout: nil, read_timeout: nil)
|
400
|
+
client = http_client || Appium::Core::Base::Http::Default.new
|
389
401
|
|
390
402
|
# open_timeout and read_timeout are explicit wait.
|
391
|
-
|
392
|
-
|
403
|
+
client.open_timeout = open_timeout if open_timeout
|
404
|
+
client.read_timeout = read_timeout if read_timeout
|
405
|
+
|
406
|
+
client
|
393
407
|
end
|
394
408
|
|
395
409
|
# Ignore setting default wait if the target driver has no implementation
|
@@ -51,7 +51,7 @@ module Appium
|
|
51
51
|
#
|
52
52
|
|
53
53
|
# @since Appium 1.9.1
|
54
|
-
# @!method start_recording_screen(remote_path: nil, user: nil, pass: nil, method: nil, force_restart: nil, video_type: 'mjpeg', video_fps: nil, time_limit: '180', video_quality:
|
54
|
+
# @!method start_recording_screen(remote_path: nil, user: nil, pass: nil, method: 'PUT', file_field_name: nil, form_fields: nil, headers: nil, force_restart: nil, video_type: 'mjpeg', video_fps: nil, time_limit: '180', video_quality: nil, video_scale: nil, video_filters: nil, pixel_format: nil)
|
55
55
|
#
|
56
56
|
# Record the display of devices running iOS Simulator since Xcode 9 or real devices since iOS 11
|
57
57
|
# (ffmpeg utility is required: 'brew install ffmpeg').
|
@@ -68,6 +68,11 @@ module Appium
|
|
68
68
|
# @param [String] user The name of the user for the remote authentication.
|
69
69
|
# @param [String] pass The password for the remote authentication.
|
70
70
|
# @param [String] method The http multipart upload method name. The 'PUT' one is used by default.
|
71
|
+
# @param [String] file_field_name The name of the form field containing the binary payload in multipart/form-data
|
72
|
+
# requests since Appium 1.18.0. Defaults to 'file'.
|
73
|
+
# @param [Array<Hash, Array<String>>] form_fields The form fields mapping in multipart/form-data requests since Appium 1.18.0.
|
74
|
+
# If any entry has the same key in this mapping, then it is going to be ignored.
|
75
|
+
# @param [Hash] headers The additional headers in multipart/form-data requests since Appium 1.18.0.
|
71
76
|
# @param [Boolean] force_restart Whether to try to catch and upload/return the currently running screen recording
|
72
77
|
# (+false+, the default setting on server) or ignore the result of it
|
73
78
|
# and start a new recording immediately (+true+).
|
@@ -32,9 +32,11 @@ module Appium
|
|
32
32
|
|
33
33
|
::Appium::Core::Device.add_endpoint_method(:get_performance_record) do
|
34
34
|
def get_performance_record(save_file_path: './performance', profile_name: 'Activity Monitor',
|
35
|
-
remote_path: nil, user: nil, pass: nil, method: 'PUT'
|
35
|
+
remote_path: nil, user: nil, pass: nil, method: 'PUT',
|
36
|
+
file_field_name: nil, form_fields: nil, headers: nil)
|
36
37
|
option = ::Appium::Core::Base::Device::ScreenRecord.new(
|
37
|
-
remote_path: remote_path, user: user, pass: pass, method: method
|
38
|
+
remote_path: remote_path, user: user, pass: pass, method: method,
|
39
|
+
file_field_name: file_field_name, form_fields: form_fields, headers: headers
|
38
40
|
).upload_option
|
39
41
|
|
40
42
|
option[:profileName] = profile_name
|
@@ -20,18 +20,20 @@ module Appium
|
|
20
20
|
module Screen
|
21
21
|
def self.add_methods
|
22
22
|
::Appium::Core::Device.add_endpoint_method(:start_recording_screen) do
|
23
|
-
|
24
|
-
|
25
|
-
video_type: 'mjpeg', time_limit: '180', video_quality:
|
23
|
+
def start_recording_screen(remote_path: nil, user: nil, pass: nil, method: 'PUT',
|
24
|
+
file_field_name: nil, form_fields: nil, headers: nil, force_restart: nil,
|
25
|
+
video_type: 'mjpeg', time_limit: '180', video_quality: nil,
|
26
26
|
video_fps: nil, video_scale: nil, video_filters: nil, pixel_format: nil)
|
27
27
|
option = ::Appium::Core::Base::Device::ScreenRecord.new(
|
28
|
-
remote_path: remote_path, user: user, pass: pass, method: method,
|
28
|
+
remote_path: remote_path, user: user, pass: pass, method: method,
|
29
|
+
file_field_name: file_field_name, form_fields: form_fields, headers: headers,
|
30
|
+
force_restart: force_restart
|
29
31
|
).upload_option
|
30
32
|
|
31
33
|
option[:videoType] = video_type
|
32
34
|
option[:timeLimit] = time_limit
|
33
|
-
option[:videoQuality] = video_quality
|
34
35
|
|
36
|
+
option[:videoQuality] = video_quality unless video_quality.nil?
|
35
37
|
option[:videoFps] = video_fps unless video_fps.nil?
|
36
38
|
option[:videoScale] = video_scale unless video_scale.nil?
|
37
39
|
option[:videoFilters] = video_filters unless video_filters.nil?
|
@@ -39,7 +41,6 @@ module Appium
|
|
39
41
|
|
40
42
|
execute(:start_recording_screen, {}, { options: option })
|
41
43
|
end
|
42
|
-
# rubocop:enable Metrics/ParameterLists
|
43
44
|
end
|
44
45
|
end
|
45
46
|
end # module Screen
|
@@ -14,7 +14,7 @@
|
|
14
14
|
|
15
15
|
module Appium
|
16
16
|
module Core
|
17
|
-
VERSION = '3.
|
18
|
-
DATE = '2020-
|
17
|
+
VERSION = '3.8.0' unless defined? ::Appium::Core::VERSION
|
18
|
+
DATE = '2020-05-17' unless defined? ::Appium::Core::DATE
|
19
19
|
end
|
20
20
|
end
|
@@ -19,7 +19,6 @@ module Appium
|
|
19
19
|
module Screen
|
20
20
|
def self.add_methods
|
21
21
|
::Appium::Core::Device.add_endpoint_method(:start_recording_screen) do
|
22
|
-
# rubocop:disable Metrics/ParameterLists
|
23
22
|
def start_recording_screen(force_restart: nil, time_limit: nil,
|
24
23
|
fps: nil, preset: nil, video_filter: nil,
|
25
24
|
capture_clicks: nil, capture_cursor: nil, audio_input: nil)
|
@@ -35,7 +34,6 @@ module Appium
|
|
35
34
|
|
36
35
|
execute(:start_recording_screen, {}, { options: option })
|
37
36
|
end
|
38
|
-
# rubocop:enable Metrics/ParameterLists
|
39
37
|
end
|
40
38
|
end
|
41
39
|
end # module Screen
|
data/release_notes.md
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
#### v3.8.0 2020-05-17
|
2
|
+
|
3
|
+
- [8986a54](https://github.com/appium/ruby_lib_core/commit/8986a5400d6a3575b7413f15bb61de09af2ec789) Release 3.8.0
|
4
|
+
- [2379f9a](https://github.com/appium/ruby_lib_core/commit/2379f9a69b43e8c2d2b584ac1e56d3a1aea5e85b) refactor: move idempotency in driver (#264)
|
5
|
+
- [8103619](https://github.com/appium/ruby_lib_core/commit/8103619313328064df516e7094e2c8a6e1e9719c) fix: x-idempotency-key only for a new session (#263)
|
6
|
+
- [971f912](https://github.com/appium/ruby_lib_core/commit/971f912a6b4d8e28896d146939c9e5b86dd4b1e0) feat: Add options for start_recording_screen (#261)
|
7
|
+
- [11f840a](https://github.com/appium/ruby_lib_core/commit/11f840a2945b0376bb3ad762e9b2eefd0aace3b4) ci: add wait
|
8
|
+
- [4931f4e](https://github.com/appium/ruby_lib_core/commit/4931f4e318e94f9253edd649757f5c774c3404a7) ci: tweak flaky case
|
9
|
+
- [cb6ef1a](https://github.com/appium/ruby_lib_core/commit/cb6ef1a74dae7200952630076dd58af6bb9500ec) Merge branch 'master' of github.com:appium/ruby_lib_core
|
10
|
+
- [9117de2](https://github.com/appium/ruby_lib_core/commit/9117de2674f018cfe8e10d9dadc188af846e6be4) ci: relax tests for uia2
|
11
|
+
|
12
|
+
|
1
13
|
#### v3.7.0 2020-04-18
|
2
14
|
|
3
15
|
- [5ffe630](https://github.com/appium/ruby_lib_core/commit/5ffe630e670943c6f6f60c0e331cdab4685e31c7) Release 3.7.0
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: appium_lib_core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.8.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: 2020-
|
11
|
+
date: 2020-05-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: selenium-webdriver
|