appium_lib_core 1.6.0 → 1.7.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/.rubocop.yml +2 -2
- data/CHANGELOG.md +16 -0
- data/lib/appium_lib_core/android/device.rb +301 -406
- data/lib/appium_lib_core/android/device/clipboard.rb +42 -0
- data/lib/appium_lib_core/android/device/emulator.rb +149 -147
- data/lib/appium_lib_core/android/device/network.rb +47 -0
- data/lib/appium_lib_core/android/device/performance.rb +24 -0
- data/lib/appium_lib_core/android/device/screen.rb +39 -0
- data/lib/appium_lib_core/android/espresso/bridge.rb +1 -1
- data/lib/appium_lib_core/android/uiautomator1/bridge.rb +1 -1
- data/lib/appium_lib_core/android/uiautomator2/bridge.rb +1 -1
- data/lib/appium_lib_core/android/uiautomator2/device.rb +3 -14
- data/lib/appium_lib_core/android/uiautomator2/device/battery.rb +28 -0
- data/lib/appium_lib_core/common/base/http_default.rb +5 -1
- data/lib/appium_lib_core/device.rb +50 -370
- data/lib/appium_lib_core/device/app_management.rb +113 -0
- data/lib/appium_lib_core/device/app_state.rb +18 -1
- data/lib/appium_lib_core/device/context.rb +48 -0
- data/lib/appium_lib_core/device/device_lock.rb +28 -0
- data/lib/appium_lib_core/device/file_management.rb +32 -0
- data/lib/appium_lib_core/device/image_comparison.rb +1 -3
- data/lib/appium_lib_core/device/ime_actions.rb +43 -0
- data/lib/appium_lib_core/device/keyboard.rb +26 -0
- data/lib/appium_lib_core/device/keyevent.rb +44 -0
- data/lib/appium_lib_core/device/screen_record.rb +21 -0
- data/lib/appium_lib_core/device/setting.rb +21 -0
- data/lib/appium_lib_core/device/touch_actions.rb +22 -0
- data/lib/appium_lib_core/device/value.rb +23 -0
- data/lib/appium_lib_core/driver.rb +8 -0
- data/lib/appium_lib_core/ios/device.rb +70 -101
- data/lib/appium_lib_core/ios/device/clipboard.rb +41 -0
- data/lib/appium_lib_core/ios/uiautomation/bridge.rb +1 -1
- data/lib/appium_lib_core/ios/xcuitest/bridge.rb +2 -2
- data/lib/appium_lib_core/ios/xcuitest/device.rb +166 -227
- data/lib/appium_lib_core/ios/xcuitest/device/battery.rb +28 -0
- data/lib/appium_lib_core/ios/xcuitest/device/performance.rb +40 -0
- data/lib/appium_lib_core/ios/xcuitest/device/screen.rb +30 -0
- data/lib/appium_lib_core/version.rb +2 -2
- data/release_notes.md +12 -0
- metadata +21 -2
@@ -0,0 +1,113 @@
|
|
1
|
+
module Appium
|
2
|
+
module Core
|
3
|
+
module Device
|
4
|
+
module AppManagement
|
5
|
+
def self.add_methods # rubocop:disable Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
|
6
|
+
::Appium::Core::Device.add_endpoint_method(:launch_app) do
|
7
|
+
def launch_app
|
8
|
+
execute :launch_app
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
::Appium::Core::Device.add_endpoint_method(:close_app) do
|
13
|
+
def close_app
|
14
|
+
execute :close_app
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
::Appium::Core::Device.add_endpoint_method(:close_app) do
|
19
|
+
def close_app
|
20
|
+
execute :close_app
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
::Appium::Core::Device.add_endpoint_method(:reset) do
|
25
|
+
def reset
|
26
|
+
execute :reset
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
::Appium::Core::Device.add_endpoint_method(:app_strings) do
|
31
|
+
def app_strings(language = nil)
|
32
|
+
opts = language ? { language: language } : {}
|
33
|
+
execute :app_strings, {}, opts
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
::Appium::Core::Device.add_endpoint_method(:background_app) do
|
38
|
+
def background_app(duration = 0)
|
39
|
+
execute :background_app, {}, seconds: duration
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
::Appium::Core::Device.add_endpoint_method(:install_app) do
|
44
|
+
def install_app(path, # rubocop:disable Metrics/ParameterLists
|
45
|
+
replace: nil,
|
46
|
+
timeout: nil,
|
47
|
+
allow_test_packages: nil,
|
48
|
+
use_sdcard: nil,
|
49
|
+
grant_permissions: nil)
|
50
|
+
args = { appPath: path }
|
51
|
+
|
52
|
+
args[:options] = {} unless options?(replace, timeout, allow_test_packages, use_sdcard, grant_permissions)
|
53
|
+
|
54
|
+
args[:options][:replace] = replace unless replace.nil?
|
55
|
+
args[:options][:timeout] = timeout unless timeout.nil?
|
56
|
+
args[:options][:allowTestPackages] = allow_test_packages unless allow_test_packages.nil?
|
57
|
+
args[:options][:useSdcard] = use_sdcard unless use_sdcard.nil?
|
58
|
+
args[:options][:grantPermissions] = grant_permissions unless grant_permissions.nil?
|
59
|
+
|
60
|
+
execute :install_app, {}, args
|
61
|
+
end
|
62
|
+
|
63
|
+
private
|
64
|
+
|
65
|
+
def options?(replace, timeout, allow_test_packages, use_sdcard, grant_permissions)
|
66
|
+
replace.nil? || timeout.nil? || allow_test_packages.nil? || use_sdcard.nil? || grant_permissions.nil?
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
::Appium::Core::Device.add_endpoint_method(:remove_app) do
|
71
|
+
def remove_app(id, keep_data: nil, timeout: nil)
|
72
|
+
# required: [['appId'], ['bundleId']]
|
73
|
+
args = { appId: id }
|
74
|
+
|
75
|
+
args[:options] = {} unless keep_data.nil? || timeout.nil?
|
76
|
+
args[:options][:keepData] = keep_data unless keep_data.nil?
|
77
|
+
args[:options][:timeout] = timeout unless timeout.nil?
|
78
|
+
|
79
|
+
execute :remove_app, {}, args
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
::Appium::Core::Device.add_endpoint_method(:app_installed?) do
|
84
|
+
def app_installed?(app_id)
|
85
|
+
# required: [['appId'], ['bundleId']]
|
86
|
+
execute :app_installed?, {}, bundleId: app_id
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
::Appium::Core::Device.add_endpoint_method(:activate_app) do
|
91
|
+
def activate_app(app_id)
|
92
|
+
# required: [['appId'], ['bundleId']]
|
93
|
+
execute :activate_app, {}, bundleId: app_id
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
::Appium::Core::Device.add_endpoint_method(:terminate_app) do
|
98
|
+
def terminate_app(app_id, timeout: nil)
|
99
|
+
# required: [['appId'], ['bundleId']]
|
100
|
+
#
|
101
|
+
args = { appId: app_id }
|
102
|
+
|
103
|
+
args[:options] = {} unless timeout.nil?
|
104
|
+
args[:options][:timeout] = timeout unless timeout.nil?
|
105
|
+
|
106
|
+
execute :terminate_app, {}, args
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end # module AppManagement
|
111
|
+
end # module Device
|
112
|
+
end # module Core
|
113
|
+
end # module Appium
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Appium
|
2
2
|
module Core
|
3
3
|
module Device
|
4
|
-
|
4
|
+
module AppState
|
5
5
|
STATUS = [
|
6
6
|
:not_installed, # 0
|
7
7
|
:not_running, # 1
|
@@ -9,6 +9,23 @@ module Appium
|
|
9
9
|
:running_in_background, # 3
|
10
10
|
:running_in_foreground # 4
|
11
11
|
].freeze
|
12
|
+
|
13
|
+
def self.add_methods
|
14
|
+
::Appium::Core::Device.add_endpoint_method(:app_state) do
|
15
|
+
def app_state(app_id)
|
16
|
+
# required: [['appId'], ['bundleId']]
|
17
|
+
response = execute :app_state, {}, appId: app_id
|
18
|
+
|
19
|
+
case response
|
20
|
+
when 0, 1, 2, 3, 4
|
21
|
+
::Appium::Core::Device::AppState::STATUS[response]
|
22
|
+
else
|
23
|
+
::Appium::Logger.debug("Unexpected status in app_state: #{response}")
|
24
|
+
response
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
12
29
|
end
|
13
30
|
end
|
14
31
|
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module Appium
|
2
|
+
module Core
|
3
|
+
module Device
|
4
|
+
module Context
|
5
|
+
def self.add_methods
|
6
|
+
::Appium::Core::Device.add_endpoint_method(:within_context) do
|
7
|
+
def within_context(context)
|
8
|
+
existing_context = current_context
|
9
|
+
set_context context
|
10
|
+
if block_given?
|
11
|
+
result = yield
|
12
|
+
set_context existing_context
|
13
|
+
result
|
14
|
+
else
|
15
|
+
set_context existing_context
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
::Appium::Core::Device.add_endpoint_method(:switch_to_default_context) do
|
21
|
+
def switch_to_default_context
|
22
|
+
set_context nil
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
::Appium::Core::Device.add_endpoint_method(:current_context) do
|
27
|
+
def current_context
|
28
|
+
execute :current_context
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
::Appium::Core::Device.add_endpoint_method(:available_contexts) do
|
33
|
+
def available_contexts
|
34
|
+
# return empty array instead of nil on failure
|
35
|
+
execute(:available_contexts, {}) || []
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
::Appium::Core::Device.add_endpoint_method(:set_context) do
|
40
|
+
def set_context(context = null)
|
41
|
+
execute :set_context, {}, name: context
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end # module ImeActions
|
46
|
+
end # module Device
|
47
|
+
end # module Core
|
48
|
+
end # module Appium
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Appium
|
2
|
+
module Core
|
3
|
+
module Device
|
4
|
+
module DeviceLock
|
5
|
+
def self.add_methods
|
6
|
+
::Appium::Core::Device.add_endpoint_method(:lock) do
|
7
|
+
def lock(duration = nil)
|
8
|
+
opts = duration ? { seconds: duration } : {}
|
9
|
+
execute :lock, {}, opts
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
::Appium::Core::Device.add_endpoint_method(:device_locked?) do
|
14
|
+
def device_locked?
|
15
|
+
execute :device_locked?
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
::Appium::Core::Device.add_endpoint_method(:unlock) do
|
20
|
+
def unlock
|
21
|
+
execute :unlock
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end # module DeviceLock
|
26
|
+
end # module Device
|
27
|
+
end # module Core
|
28
|
+
end # module Appium
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'base64'
|
2
|
+
|
3
|
+
module Appium
|
4
|
+
module Core
|
5
|
+
module Device
|
6
|
+
module FileManagement
|
7
|
+
def self.add_methods
|
8
|
+
::Appium::Core::Device.add_endpoint_method(:push_file) do
|
9
|
+
def push_file(path, filedata)
|
10
|
+
encoded_data = Base64.encode64 filedata
|
11
|
+
execute :push_file, {}, path: path, data: encoded_data
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
::Appium::Core::Device.add_endpoint_method(:pull_file) do
|
16
|
+
def pull_file(path)
|
17
|
+
data = execute :pull_file, {}, path: path
|
18
|
+
Base64.decode64 data
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
::Appium::Core::Device.add_endpoint_method(:pull_folder) do
|
23
|
+
def pull_folder(path)
|
24
|
+
data = execute :pull_folder, {}, path: path
|
25
|
+
Base64.decode64 data
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end # module FileManagement
|
30
|
+
end # module Device
|
31
|
+
end # module Core
|
32
|
+
end # module Appium
|
@@ -4,8 +4,6 @@ module Appium
|
|
4
4
|
module Core
|
5
5
|
module Device
|
6
6
|
module ImageComparison
|
7
|
-
extend Forwardable
|
8
|
-
|
9
7
|
MODE = [:matchFeatures, :getSimilarity, :matchTemplate].freeze
|
10
8
|
|
11
9
|
MATCH_FEATURES = {
|
@@ -102,7 +100,7 @@ module Appium
|
|
102
100
|
## class << self
|
103
101
|
####
|
104
102
|
|
105
|
-
def self.
|
103
|
+
def self.add_methods
|
106
104
|
::Appium::Core::Device.add_endpoint_method(:match_images_features) do
|
107
105
|
def match_images_features(first_image:, # rubocop:disable Metrics/ParameterLists
|
108
106
|
second_image:,
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Appium
|
2
|
+
module Core
|
3
|
+
module Device
|
4
|
+
module ImeActions
|
5
|
+
def self.add_methods
|
6
|
+
::Appium::Core::Device.add_endpoint_method(:ime_activate) do
|
7
|
+
def ime_activate(ime_name)
|
8
|
+
# from Selenium::WebDriver::Remote::OSS
|
9
|
+
execute :ime_activate_engine, {}, engine: ime_name
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
::Appium::Core::Device.add_endpoint_method(:ime_available_engines) do
|
14
|
+
def ime_available_engines
|
15
|
+
execute :ime_get_available_engines
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
::Appium::Core::Device.add_endpoint_method(:ime_active_engine) do
|
20
|
+
# from Selenium::WebDriver::Remote::OSS
|
21
|
+
def ime_active_engine
|
22
|
+
execute :ime_get_active_engine
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
::Appium::Core::Device.add_endpoint_method(:ime_activated) do
|
27
|
+
# from Selenium::WebDriver::Remote::OSS
|
28
|
+
def ime_activated
|
29
|
+
execute :ime_is_activated
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
::Appium::Core::Device.add_endpoint_method(:ime_deactivate) do
|
34
|
+
# from Selenium::WebDriver::Remote::OSS
|
35
|
+
def ime_deactivate
|
36
|
+
execute :ime_deactivate, {}
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end # module ImeActions
|
41
|
+
end # module Device
|
42
|
+
end # module Core
|
43
|
+
end # module Appium
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Appium
|
2
|
+
module Core
|
3
|
+
module Device
|
4
|
+
module Keyboard
|
5
|
+
def self.add_methods
|
6
|
+
::Appium::Core::Device.add_endpoint_method(:hide_keyboard) do
|
7
|
+
def hide_keyboard(close_key = nil, strategy = nil)
|
8
|
+
option = {}
|
9
|
+
|
10
|
+
option[:key] = close_key || 'Done' # default to Done key.
|
11
|
+
option[:strategy] = strategy || :pressKey # default to pressKey
|
12
|
+
|
13
|
+
execute :hide_keyboard, {}, option
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
::Appium::Core::Device.add_endpoint_method(:is_keyboard_shown) do
|
18
|
+
def is_keyboard_shown # rubocop:disable Naming/PredicateName for compatibility
|
19
|
+
execute :is_keyboard_shown
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end # module Keyboard
|
24
|
+
end # module Device
|
25
|
+
end # module Core
|
26
|
+
end # module Appium
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Appium
|
2
|
+
module Core
|
3
|
+
module Device
|
4
|
+
module KeyEvent
|
5
|
+
def self.add_methods
|
6
|
+
# Only for Selendroid
|
7
|
+
::Appium::Core::Device.add_endpoint_method(:keyevent) do
|
8
|
+
def keyevent(key, metastate = nil)
|
9
|
+
args = { keycode: key }
|
10
|
+
args[:metastate] = metastate if metastate
|
11
|
+
execute :keyevent, {}, args
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
::Appium::Core::Device.add_endpoint_method(:press_keycode) do
|
16
|
+
def press_keycode(key, metastate: [], flags: [])
|
17
|
+
raise ArgumentError, 'flags should be Array' unless flags.is_a? Array
|
18
|
+
raise ArgumentError, 'metastates should be Array' unless metastate.is_a? Array
|
19
|
+
|
20
|
+
args = { keycode: key }
|
21
|
+
args[:metastate] = metastate.reduce(0) { |acc, meta| acc | meta } unless metastate.empty?
|
22
|
+
args[:flags] = flags.reduce(0) { |acc, flag| acc | flag } unless flags.empty?
|
23
|
+
|
24
|
+
execute :press_keycode, {}, args
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
::Appium::Core::Device.add_endpoint_method(:long_press_keycode) do
|
29
|
+
def long_press_keycode(key, metastate: [], flags: [])
|
30
|
+
raise ArgumentError, 'flags should be Array' unless flags.is_a? Array
|
31
|
+
raise ArgumentError, 'metastates should be Array' unless metastate.is_a? Array
|
32
|
+
|
33
|
+
args = { keycode: key }
|
34
|
+
args[:metastate] = metastate.reduce(0) { |acc, meta| acc | meta } unless metastate.empty?
|
35
|
+
args[:flags] = flags.reduce(0) { |acc, flag| acc | flag } unless flags.empty?
|
36
|
+
|
37
|
+
execute :long_press_keycode, {}, args
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end # module KeyEvent
|
42
|
+
end # module Device
|
43
|
+
end # module Core
|
44
|
+
end # module Appium
|
@@ -10,6 +10,27 @@ module Appium
|
|
10
10
|
|
11
11
|
METHOD = %w(POST PUT).freeze
|
12
12
|
|
13
|
+
def self.add_methods
|
14
|
+
::Appium::Core::Device.add_endpoint_method(:stop_recording_screen) do
|
15
|
+
def stop_recording_screen(remote_path: nil, user: nil, pass: nil, method: 'PUT')
|
16
|
+
option = ::Appium::Core::Device::ScreenRecord.new(
|
17
|
+
remote_path: remote_path, user: user, pass: pass, method: method
|
18
|
+
).upload_option
|
19
|
+
|
20
|
+
params = option.empty? ? {} : { options: option }
|
21
|
+
|
22
|
+
execute(:stop_recording_screen, {}, params)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
::Appium::Core::Device.add_endpoint_method(:stop_and_save_recording_screen) do
|
27
|
+
def stop_and_save_recording_screen(file_path)
|
28
|
+
base64data = execute(:stop_recording_screen, {}, {})
|
29
|
+
File.open(file_path, 'wb') { |f| f << Base64.decode64(base64data) }
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
13
34
|
def initialize(remote_path: nil, user: nil, pass: nil, method: 'PUT', force_restart: nil)
|
14
35
|
@upload_option = if remote_path.nil?
|
15
36
|
{}
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Appium
|
2
|
+
module Core
|
3
|
+
module Device
|
4
|
+
module Setting
|
5
|
+
def self.add_methods
|
6
|
+
::Appium::Core::Device.add_endpoint_method(:get_settings) do
|
7
|
+
def get_settings
|
8
|
+
execute :get_settings, {}
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
::Appium::Core::Device.add_endpoint_method(:update_settings) do
|
13
|
+
def update_settings(settings)
|
14
|
+
execute :update_settings, {}, settings: settings
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end # module Setting
|
19
|
+
end # module Device
|
20
|
+
end # module Core
|
21
|
+
end # module Appium
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Appium
|
2
|
+
module Core
|
3
|
+
module Device
|
4
|
+
module TouchActions
|
5
|
+
def self.add_methods
|
6
|
+
::Appium::Core::Device.add_endpoint_method(:touch_actions) do
|
7
|
+
def touch_actions(actions)
|
8
|
+
actions = { actions: [actions].flatten }
|
9
|
+
execute :touch_actions, {}, actions
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
::Appium::Core::Device.add_endpoint_method(:multi_touch) do
|
14
|
+
def multi_touch(actions)
|
15
|
+
execute :multi_touch, {}, actions: actions
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end # module TouchActions
|
20
|
+
end # module Device
|
21
|
+
end # module Core
|
22
|
+
end # module Appium
|