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.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +2 -2
  3. data/CHANGELOG.md +16 -0
  4. data/lib/appium_lib_core/android/device.rb +301 -406
  5. data/lib/appium_lib_core/android/device/clipboard.rb +42 -0
  6. data/lib/appium_lib_core/android/device/emulator.rb +149 -147
  7. data/lib/appium_lib_core/android/device/network.rb +47 -0
  8. data/lib/appium_lib_core/android/device/performance.rb +24 -0
  9. data/lib/appium_lib_core/android/device/screen.rb +39 -0
  10. data/lib/appium_lib_core/android/espresso/bridge.rb +1 -1
  11. data/lib/appium_lib_core/android/uiautomator1/bridge.rb +1 -1
  12. data/lib/appium_lib_core/android/uiautomator2/bridge.rb +1 -1
  13. data/lib/appium_lib_core/android/uiautomator2/device.rb +3 -14
  14. data/lib/appium_lib_core/android/uiautomator2/device/battery.rb +28 -0
  15. data/lib/appium_lib_core/common/base/http_default.rb +5 -1
  16. data/lib/appium_lib_core/device.rb +50 -370
  17. data/lib/appium_lib_core/device/app_management.rb +113 -0
  18. data/lib/appium_lib_core/device/app_state.rb +18 -1
  19. data/lib/appium_lib_core/device/context.rb +48 -0
  20. data/lib/appium_lib_core/device/device_lock.rb +28 -0
  21. data/lib/appium_lib_core/device/file_management.rb +32 -0
  22. data/lib/appium_lib_core/device/image_comparison.rb +1 -3
  23. data/lib/appium_lib_core/device/ime_actions.rb +43 -0
  24. data/lib/appium_lib_core/device/keyboard.rb +26 -0
  25. data/lib/appium_lib_core/device/keyevent.rb +44 -0
  26. data/lib/appium_lib_core/device/screen_record.rb +21 -0
  27. data/lib/appium_lib_core/device/setting.rb +21 -0
  28. data/lib/appium_lib_core/device/touch_actions.rb +22 -0
  29. data/lib/appium_lib_core/device/value.rb +23 -0
  30. data/lib/appium_lib_core/driver.rb +8 -0
  31. data/lib/appium_lib_core/ios/device.rb +70 -101
  32. data/lib/appium_lib_core/ios/device/clipboard.rb +41 -0
  33. data/lib/appium_lib_core/ios/uiautomation/bridge.rb +1 -1
  34. data/lib/appium_lib_core/ios/xcuitest/bridge.rb +2 -2
  35. data/lib/appium_lib_core/ios/xcuitest/device.rb +166 -227
  36. data/lib/appium_lib_core/ios/xcuitest/device/battery.rb +28 -0
  37. data/lib/appium_lib_core/ios/xcuitest/device/performance.rb +40 -0
  38. data/lib/appium_lib_core/ios/xcuitest/device/screen.rb +30 -0
  39. data/lib/appium_lib_core/version.rb +2 -2
  40. data/release_notes.md +12 -0
  41. metadata +21 -2
@@ -0,0 +1,42 @@
1
+ require 'base64'
2
+
3
+ module Appium
4
+ module Core
5
+ module Android
6
+ module Device
7
+ module Clipboard
8
+ def self.add_methods
9
+ ::Appium::Core::Device.add_endpoint_method(:get_clipboard) do
10
+ def get_clipboard(content_type: :plaintext)
11
+ unless ::Appium::Core::Device::Clipboard::CONTENT_TYPE.member?(content_type)
12
+ raise "content_type should be #{::Appium::Core::Device::Clipboard::CONTENT_TYPE}"
13
+ end
14
+
15
+ params = { contentType: content_type }
16
+
17
+ data = execute(:get_clipboard, {}, params)
18
+ Base64.decode64 data
19
+ end
20
+ end
21
+
22
+ ::Appium::Core::Device.add_endpoint_method(:set_clipboard) do
23
+ def set_clipboard(content:, content_type: :plaintext, label: nil)
24
+ unless ::Appium::Core::Device::Clipboard::CONTENT_TYPE.member?(content_type)
25
+ raise "content_type should be #{::Appium::Core::Device::Clipboard::CONTENT_TYPE}"
26
+ end
27
+
28
+ params = {
29
+ contentType: content_type,
30
+ content: Base64.encode64(content)
31
+ }
32
+ params[:label] = label unless label.nil?
33
+
34
+ execute(:set_clipboard, {}, params)
35
+ end
36
+ end
37
+ end
38
+ end # module Clipboard
39
+ end # module Device
40
+ end # module Android
41
+ end # module Core
42
+ end # module Appium
@@ -1,168 +1,170 @@
1
1
  module Appium
2
- module Android
3
- module Device
4
- module Emulator
5
- GSM_CALL_ACTIONS = [:call, :accept, :cancel, :hold].freeze
6
-
7
- GSM_VOICE_STATES = [:on, :off, :denied, :searching, :roaming, :home, :unregistered].freeze
8
-
9
- GSM_SIGNALS = { none_or_unknown: 0, poor: 1, moderate: 2, good: 3, great: 4 }.freeze
10
-
11
- # :gsm // GSM/CSD (up: 14.4, down: 14.4).
12
- # :scsd // HSCSD (up: 14.4, down: 57.6).
13
- # :gprs // GPRS (up: 28.8, down: 57.6).
14
- # :edge // EDGE/EGPRS (up: 473.6, down: 473.6).
15
- # :umts // UMTS/3G (up: 384.0, down: 384.0).
16
- # :hsdpa // HSDPA (up: 5760.0, down: 13,980.0).
17
- # :lte // LTE (up: 58,000, down: 173,000).
18
- # :evdo // EVDO (up: 75,000, down: 280,000).
19
- # :full // No limit, the default (up: 0.0, down: 0.0).
20
- NET_SPEED = [:gsm, :scsd, :gprs, :edge, :umts, :hsdpa, :lte, :evdo, :full].freeze
21
-
22
- POWER_AC_STATE = [:on, :off].freeze
23
-
24
- # @!method send_sms(phone_number:, message:)
25
- # Emulate send SMS event on the connected emulator.
26
- #
27
- # @param [String] phone_number: The phone number of message sender
28
- # @param [String] message: The message to send
29
- #
30
- # @example
31
- #
32
- # @driver.send_sms phone_number: '00000000000', message: 'test message'
33
- #
34
-
35
- # @!method gsm_call(phone_number:, action:)
36
- # Emulate GSM call event on the connected emulator.
37
- #
38
- # @param [String] phone_number: The phone number of message sender
39
- # @param [Hash] action: One of available GSM call actions. Available action is GSM_CALL_ACTION.
40
- #
41
- # @example
42
- #
43
- # @driver.gsm_call phone_number: '00000000000', action: :call
44
- #
45
-
46
- # @!method gsm_signal(signal_strength)
47
- # Emulate GSM signal strength change event on the connected emulator.
48
- #
49
- # @param [Hash] signal_strength One of available GSM signal strength. Available action is GSM_SIGNAL.
50
- #
51
- # @example
52
- #
53
- # @driver.gsm_signal :good
54
- #
55
-
56
- # @!method gsm_voice(state)
57
- # Emulate GSM voice event on the connected emulator.
58
- #
59
- # @param [Hash] state One of available GSM voice state. Available action is GSM_VOICE_STATE.
60
- #
61
- # @example
62
- #
63
- # @driver.gsm_voice :on
64
- #
65
-
66
- # @!method set_network_speed(netspeed)
67
- # Emulate network speed change event on the connected emulator.
68
- #
69
- # @param [Hash] netspeed One of available Network Speed values. Available action is NET_SPEED.
70
- #
71
- # @example
72
- #
73
- # @driver.set_network_speed :gsm
74
- #
75
-
76
- # @!method set_power_capacity(percent)
77
- # Emulate power capacity change on the connected emulator.
78
- #
79
- # @param [Integer] percent Percentage value in range [0, 100].
80
- #
81
- # @example
82
- #
83
- # @driver.set_power_capacity 10
84
- #
85
-
86
- # @!method set_power_ac(state)
87
- # Emulate power state change on the connected emulator.
88
- #
89
- # @param [Hash] state One of available power AC state. Available action is POWER_AC_STATE.
90
- #
91
- # @example
92
- #
93
- # @driver.set_power_ac :on
94
- #
95
-
96
- ####
97
- ## self.emulator_commands
98
- ####
99
-
100
- def self.emulator_commands
101
- Appium::Core::Device.add_endpoint_method(:send_sms) do
102
- def send_sms(phone_number:, message:)
103
- execute(:send_sms, {}, { phoneNumber: phone_number, message: message })
2
+ module Core
3
+ module Android
4
+ module Device
5
+ module Emulator
6
+ GSM_CALL_ACTIONS = [:call, :accept, :cancel, :hold].freeze
7
+
8
+ GSM_VOICE_STATES = [:on, :off, :denied, :searching, :roaming, :home, :unregistered].freeze
9
+
10
+ GSM_SIGNALS = { none_or_unknown: 0, poor: 1, moderate: 2, good: 3, great: 4 }.freeze
11
+
12
+ # :gsm // GSM/CSD (up: 14.4, down: 14.4).
13
+ # :scsd // HSCSD (up: 14.4, down: 57.6).
14
+ # :gprs // GPRS (up: 28.8, down: 57.6).
15
+ # :edge // EDGE/EGPRS (up: 473.6, down: 473.6).
16
+ # :umts // UMTS/3G (up: 384.0, down: 384.0).
17
+ # :hsdpa // HSDPA (up: 5760.0, down: 13,980.0).
18
+ # :lte // LTE (up: 58,000, down: 173,000).
19
+ # :evdo // EVDO (up: 75,000, down: 280,000).
20
+ # :full // No limit, the default (up: 0.0, down: 0.0).
21
+ NET_SPEED = [:gsm, :scsd, :gprs, :edge, :umts, :hsdpa, :lte, :evdo, :full].freeze
22
+
23
+ POWER_AC_STATE = [:on, :off].freeze
24
+
25
+ # @!method send_sms(phone_number:, message:)
26
+ # Emulate send SMS event on the connected emulator.
27
+ #
28
+ # @param [String] phone_number: The phone number of message sender
29
+ # @param [String] message: The message to send
30
+ #
31
+ # @example
32
+ #
33
+ # @driver.send_sms phone_number: '00000000000', message: 'test message'
34
+ #
35
+
36
+ # @!method gsm_call(phone_number:, action:)
37
+ # Emulate GSM call event on the connected emulator.
38
+ #
39
+ # @param [String] phone_number: The phone number of message sender
40
+ # @param [Hash] action: One of available GSM call actions. Available action is GSM_CALL_ACTION.
41
+ #
42
+ # @example
43
+ #
44
+ # @driver.gsm_call phone_number: '00000000000', action: :call
45
+ #
46
+
47
+ # @!method gsm_signal(signal_strength)
48
+ # Emulate GSM signal strength change event on the connected emulator.
49
+ #
50
+ # @param [Hash] signal_strength One of available GSM signal strength. Available action is GSM_SIGNAL.
51
+ #
52
+ # @example
53
+ #
54
+ # @driver.gsm_signal :good
55
+ #
56
+
57
+ # @!method gsm_voice(state)
58
+ # Emulate GSM voice event on the connected emulator.
59
+ #
60
+ # @param [Hash] state One of available GSM voice state. Available action is GSM_VOICE_STATE.
61
+ #
62
+ # @example
63
+ #
64
+ # @driver.gsm_voice :on
65
+ #
66
+
67
+ # @!method set_network_speed(netspeed)
68
+ # Emulate network speed change event on the connected emulator.
69
+ #
70
+ # @param [Hash] netspeed One of available Network Speed values. Available action is NET_SPEED.
71
+ #
72
+ # @example
73
+ #
74
+ # @driver.set_network_speed :gsm
75
+ #
76
+
77
+ # @!method set_power_capacity(percent)
78
+ # Emulate power capacity change on the connected emulator.
79
+ #
80
+ # @param [Integer] percent Percentage value in range [0, 100].
81
+ #
82
+ # @example
83
+ #
84
+ # @driver.set_power_capacity 10
85
+ #
86
+
87
+ # @!method set_power_ac(state)
88
+ # Emulate power state change on the connected emulator.
89
+ #
90
+ # @param [Hash] state One of available power AC state. Available action is POWER_AC_STATE.
91
+ #
92
+ # @example
93
+ #
94
+ # @driver.set_power_ac :on
95
+ #
96
+
97
+ ####
98
+ ## self.emulator_commands
99
+ ####
100
+
101
+ def self.add_methods
102
+ ::Appium::Core::Device.add_endpoint_method(:send_sms) do
103
+ def send_sms(phone_number:, message:)
104
+ execute(:send_sms, {}, { phoneNumber: phone_number, message: message })
105
+ end
104
106
  end
105
- end
106
107
 
107
- Appium::Core::Device.add_endpoint_method(:gsm_call) do
108
- def gsm_call(phone_number:, action:)
109
- unless GSM_CALL_ACTIONS.member? action.to_sym
110
- raise "action: should be member of #{GSM_CALL_ACTIONS}. Not #{action}."
111
- end
108
+ ::Appium::Core::Device.add_endpoint_method(:gsm_call) do
109
+ def gsm_call(phone_number:, action:)
110
+ unless GSM_CALL_ACTIONS.member? action.to_sym
111
+ raise "action: should be member of #{GSM_CALL_ACTIONS}. Not #{action}."
112
+ end
112
113
 
113
- execute(:gsm_call, {}, { phoneNumber: phone_number, action: action })
114
+ execute(:gsm_call, {}, { phoneNumber: phone_number, action: action })
115
+ end
114
116
  end
115
- end
116
117
 
117
- Appium::Core::Device.add_endpoint_method(:gsm_signal) do
118
- def gsm_signal(signal_strength)
119
- raise "#{signal_strength} should be member of #{GSM_SIGNALS} " if GSM_SIGNALS[signal_strength.to_sym].nil?
118
+ ::Appium::Core::Device.add_endpoint_method(:gsm_signal) do
119
+ def gsm_signal(signal_strength)
120
+ raise "#{signal_strength} should be member of #{GSM_SIGNALS} " if GSM_SIGNALS[signal_strength.to_sym].nil?
120
121
 
121
- execute(:gsm_signal, {}, { signalStrengh: GSM_SIGNALS[signal_strength] })
122
+ execute(:gsm_signal, {}, { signalStrengh: GSM_SIGNALS[signal_strength] })
123
+ end
122
124
  end
123
- end
124
125
 
125
- Appium::Core::Device.add_endpoint_method(:gsm_voice) do
126
- def gsm_voice(state)
127
- unless GSM_VOICE_STATES.member? state.to_sym
128
- raise "The state should be member of #{GSM_VOICE_STATES}. Not #{state}."
129
- end
126
+ ::Appium::Core::Device.add_endpoint_method(:gsm_voice) do
127
+ def gsm_voice(state)
128
+ unless GSM_VOICE_STATES.member? state.to_sym
129
+ raise "The state should be member of #{GSM_VOICE_STATES}. Not #{state}."
130
+ end
130
131
 
131
- execute(:gsm_voice, {}, { state: state })
132
+ execute(:gsm_voice, {}, { state: state })
133
+ end
132
134
  end
133
- end
134
135
 
135
- Appium::Core::Device.add_endpoint_method(:set_network_speed) do
136
- def set_network_speed(netspeed)
137
- unless NET_SPEED.member? netspeed.to_sym
138
- raise "The netspeed should be member of #{NET_SPEED}. Not #{netspeed}."
139
- end
136
+ ::Appium::Core::Device.add_endpoint_method(:set_network_speed) do
137
+ def set_network_speed(netspeed)
138
+ unless NET_SPEED.member? netspeed.to_sym
139
+ raise "The netspeed should be member of #{NET_SPEED}. Not #{netspeed}."
140
+ end
140
141
 
141
- execute(:set_network_speed, {}, { netspeed: netspeed })
142
+ execute(:set_network_speed, {}, { netspeed: netspeed })
143
+ end
142
144
  end
143
- end
144
145
 
145
- Appium::Core::Device.add_endpoint_method(:set_power_capacity) do
146
- def set_power_capacity(percent)
147
- unless (0..100).member? percent
148
- raise "The percent should be between 0 and 100. Not #{percent}."
149
- end
146
+ ::Appium::Core::Device.add_endpoint_method(:set_power_capacity) do
147
+ def set_power_capacity(percent)
148
+ unless (0..100).member? percent
149
+ raise "The percent should be between 0 and 100. Not #{percent}."
150
+ end
150
151
 
151
- execute(:set_power_capacity, {}, { percent: percent })
152
+ execute(:set_power_capacity, {}, { percent: percent })
153
+ end
152
154
  end
153
- end
154
155
 
155
- Appium::Core::Device.add_endpoint_method(:set_power_ac) do
156
- def set_power_ac(state)
157
- unless POWER_AC_STATE.member? state.to_sym
158
- raise "The state should be member of #{POWER_AC_STATE}. Not #{state}."
159
- end
156
+ ::Appium::Core::Device.add_endpoint_method(:set_power_ac) do
157
+ def set_power_ac(state)
158
+ unless POWER_AC_STATE.member? state.to_sym
159
+ raise "The state should be member of #{POWER_AC_STATE}. Not #{state}."
160
+ end
160
161
 
161
- execute(:set_power_ac, {}, { state: state })
162
+ execute(:set_power_ac, {}, { state: state })
163
+ end
162
164
  end
163
- end
164
- end # def self.emulator_commands
165
- end # module Emulator
166
- end # module Device
167
- end # module Android
165
+ end # def self.emulator_commands
166
+ end # module Emulator
167
+ end # module Device
168
+ end # module Android
169
+ end # module Core
168
170
  end # module Appium
@@ -0,0 +1,47 @@
1
+ module Appium
2
+ module Core
3
+ module Android
4
+ module Device
5
+ module Network
6
+ def self.add_methods
7
+ ::Appium::Core::Device.add_endpoint_method(:get_network_connection) do
8
+ def get_network_connection
9
+ execute :get_network_connection
10
+ end
11
+ end
12
+
13
+ ::Appium::Core::Device.add_endpoint_method(:toggle_wifi) do
14
+ def toggle_wifi
15
+ execute :toggle_wifi
16
+ end
17
+ end
18
+
19
+ ::Appium::Core::Device.add_endpoint_method(:toggle_data) do
20
+ def toggle_data
21
+ execute :toggle_data
22
+ end
23
+ end
24
+
25
+ ::Appium::Core::Device.add_endpoint_method(:set_network_connection) do
26
+ def set_network_connection(mode)
27
+ # TODO. Update set_network_connection as well
28
+ # connection_type = {airplane_mode: 1, wifi: 2, data: 4, all: 6, none: 0}
29
+ # raise ArgumentError, 'Invalid connection type' unless type_to_values.keys.include? mode
30
+ # type = connection_type[mode]
31
+ # execute :set_network_connection, {}, type: type
32
+ execute :set_network_connection, {}, type: mode
33
+ end
34
+ end
35
+
36
+ ::Appium::Core::Device.add_endpoint_method(:toggle_airplane_mode) do
37
+ def toggle_airplane_mode
38
+ execute :toggle_airplane_mode
39
+ end
40
+ alias_method :toggle_flight_mode, :toggle_airplane_mode
41
+ end
42
+ end
43
+ end # module Network
44
+ end # module Device
45
+ end # module Android
46
+ end # module Core
47
+ end # module Appium
@@ -0,0 +1,24 @@
1
+ module Appium
2
+ module Core
3
+ module Android
4
+ module Device
5
+ module Performance
6
+ def self.add_methods
7
+ ::Appium::Core::Device.add_endpoint_method(:get_performance_data_types) do
8
+ def get_performance_data_types
9
+ execute :get_performance_data_types
10
+ end
11
+ end
12
+
13
+ ::Appium::Core::Device.add_endpoint_method(:get_performance_data) do
14
+ def get_performance_data(package_name:, data_type:, data_read_timeout: 1000)
15
+ execute(:get_performance_data, {},
16
+ packageName: package_name, dataType: data_type, dataReadTimeout: data_read_timeout)
17
+ end
18
+ end
19
+ end
20
+ end # module Performance
21
+ end # module Device
22
+ end # module Android
23
+ end # module Core
24
+ end # module Appium
@@ -0,0 +1,39 @@
1
+ module Appium
2
+ module Core
3
+ module Android
4
+ module Device
5
+ module Screen
6
+ def self.add_methods
7
+ ::Appium::Core::Device.add_endpoint_method(:get_display_density) do
8
+ def get_display_density
9
+ execute :get_display_density
10
+ end
11
+ end
12
+
13
+ ::Appium::Core::Device.add_endpoint_method(:start_recording_screen) do
14
+ # rubocop:disable Metrics/ParameterLists
15
+ def start_recording_screen(remote_path: nil, user: nil, pass: nil, method: 'PUT', force_restart: nil,
16
+ video_size: nil, time_limit: '180', bit_rate: nil, bug_report: nil)
17
+ option = ::Appium::Core::Device::ScreenRecord.new(
18
+ remote_path: remote_path, user: user, pass: pass, method: method, force_restart: force_restart
19
+ ).upload_option
20
+
21
+ option[:videoSize] = video_size unless video_size.nil?
22
+ option[:timeLimit] = time_limit
23
+ option[:bitRate] = bit_rate unless bit_rate.nil?
24
+
25
+ unless bug_report.nil?
26
+ raise 'bug_report should be true or false' unless [true, false].member?(bug_report)
27
+ option[:bugReport] = bug_report
28
+ end
29
+
30
+ execute(:start_recording_screen, {}, { options: option })
31
+ end
32
+ # rubocop:enable Metrics/ParameterLists
33
+ end
34
+ end
35
+ end # module Screen
36
+ end # module Device
37
+ end # module Android
38
+ end # module Core
39
+ end # module Appium