Skip to content

Commit 53c61d4

Browse files
authored
get ride of auto method generation to enhance ide support (#72)
* get ride of auto method generation to enhance ide support * fix lint * fix activity name * clean up * fix lint and arrange syntax
1 parent f175c44 commit 53c61d4

File tree

13 files changed

+364
-243
lines changed

13 files changed

+364
-243
lines changed

lib/appium_lib_core/android/device.rb

+178-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,106 @@ module Device
88

99
# rubocop:disable Metrics/LineLength
1010

11+
# @!method open_notifications
12+
# Open Android notifications
13+
#
14+
# @example
15+
#
16+
# @driver.open_notifications
17+
#
18+
19+
# @!method current_activity
20+
# Get current activity name
21+
# @return [String] An activity name
22+
#
23+
# @example
24+
#
25+
# @driver.current_activity # '.ApiDemos'
26+
#
27+
28+
# @!method current_package
29+
# Get current package name
30+
# @return [String] A package name
31+
#
32+
# @example
33+
#
34+
# @driver.current_package # 'com.example.android.apis'
35+
#
36+
37+
# @!method get_system_bars
38+
# Get system bar's information
39+
# @return [String]
40+
#
41+
# @example
42+
#
43+
# @driver.get_system_bars
44+
#
45+
46+
# @!method get_display_density
47+
# Get connected device's density.
48+
# @return [Integer] The size of density
49+
#
50+
# @example
51+
#
52+
# @driver.get_display_density # 320
53+
#
54+
55+
# @!method is_keyboard_shown
56+
# Get whether keyboard is displayed or not.
57+
# @return [Boolean] Return true if keyboard is shown. Return false if keyboard is hidden.
58+
#
59+
# @example
60+
# @driver.is_keyboard_shown # false
61+
#
62+
63+
# @!method get_network_connection
64+
# Get the device network connection current status
65+
# See set_network_connection method for return value
66+
#
67+
# @example
68+
#
69+
# @driver.network_connection_type #=> 6
70+
# @driver.get_network_connection #=> 6
71+
#
72+
73+
# @!method toggle_wifi
74+
# Switch the state of the wifi service only for Android
75+
#
76+
# @return [String]
77+
#
78+
# @example
79+
#
80+
# @driver.toggle_wifi
81+
#
82+
83+
# @!method toggle_data
84+
# Switch the state of data service only for Android, and the device should be rooted
85+
#
86+
# @return [String]
87+
#
88+
# @example
89+
#
90+
# @driver.toggle_data
91+
#
92+
93+
# @!method toggle_location_services
94+
# Switch the state of the location service
95+
#
96+
# @return [String]
97+
#
98+
# @example
99+
#
100+
# @driver.toggle_location_services
101+
#
102+
103+
# @!method toggle_airplane_mode
104+
# Toggle flight mode on or off
105+
#
106+
# @example
107+
#
108+
# @driver.toggle_airplane_mode
109+
#
110+
11111
# @!method hide_keyboard(close_key = nil, strategy = nil)
12112
# Hide the onscreen keyboard
13113
# @param [String] close_key The name of the key which closes the keyboard.
@@ -149,7 +249,79 @@ class << self
149249
def extended(_mod)
150250
Appium::Core::Device.extend_webdriver_with_forwardable
151251

152-
# Android
252+
Appium::Core::Device.add_endpoint_method(:open_notifications) do
253+
def open_notifications
254+
execute :open_notifications
255+
end
256+
end
257+
258+
Appium::Core::Device.add_endpoint_method(:toggle_airplane_mode) do
259+
def toggle_airplane_mode
260+
execute :toggle_airplane_mode
261+
end
262+
alias_method :toggle_flight_mode, :toggle_airplane_mode
263+
end
264+
265+
Appium::Core::Device.add_endpoint_method(:current_activity) do
266+
def current_activity
267+
execute :current_activity
268+
end
269+
end
270+
271+
Appium::Core::Device.add_endpoint_method(:current_package) do
272+
def current_package
273+
execute :current_package
274+
end
275+
end
276+
277+
Appium::Core::Device.add_endpoint_method(:get_system_bars) do
278+
def get_system_bars
279+
execute :get_system_bars
280+
end
281+
end
282+
283+
Appium::Core::Device.add_endpoint_method(:get_display_density) do
284+
def get_display_density
285+
execute :get_display_density
286+
end
287+
end
288+
289+
Appium::Core::Device.add_endpoint_method(:is_keyboard_shown) do
290+
def is_keyboard_shown # rubocop:disable Naming/PredicateName for compatibility
291+
execute :is_keyboard_shown
292+
end
293+
end
294+
295+
Appium::Core::Device.add_endpoint_method(:get_network_connection) do
296+
def get_network_connection
297+
execute :get_network_connection
298+
end
299+
end
300+
301+
Appium::Core::Device.add_endpoint_method(:get_performance_data_types) do
302+
def get_performance_data_types
303+
execute :get_performance_data_types
304+
end
305+
end
306+
307+
Appium::Core::Device.add_endpoint_method(:toggle_wifi) do
308+
def toggle_wifi
309+
execute :toggle_wifi
310+
end
311+
end
312+
313+
Appium::Core::Device.add_endpoint_method(:toggle_data) do
314+
def toggle_data
315+
execute :toggle_data
316+
end
317+
end
318+
319+
Appium::Core::Device.add_endpoint_method(:toggle_location_services) do
320+
def toggle_location_services
321+
execute :toggle_location_services
322+
end
323+
end
324+
153325
Appium::Core::Device.add_endpoint_method(:start_activity) do
154326
def start_activity(opts)
155327
raise 'opts must be a hash' unless opts.is_a? Hash
@@ -191,6 +363,11 @@ def end_coverage(path, intent)
191363

192364
Appium::Core::Device.add_endpoint_method(:set_network_connection) do
193365
def set_network_connection(mode)
366+
# TODO. Update set_network_connection as well
367+
# connection_type = {airplane_mode: 1, wifi: 2, data: 4, all: 6, none: 0}
368+
# raise ArgumentError, 'Invalid connection type' unless type_to_values.keys.include? mode
369+
# type = connection_type[mode]
370+
# execute :set_network_connection, {}, type: type
194371
execute :set_network_connection, {}, type: mode
195372
end
196373
end

lib/appium_lib_core/common/command.rb

+31-36
Original file line numberDiff line numberDiff line change
@@ -4,73 +4,69 @@ module Appium
44
module Core
55
# ref: https://github.com/appium/appium-base-driver/blob/master/lib/mjsonwp/routes.js
66
module Commands
7-
COMMAND_NO_ARG = {
8-
# Common
9-
shake: [:post, 'session/:session_id/appium/device/shake'.freeze],
10-
launch_app: [:post, 'session/:session_id/appium/app/launch'.freeze],
11-
close_app: [:post, 'session/:session_id/appium/app/close'.freeze],
12-
reset: [:post, 'session/:session_id/appium/app/reset'.freeze],
13-
device_locked?: [:post, 'session/:session_id/appium/device/is_locked'.freeze],
14-
unlock: [:post, 'session/:session_id/appium/device/unlock'.freeze],
15-
device_time: [:get, 'session/:session_id/appium/device/system_time'.freeze],
16-
current_context: [:get, 'session/:session_id/context'.freeze],
17-
18-
# Android
19-
open_notifications: [:post, 'session/:session_id/appium/device/open_notifications'.freeze],
20-
toggle_airplane_mode: [:post, 'session/:session_id/appium/device/toggle_airplane_mode'.freeze],
21-
current_activity: [:get, 'session/:session_id/appium/device/current_activity'.freeze],
22-
current_package: [:get, 'session/:session_id/appium/device/current_package'.freeze],
23-
get_system_bars: [:get, 'session/:session_id/appium/device/system_bars'.freeze],
24-
get_display_density: [:get, 'session/:session_id/appium/device/display_density'.freeze],
25-
is_keyboard_shown: [:get, 'session/:session_id/appium/device/is_keyboard_shown'.freeze],
26-
get_network_connection: [:get, 'session/:session_id/network_connection'.freeze], # defined also in OSS
27-
get_performance_data_types: [:post, 'session/:session_id/appium/performanceData/types'.freeze],
28-
toggle_wifi: [:post, 'session/:session_id/appium/device/toggle_wifi'.freeze],
29-
toggle_data: [:post, 'session/:session_id/appium/device/toggle_data'.freeze],
30-
toggle_location_services: [:post, 'session/:session_id/appium/device/toggle_location_services'.freeze]
31-
32-
# iOS
33-
}.freeze
34-
357
# Some commands differ for each driver.
368
COMMAND = {
379
# common
3810
available_contexts: [:get, 'session/:session_id/contexts'.freeze],
3911
set_context: [:post, 'session/:session_id/context'.freeze],
12+
current_context: [:get, 'session/:session_id/context'.freeze],
13+
14+
touch_actions: [:post, 'session/:session_id/touch/perform'.freeze],
15+
multi_touch: [:post, 'session/:session_id/touch/multi/perform'.freeze],
16+
17+
set_immediate_value: [:post, 'session/:session_id/appium/element/:id/value'.freeze],
18+
replace_value: [:post, 'session/:session_id/appium/element/:id/replace_value'.freeze],
19+
20+
launch_app: [:post, 'session/:session_id/appium/app/launch'.freeze],
21+
close_app: [:post, 'session/:session_id/appium/app/close'.freeze],
22+
reset: [:post, 'session/:session_id/appium/app/reset'.freeze],
23+
background_app: [:post, 'session/:session_id/appium/app/background'.freeze],
4024
app_strings: [:post, 'session/:session_id/appium/app/strings'.freeze],
25+
26+
device_locked?: [:post, 'session/:session_id/appium/device/is_locked'.freeze],
27+
unlock: [:post, 'session/:session_id/appium/device/unlock'.freeze],
4128
lock: [:post, 'session/:session_id/appium/device/lock'.freeze],
29+
device_time: [:get, 'session/:session_id/appium/device/system_time'.freeze],
4230
install_app: [:post, 'session/:session_id/appium/device/install_app'.freeze],
4331
remove_app: [:post, 'session/:session_id/appium/device/remove_app'.freeze],
4432
app_installed?: [:post, 'session/:session_id/appium/device/app_installed'.freeze],
4533
activate_app: [:post, 'session/:session_id/appium/device/activate_app'.freeze],
4634
terminate_app: [:post, 'session/:session_id/appium/device/terminate_app'.freeze],
4735
app_state: [:post, 'session/:session_id/appium/device/app_state'.freeze],
48-
background_app: [:post, 'session/:session_id/appium/app/background'.freeze],
36+
shake: [:post, 'session/:session_id/appium/device/shake'.freeze],
4937
hide_keyboard: [:post, 'session/:session_id/appium/device/hide_keyboard'.freeze],
5038
press_keycode: [:post, 'session/:session_id/appium/device/press_keycode'.freeze],
5139
long_press_keycode: [:post, 'session/:session_id/appium/device/long_press_keycode'.freeze],
5240
# keyevent is only for Selendroid
5341
keyevent: [:post, 'session/:session_id/appium/device/keyevent'.freeze],
54-
set_immediate_value: [:post, 'session/:session_id/appium/element/:id/value'.freeze],
55-
replace_value: [:post, 'session/:session_id/appium/element/:id/replace_value'.freeze],
5642
push_file: [:post, 'session/:session_id/appium/device/push_file'.freeze],
5743
pull_file: [:post, 'session/:session_id/appium/device/pull_file'.freeze],
5844
pull_folder: [:post, 'session/:session_id/appium/device/pull_folder'.freeze],
5945
get_clipboard: [:post, 'session/:session_id/appium/device/get_clipboard'.freeze],
6046
set_clipboard: [:post, 'session/:session_id/appium/device/set_clipboard'.freeze],
6147
get_settings: [:get, 'session/:session_id/appium/settings'.freeze],
6248
update_settings: [:post, 'session/:session_id/appium/settings'.freeze],
63-
touch_actions: [:post, 'session/:session_id/touch/perform'.freeze],
64-
multi_touch: [:post, 'session/:session_id/touch/multi/perform'.freeze],
6549
stop_recording_screen: [:post, 'session/:session_id/appium/stop_recording_screen'.freeze],
6650
start_recording_screen: [:post, 'session/:session_id/appium/start_recording_screen'.freeze]
6751
}.freeze
6852

6953
COMMAND_ANDROID = {
54+
open_notifications: [:post, 'session/:session_id/appium/device/open_notifications'.freeze],
55+
toggle_airplane_mode: [:post, 'session/:session_id/appium/device/toggle_airplane_mode'.freeze],
7056
start_activity: [:post, 'session/:session_id/appium/device/start_activity'.freeze],
57+
current_activity: [:get, 'session/:session_id/appium/device/current_activity'.freeze],
58+
current_package: [:get, 'session/:session_id/appium/device/current_package'.freeze],
59+
get_system_bars: [:get, 'session/:session_id/appium/device/system_bars'.freeze],
60+
get_display_density: [:get, 'session/:session_id/appium/device/display_density'.freeze],
61+
is_keyboard_shown: [:get, 'session/:session_id/appium/device/is_keyboard_shown'.freeze],
62+
toggle_wifi: [:post, 'session/:session_id/appium/device/toggle_wifi'.freeze],
63+
toggle_data: [:post, 'session/:session_id/appium/device/toggle_data'.freeze],
64+
toggle_location_services: [:post, 'session/:session_id/appium/device/toggle_location_services'.freeze],
7165
end_coverage: [:post, 'session/:session_id/appium/app/end_test_coverage'.freeze],
72-
set_network_connection: [:post, 'session/:session_id/network_connection'.freeze], # defined also in OSS
66+
get_performance_data_types: [:post, 'session/:session_id/appium/performanceData/types'.freeze],
7367
get_performance_data: [:post, 'session/:session_id/appium/getPerformanceData'.freeze],
68+
get_network_connection: [:get, 'session/:session_id/network_connection'.freeze], # defined also in OSS
69+
set_network_connection: [:post, 'session/:session_id/network_connection'.freeze], # defined also in OSS
7470

7571
# only emulator
7672
send_sms: [:post, 'session/:session_id/appium/device/send_sms'.freeze],
@@ -87,8 +83,7 @@ module Commands
8783
toggle_touch_id_enrollment: [:post, 'session/:session_id/appium/simulator/toggle_touch_id_enrollment'.freeze]
8884
}.freeze
8985

90-
COMMANDS = {}.merge(COMMAND).merge(COMMAND_ANDROID).merge(COMMAND_IOS)
91-
.merge(COMMAND_NO_ARG).freeze
86+
COMMANDS = {}.merge(COMMAND).merge(COMMAND_ANDROID).merge(COMMAND_IOS).freeze
9287

9388
COMMANDS_EXTEND_MJSONWP = COMMANDS.merge(::Appium::Core::Base::Commands::OSS).merge(
9489
{

0 commit comments

Comments
 (0)