selenium-webdriver 3.141.0 → 3.142.3
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/CHANGES +125 -0
- data/Gemfile +2 -0
- data/LICENSE +1 -1
- data/lib/selenium-webdriver.rb +2 -0
- data/lib/selenium/server.rb +9 -7
- data/lib/selenium/webdriver.rb +3 -1
- data/lib/selenium/webdriver/atoms.rb +20 -1
- data/lib/selenium/webdriver/atoms/getAttribute.js +6 -7
- data/lib/selenium/webdriver/atoms/isDisplayed.js +60 -59
- data/lib/selenium/webdriver/chrome.rb +10 -4
- data/lib/selenium/webdriver/chrome/bridge.rb +5 -3
- data/lib/selenium/webdriver/chrome/driver.rb +10 -13
- data/lib/selenium/webdriver/chrome/options.rb +4 -4
- data/lib/selenium/webdriver/chrome/profile.rb +4 -3
- data/lib/selenium/webdriver/chrome/service.rb +13 -13
- data/lib/selenium/webdriver/common.rb +4 -2
- data/lib/selenium/webdriver/common/action_builder.rb +2 -0
- data/lib/selenium/webdriver/common/alert.rb +2 -0
- data/lib/selenium/webdriver/common/bridge_helper.rb +8 -5
- data/lib/selenium/webdriver/common/driver.rb +22 -7
- data/lib/selenium/webdriver/common/driver_extensions/downloads_files.rb +2 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_addons.rb +2 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_debugger.rb +2 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_location.rb +3 -3
- data/lib/selenium/webdriver/common/driver_extensions/has_network_conditions.rb +2 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_network_connection.rb +3 -1
- data/lib/selenium/webdriver/common/driver_extensions/has_permissions.rb +2 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_remote_status.rb +2 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_session_id.rb +2 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_touch_screen.rb +2 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_web_storage.rb +2 -0
- data/lib/selenium/webdriver/common/driver_extensions/rotatable.rb +3 -1
- data/lib/selenium/webdriver/common/driver_extensions/takes_screenshot.rb +2 -0
- data/lib/selenium/webdriver/common/driver_extensions/uploads_files.rb +3 -3
- data/lib/selenium/webdriver/common/element.rb +3 -1
- data/lib/selenium/webdriver/common/error.rb +74 -18
- data/lib/selenium/webdriver/common/file_reaper.rb +3 -3
- data/lib/selenium/webdriver/common/html5/local_storage.rb +2 -0
- data/lib/selenium/webdriver/common/html5/session_storage.rb +2 -0
- data/lib/selenium/webdriver/common/html5/shared_web_storage.rb +4 -1
- data/lib/selenium/webdriver/common/interactions/input_device.rb +3 -0
- data/lib/selenium/webdriver/common/interactions/interaction.rb +3 -0
- data/lib/selenium/webdriver/common/interactions/interactions.rb +3 -1
- data/lib/selenium/webdriver/common/interactions/key_actions.rb +2 -0
- data/lib/selenium/webdriver/common/interactions/key_input.rb +4 -0
- data/lib/selenium/webdriver/common/interactions/none_input.rb +3 -0
- data/lib/selenium/webdriver/common/interactions/pointer_actions.rb +2 -0
- data/lib/selenium/webdriver/common/interactions/pointer_input.rb +7 -0
- data/lib/selenium/webdriver/common/keyboard.rb +4 -1
- data/lib/selenium/webdriver/common/keys.rb +3 -0
- data/lib/selenium/webdriver/common/log_entry.rb +4 -2
- data/lib/selenium/webdriver/common/logger.rb +15 -40
- data/lib/selenium/webdriver/common/logs.rb +2 -0
- data/lib/selenium/webdriver/common/{options.rb → manager.rb} +27 -1
- data/lib/selenium/webdriver/common/mouse.rb +3 -0
- data/lib/selenium/webdriver/common/navigation.rb +2 -0
- data/lib/selenium/webdriver/common/platform.rb +26 -30
- data/lib/selenium/webdriver/common/port_prober.rb +6 -19
- data/lib/selenium/webdriver/common/profile_helper.rb +2 -0
- data/lib/selenium/webdriver/common/proxy.rb +13 -5
- data/lib/selenium/webdriver/common/search_context.rb +6 -8
- data/lib/selenium/webdriver/common/service.rb +87 -29
- data/lib/selenium/webdriver/common/socket_lock.rb +10 -3
- data/lib/selenium/webdriver/common/socket_poller.rb +26 -18
- data/lib/selenium/webdriver/common/target_locator.rb +6 -4
- data/lib/selenium/webdriver/common/timeouts.rb +2 -0
- data/lib/selenium/webdriver/common/touch_action_builder.rb +5 -6
- data/lib/selenium/webdriver/common/touch_screen.rb +4 -1
- data/lib/selenium/webdriver/common/w3c_action_builder.rb +3 -0
- data/lib/selenium/webdriver/common/{w3c_options.rb → w3c_manager.rb} +3 -1
- data/lib/selenium/webdriver/common/wait.rb +13 -5
- data/lib/selenium/webdriver/common/window.rb +2 -0
- data/lib/selenium/webdriver/common/zipper.rb +3 -3
- data/lib/selenium/webdriver/edge.rb +11 -5
- data/lib/selenium/webdriver/edge/bridge.rb +2 -0
- data/lib/selenium/webdriver/edge/driver.rb +5 -12
- data/lib/selenium/webdriver/edge/options.rb +3 -0
- data/lib/selenium/webdriver/edge/service.rb +8 -12
- data/lib/selenium/webdriver/firefox.rb +10 -4
- data/lib/selenium/webdriver/firefox/binary.rb +7 -6
- data/lib/selenium/webdriver/firefox/bridge.rb +47 -0
- data/lib/selenium/webdriver/firefox/driver.rb +2 -0
- data/lib/selenium/webdriver/firefox/extension.rb +4 -4
- data/lib/selenium/webdriver/firefox/launcher.rb +3 -0
- data/lib/selenium/webdriver/firefox/legacy/driver.rb +7 -3
- data/lib/selenium/webdriver/firefox/marionette/bridge.rb +4 -2
- data/lib/selenium/webdriver/firefox/marionette/driver.rb +5 -11
- data/lib/selenium/webdriver/firefox/options.rb +20 -7
- data/lib/selenium/webdriver/firefox/profile.rb +7 -8
- data/lib/selenium/webdriver/firefox/profiles_ini.rb +3 -0
- data/lib/selenium/webdriver/firefox/service.rb +8 -19
- data/lib/selenium/webdriver/firefox/util.rb +2 -0
- data/lib/selenium/webdriver/ie.rb +10 -4
- data/lib/selenium/webdriver/ie/driver.rb +4 -10
- data/lib/selenium/webdriver/ie/options.rb +4 -2
- data/lib/selenium/webdriver/ie/service.rb +8 -12
- data/lib/selenium/webdriver/remote.rb +2 -0
- data/lib/selenium/webdriver/remote/bridge.rb +6 -4
- data/lib/selenium/webdriver/remote/capabilities.rb +23 -10
- data/lib/selenium/webdriver/remote/commands.rb +156 -0
- data/lib/selenium/webdriver/remote/driver.rb +2 -0
- data/lib/selenium/webdriver/remote/http/common.rb +11 -4
- data/lib/selenium/webdriver/remote/http/curb.rb +4 -2
- data/lib/selenium/webdriver/remote/http/default.rb +31 -25
- data/lib/selenium/webdriver/remote/http/persistent.rb +3 -1
- data/lib/selenium/webdriver/remote/oss/bridge.rb +5 -2
- data/lib/selenium/webdriver/remote/oss/commands.rb +106 -104
- data/lib/selenium/webdriver/remote/response.rb +11 -3
- data/lib/selenium/webdriver/remote/server_error.rb +2 -0
- data/lib/selenium/webdriver/remote/w3c/bridge.rb +28 -13
- data/lib/selenium/webdriver/remote/w3c/capabilities.rb +37 -21
- data/lib/selenium/webdriver/remote/w3c/commands.rb +61 -58
- data/lib/selenium/webdriver/safari.rb +11 -4
- data/lib/selenium/webdriver/safari/bridge.rb +5 -3
- data/lib/selenium/webdriver/safari/driver.rb +8 -10
- data/lib/selenium/webdriver/safari/options.rb +2 -0
- data/lib/selenium/webdriver/safari/service.rb +6 -25
- data/lib/selenium/webdriver/support.rb +2 -0
- data/lib/selenium/webdriver/support/abstract_event_listener.rb +2 -0
- data/lib/selenium/webdriver/support/block_event_listener.rb +3 -1
- data/lib/selenium/webdriver/support/color.rb +11 -9
- data/lib/selenium/webdriver/support/escaper.rb +2 -0
- data/lib/selenium/webdriver/support/event_firing_bridge.rb +3 -1
- data/lib/selenium/webdriver/support/select.rb +19 -18
- data/lib/selenium/webdriver/version.rb +3 -1
- data/selenium-webdriver.gemspec +14 -7
- metadata +89 -23
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
# Licensed to the Software Freedom Conservancy (SFC) under one
|
|
2
4
|
# or more contributor license agreements. See the NOTICE file
|
|
3
5
|
# distributed with this work for additional information
|
|
@@ -24,7 +26,7 @@ module Selenium
|
|
|
24
26
|
# @api private
|
|
25
27
|
class Persistent < Default
|
|
26
28
|
def close
|
|
27
|
-
@http
|
|
29
|
+
@http&.shutdown
|
|
28
30
|
end
|
|
29
31
|
|
|
30
32
|
private
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
# Licensed to the Software Freedom Conservancy (SFC) under one
|
|
2
4
|
# or more contributor license agreements. See the NOTICE file
|
|
3
5
|
# distributed with this work for additional information
|
|
@@ -279,8 +281,8 @@ module Selenium
|
|
|
279
281
|
# cookies
|
|
280
282
|
#
|
|
281
283
|
|
|
282
|
-
def
|
|
283
|
-
@
|
|
284
|
+
def manage
|
|
285
|
+
@manage ||= WebDriver::Manager.new(self)
|
|
284
286
|
end
|
|
285
287
|
|
|
286
288
|
def add_cookie(cookie)
|
|
@@ -571,6 +573,7 @@ module Selenium
|
|
|
571
573
|
|
|
572
574
|
def assert_javascript_enabled
|
|
573
575
|
return if capabilities.javascript_enabled?
|
|
576
|
+
|
|
574
577
|
raise Error::UnsupportedOperationError, 'underlying webdriver instance does not support javascript'
|
|
575
578
|
end
|
|
576
579
|
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
# Licensed to the Software Freedom Conservancy (SFC) under one
|
|
2
4
|
# or more contributor license agreements. See the NOTICE file
|
|
3
5
|
# distributed with this work for additional information
|
|
@@ -28,190 +30,190 @@ module Selenium
|
|
|
28
30
|
class Bridge
|
|
29
31
|
|
|
30
32
|
COMMANDS = {
|
|
31
|
-
get_capabilities: [:get, 'session/:session_id'
|
|
32
|
-
status: [:get, 'status'
|
|
33
|
+
get_capabilities: [:get, 'session/:session_id'],
|
|
34
|
+
status: [:get, 'status'],
|
|
33
35
|
|
|
34
36
|
#
|
|
35
37
|
# basic driver
|
|
36
38
|
#
|
|
37
39
|
|
|
38
|
-
get_current_url: [:get, 'session/:session_id/url'
|
|
39
|
-
get: [:post, 'session/:session_id/url'
|
|
40
|
-
go_forward: [:post, 'session/:session_id/forward'
|
|
41
|
-
go_back: [:post, 'session/:session_id/back'
|
|
42
|
-
refresh: [:post, 'session/:session_id/refresh'
|
|
43
|
-
quit: [:delete, 'session/:session_id'
|
|
44
|
-
close: [:delete, 'session/:session_id/window'
|
|
45
|
-
get_page_source: [:get, 'session/:session_id/source'
|
|
46
|
-
get_title: [:get, 'session/:session_id/title'
|
|
47
|
-
find_element: [:post, 'session/:session_id/element'
|
|
48
|
-
find_elements: [:post, 'session/:session_id/elements'
|
|
49
|
-
get_active_element: [:post, 'session/:session_id/element/active'
|
|
40
|
+
get_current_url: [:get, 'session/:session_id/url'],
|
|
41
|
+
get: [:post, 'session/:session_id/url'],
|
|
42
|
+
go_forward: [:post, 'session/:session_id/forward'],
|
|
43
|
+
go_back: [:post, 'session/:session_id/back'],
|
|
44
|
+
refresh: [:post, 'session/:session_id/refresh'],
|
|
45
|
+
quit: [:delete, 'session/:session_id'],
|
|
46
|
+
close: [:delete, 'session/:session_id/window'],
|
|
47
|
+
get_page_source: [:get, 'session/:session_id/source'],
|
|
48
|
+
get_title: [:get, 'session/:session_id/title'],
|
|
49
|
+
find_element: [:post, 'session/:session_id/element'],
|
|
50
|
+
find_elements: [:post, 'session/:session_id/elements'],
|
|
51
|
+
get_active_element: [:post, 'session/:session_id/element/active'],
|
|
50
52
|
|
|
51
53
|
#
|
|
52
54
|
# window handling
|
|
53
55
|
#
|
|
54
56
|
|
|
55
|
-
get_current_window_handle: [:get, 'session/:session_id/window_handle'
|
|
56
|
-
get_window_handles: [:get, 'session/:session_id/window_handles'
|
|
57
|
-
set_window_size: [:post, 'session/:session_id/window/:window_handle/size'
|
|
58
|
-
set_window_position: [:post, 'session/:session_id/window/:window_handle/position'
|
|
59
|
-
get_window_size: [:get, 'session/:session_id/window/:window_handle/size'
|
|
60
|
-
get_window_position: [:get, 'session/:session_id/window/:window_handle/position'
|
|
61
|
-
maximize_window: [:post, 'session/:session_id/window/:window_handle/maximize'
|
|
57
|
+
get_current_window_handle: [:get, 'session/:session_id/window_handle'],
|
|
58
|
+
get_window_handles: [:get, 'session/:session_id/window_handles'],
|
|
59
|
+
set_window_size: [:post, 'session/:session_id/window/:window_handle/size'],
|
|
60
|
+
set_window_position: [:post, 'session/:session_id/window/:window_handle/position'],
|
|
61
|
+
get_window_size: [:get, 'session/:session_id/window/:window_handle/size'],
|
|
62
|
+
get_window_position: [:get, 'session/:session_id/window/:window_handle/position'],
|
|
63
|
+
maximize_window: [:post, 'session/:session_id/window/:window_handle/maximize'],
|
|
62
64
|
|
|
63
65
|
#
|
|
64
66
|
# script execution
|
|
65
67
|
#
|
|
66
68
|
|
|
67
|
-
execute_script: [:post, 'session/:session_id/execute'
|
|
68
|
-
execute_async_script: [:post, 'session/:session_id/execute_async'
|
|
69
|
+
execute_script: [:post, 'session/:session_id/execute'],
|
|
70
|
+
execute_async_script: [:post, 'session/:session_id/execute_async'],
|
|
69
71
|
|
|
70
72
|
#
|
|
71
73
|
# screenshot
|
|
72
74
|
#
|
|
73
75
|
|
|
74
|
-
screenshot: [:get, 'session/:session_id/screenshot'
|
|
76
|
+
screenshot: [:get, 'session/:session_id/screenshot'],
|
|
75
77
|
|
|
76
78
|
#
|
|
77
79
|
# alerts
|
|
78
80
|
#
|
|
79
81
|
|
|
80
|
-
dismiss_alert: [:post, 'session/:session_id/dismiss_alert'
|
|
81
|
-
accept_alert: [:post, 'session/:session_id/accept_alert'
|
|
82
|
-
get_alert_text: [:get, 'session/:session_id/alert_text'
|
|
83
|
-
set_alert_value: [:post, 'session/:session_id/alert_text'
|
|
84
|
-
set_authentication: [:post, 'session/:session_id/alert/credentials'
|
|
82
|
+
dismiss_alert: [:post, 'session/:session_id/dismiss_alert'],
|
|
83
|
+
accept_alert: [:post, 'session/:session_id/accept_alert'],
|
|
84
|
+
get_alert_text: [:get, 'session/:session_id/alert_text'],
|
|
85
|
+
set_alert_value: [:post, 'session/:session_id/alert_text'],
|
|
86
|
+
set_authentication: [:post, 'session/:session_id/alert/credentials'],
|
|
85
87
|
|
|
86
88
|
#
|
|
87
89
|
# target locator
|
|
88
90
|
#
|
|
89
91
|
|
|
90
|
-
switch_to_frame: [:post, 'session/:session_id/frame'
|
|
91
|
-
switch_to_parent_frame: [:post, 'session/:session_id/frame/parent'
|
|
92
|
-
switch_to_window: [:post, 'session/:session_id/window'
|
|
92
|
+
switch_to_frame: [:post, 'session/:session_id/frame'],
|
|
93
|
+
switch_to_parent_frame: [:post, 'session/:session_id/frame/parent'],
|
|
94
|
+
switch_to_window: [:post, 'session/:session_id/window'],
|
|
93
95
|
|
|
94
96
|
#
|
|
95
97
|
# options
|
|
96
98
|
#
|
|
97
99
|
|
|
98
|
-
get_cookies: [:get, 'session/:session_id/cookie'
|
|
99
|
-
add_cookie: [:post, 'session/:session_id/cookie'
|
|
100
|
-
delete_all_cookies: [:delete, 'session/:session_id/cookie'
|
|
101
|
-
delete_cookie: [:delete, 'session/:session_id/cookie/:name'
|
|
100
|
+
get_cookies: [:get, 'session/:session_id/cookie'],
|
|
101
|
+
add_cookie: [:post, 'session/:session_id/cookie'],
|
|
102
|
+
delete_all_cookies: [:delete, 'session/:session_id/cookie'],
|
|
103
|
+
delete_cookie: [:delete, 'session/:session_id/cookie/:name'],
|
|
102
104
|
|
|
103
105
|
#
|
|
104
106
|
# timeouts
|
|
105
107
|
#
|
|
106
108
|
|
|
107
|
-
implicitly_wait: [:post, 'session/:session_id/timeouts/implicit_wait'
|
|
108
|
-
set_script_timeout: [:post, 'session/:session_id/timeouts/async_script'
|
|
109
|
-
set_timeout: [:post, 'session/:session_id/timeouts'
|
|
109
|
+
implicitly_wait: [:post, 'session/:session_id/timeouts/implicit_wait'],
|
|
110
|
+
set_script_timeout: [:post, 'session/:session_id/timeouts/async_script'],
|
|
111
|
+
set_timeout: [:post, 'session/:session_id/timeouts'],
|
|
110
112
|
|
|
111
113
|
#
|
|
112
114
|
# element
|
|
113
115
|
#
|
|
114
116
|
|
|
115
|
-
describe_element: [:get, 'session/:session_id/element/:id'
|
|
116
|
-
find_child_element: [:post, 'session/:session_id/element/:id/element'
|
|
117
|
-
find_child_elements: [:post, 'session/:session_id/element/:id/elements'
|
|
118
|
-
click_element: [:post, 'session/:session_id/element/:id/click'
|
|
119
|
-
submit_element: [:post, 'session/:session_id/element/:id/submit'
|
|
120
|
-
get_element_value: [:get, 'session/:session_id/element/:id/value'
|
|
121
|
-
send_keys_to_element: [:post, 'session/:session_id/element/:id/value'
|
|
122
|
-
upload_file: [:post, 'session/:session_id/file'
|
|
123
|
-
get_element_tag_name: [:get, 'session/:session_id/element/:id/name'
|
|
124
|
-
clear_element: [:post, 'session/:session_id/element/:id/clear'
|
|
125
|
-
is_element_selected: [:get, 'session/:session_id/element/:id/selected'
|
|
126
|
-
is_element_enabled: [:get, 'session/:session_id/element/:id/enabled'
|
|
127
|
-
get_element_attribute: [:get, 'session/:session_id/element/:id/attribute/:name'
|
|
128
|
-
element_equals: [:get, 'session/:session_id/element/:id/equals/:other'
|
|
129
|
-
is_element_displayed: [:get, 'session/:session_id/element/:id/displayed'
|
|
130
|
-
get_element_location: [:get, 'session/:session_id/element/:id/location'
|
|
131
|
-
get_element_location_once_scrolled_into_view: [:get, 'session/:session_id/element/:id/location_in_view'
|
|
132
|
-
get_element_size: [:get, 'session/:session_id/element/:id/size'
|
|
133
|
-
drag_element: [:post, 'session/:session_id/element/:id/drag'
|
|
134
|
-
get_element_value_of_css_property: [:get, 'session/:session_id/element/:id/css/:property_name'
|
|
135
|
-
get_element_text: [:get, 'session/:session_id/element/:id/text'
|
|
117
|
+
describe_element: [:get, 'session/:session_id/element/:id'],
|
|
118
|
+
find_child_element: [:post, 'session/:session_id/element/:id/element'],
|
|
119
|
+
find_child_elements: [:post, 'session/:session_id/element/:id/elements'],
|
|
120
|
+
click_element: [:post, 'session/:session_id/element/:id/click'],
|
|
121
|
+
submit_element: [:post, 'session/:session_id/element/:id/submit'],
|
|
122
|
+
get_element_value: [:get, 'session/:session_id/element/:id/value'],
|
|
123
|
+
send_keys_to_element: [:post, 'session/:session_id/element/:id/value'],
|
|
124
|
+
upload_file: [:post, 'session/:session_id/file'],
|
|
125
|
+
get_element_tag_name: [:get, 'session/:session_id/element/:id/name'],
|
|
126
|
+
clear_element: [:post, 'session/:session_id/element/:id/clear'],
|
|
127
|
+
is_element_selected: [:get, 'session/:session_id/element/:id/selected'],
|
|
128
|
+
is_element_enabled: [:get, 'session/:session_id/element/:id/enabled'],
|
|
129
|
+
get_element_attribute: [:get, 'session/:session_id/element/:id/attribute/:name'],
|
|
130
|
+
element_equals: [:get, 'session/:session_id/element/:id/equals/:other'],
|
|
131
|
+
is_element_displayed: [:get, 'session/:session_id/element/:id/displayed'],
|
|
132
|
+
get_element_location: [:get, 'session/:session_id/element/:id/location'],
|
|
133
|
+
get_element_location_once_scrolled_into_view: [:get, 'session/:session_id/element/:id/location_in_view'],
|
|
134
|
+
get_element_size: [:get, 'session/:session_id/element/:id/size'],
|
|
135
|
+
drag_element: [:post, 'session/:session_id/element/:id/drag'],
|
|
136
|
+
get_element_value_of_css_property: [:get, 'session/:session_id/element/:id/css/:property_name'],
|
|
137
|
+
get_element_text: [:get, 'session/:session_id/element/:id/text'],
|
|
136
138
|
|
|
137
139
|
#
|
|
138
140
|
# rotatable
|
|
139
141
|
#
|
|
140
142
|
|
|
141
|
-
get_screen_orientation: [:get, 'session/:session_id/orientation'
|
|
142
|
-
set_screen_orientation: [:post, 'session/:session_id/orientation'
|
|
143
|
+
get_screen_orientation: [:get, 'session/:session_id/orientation'],
|
|
144
|
+
set_screen_orientation: [:post, 'session/:session_id/orientation'],
|
|
143
145
|
|
|
144
146
|
#
|
|
145
147
|
# interactions API
|
|
146
148
|
#
|
|
147
149
|
|
|
148
|
-
click: [:post, 'session/:session_id/click'
|
|
149
|
-
double_click: [:post, 'session/:session_id/doubleclick'
|
|
150
|
-
mouse_down: [:post, 'session/:session_id/buttondown'
|
|
151
|
-
mouse_up: [:post, 'session/:session_id/buttonup'
|
|
152
|
-
mouse_move_to: [:post, 'session/:session_id/moveto'
|
|
153
|
-
send_modifier_key_to_active_element: [:post, 'session/:session_id/modifier'
|
|
154
|
-
send_keys_to_active_element: [:post, 'session/:session_id/keys'
|
|
150
|
+
click: [:post, 'session/:session_id/click'],
|
|
151
|
+
double_click: [:post, 'session/:session_id/doubleclick'],
|
|
152
|
+
mouse_down: [:post, 'session/:session_id/buttondown'],
|
|
153
|
+
mouse_up: [:post, 'session/:session_id/buttonup'],
|
|
154
|
+
mouse_move_to: [:post, 'session/:session_id/moveto'],
|
|
155
|
+
send_modifier_key_to_active_element: [:post, 'session/:session_id/modifier'],
|
|
156
|
+
send_keys_to_active_element: [:post, 'session/:session_id/keys'],
|
|
155
157
|
|
|
156
158
|
#
|
|
157
159
|
# html 5
|
|
158
160
|
#
|
|
159
161
|
|
|
160
|
-
execute_sql: [:post, 'session/:session_id/execute_sql'
|
|
162
|
+
execute_sql: [:post, 'session/:session_id/execute_sql'],
|
|
161
163
|
|
|
162
|
-
get_location: [:get, 'session/:session_id/location'
|
|
163
|
-
set_location: [:post, 'session/:session_id/location'
|
|
164
|
+
get_location: [:get, 'session/:session_id/location'],
|
|
165
|
+
set_location: [:post, 'session/:session_id/location'],
|
|
164
166
|
|
|
165
|
-
get_app_cache: [:get, 'session/:session_id/application_cache'
|
|
166
|
-
get_app_cache_status: [:get, 'session/:session_id/application_cache/status'
|
|
167
|
-
clear_app_cache: [:delete, 'session/:session_id/application_cache/clear'
|
|
167
|
+
get_app_cache: [:get, 'session/:session_id/application_cache'],
|
|
168
|
+
get_app_cache_status: [:get, 'session/:session_id/application_cache/status'],
|
|
169
|
+
clear_app_cache: [:delete, 'session/:session_id/application_cache/clear'],
|
|
168
170
|
|
|
169
|
-
get_network_connection: [:get, 'session/:session_id/network_connection'
|
|
170
|
-
set_network_connection: [:post, 'session/:session_id/network_connection'
|
|
171
|
+
get_network_connection: [:get, 'session/:session_id/network_connection'],
|
|
172
|
+
set_network_connection: [:post, 'session/:session_id/network_connection'],
|
|
171
173
|
|
|
172
|
-
get_local_storage_item: [:get, 'session/:session_id/local_storage/key/:key'
|
|
173
|
-
remove_local_storage_item: [:delete, 'session/:session_id/local_storage/key/:key'
|
|
174
|
-
get_local_storage_keys: [:get, 'session/:session_id/local_storage'
|
|
175
|
-
set_local_storage_item: [:post, 'session/:session_id/local_storage'
|
|
176
|
-
clear_local_storage: [:delete, 'session/:session_id/local_storage'
|
|
177
|
-
get_local_storage_size: [:get, 'session/:session_id/local_storage/size'
|
|
174
|
+
get_local_storage_item: [:get, 'session/:session_id/local_storage/key/:key'],
|
|
175
|
+
remove_local_storage_item: [:delete, 'session/:session_id/local_storage/key/:key'],
|
|
176
|
+
get_local_storage_keys: [:get, 'session/:session_id/local_storage'],
|
|
177
|
+
set_local_storage_item: [:post, 'session/:session_id/local_storage'],
|
|
178
|
+
clear_local_storage: [:delete, 'session/:session_id/local_storage'],
|
|
179
|
+
get_local_storage_size: [:get, 'session/:session_id/local_storage/size'],
|
|
178
180
|
|
|
179
|
-
get_session_storage_item: [:get, 'session/:session_id/session_storage/key/:key'
|
|
180
|
-
remove_session_storage_item: [:delete, 'session/:session_id/session_storage/key/:key'
|
|
181
|
-
get_session_storage_keys: [:get, 'session/:session_id/session_storage'
|
|
182
|
-
set_session_storage_item: [:post, 'session/:session_id/session_storage'
|
|
183
|
-
clear_session_storage: [:delete, 'session/:session_id/session_storage'
|
|
184
|
-
get_session_storage_size: [:get, 'session/:session_id/session_storage/size'
|
|
181
|
+
get_session_storage_item: [:get, 'session/:session_id/session_storage/key/:key'],
|
|
182
|
+
remove_session_storage_item: [:delete, 'session/:session_id/session_storage/key/:key'],
|
|
183
|
+
get_session_storage_keys: [:get, 'session/:session_id/session_storage'],
|
|
184
|
+
set_session_storage_item: [:post, 'session/:session_id/session_storage'],
|
|
185
|
+
clear_session_storage: [:delete, 'session/:session_id/session_storage'],
|
|
186
|
+
get_session_storage_size: [:get, 'session/:session_id/session_storage/size'],
|
|
185
187
|
|
|
186
188
|
#
|
|
187
189
|
# ime
|
|
188
190
|
#
|
|
189
191
|
|
|
190
|
-
ime_get_available_engines: [:get, 'session/:session_id/ime/available_engines'
|
|
191
|
-
ime_get_active_engine: [:get, 'session/:session_id/ime/active_engine'
|
|
192
|
-
ime_is_activated: [:get, 'session/:session_id/ime/activated'
|
|
193
|
-
ime_deactivate: [:post, 'session/:session_id/ime/deactivate'
|
|
194
|
-
ime_activate_engine: [:post, 'session/:session_id/ime/activate'
|
|
192
|
+
ime_get_available_engines: [:get, 'session/:session_id/ime/available_engines'],
|
|
193
|
+
ime_get_active_engine: [:get, 'session/:session_id/ime/active_engine'],
|
|
194
|
+
ime_is_activated: [:get, 'session/:session_id/ime/activated'],
|
|
195
|
+
ime_deactivate: [:post, 'session/:session_id/ime/deactivate'],
|
|
196
|
+
ime_activate_engine: [:post, 'session/:session_id/ime/activate'],
|
|
195
197
|
|
|
196
198
|
#
|
|
197
199
|
# touch
|
|
198
200
|
#
|
|
199
201
|
|
|
200
|
-
touch_single_tap: [:post, 'session/:session_id/touch/click'
|
|
201
|
-
touch_double_tap: [:post, 'session/:session_id/touch/doubleclick'
|
|
202
|
-
touch_long_press: [:post, 'session/:session_id/touch/longclick'
|
|
203
|
-
touch_down: [:post, 'session/:session_id/touch/down'
|
|
204
|
-
touch_up: [:post, 'session/:session_id/touch/up'
|
|
205
|
-
touch_move: [:post, 'session/:session_id/touch/move'
|
|
206
|
-
touch_scroll: [:post, 'session/:session_id/touch/scroll'
|
|
207
|
-
touch_flick: [:post, 'session/:session_id/touch/flick'
|
|
202
|
+
touch_single_tap: [:post, 'session/:session_id/touch/click'],
|
|
203
|
+
touch_double_tap: [:post, 'session/:session_id/touch/doubleclick'],
|
|
204
|
+
touch_long_press: [:post, 'session/:session_id/touch/longclick'],
|
|
205
|
+
touch_down: [:post, 'session/:session_id/touch/down'],
|
|
206
|
+
touch_up: [:post, 'session/:session_id/touch/up'],
|
|
207
|
+
touch_move: [:post, 'session/:session_id/touch/move'],
|
|
208
|
+
touch_scroll: [:post, 'session/:session_id/touch/scroll'],
|
|
209
|
+
touch_flick: [:post, 'session/:session_id/touch/flick'],
|
|
208
210
|
|
|
209
211
|
#
|
|
210
212
|
# logs
|
|
211
213
|
#
|
|
212
214
|
|
|
213
|
-
get_available_log_types: [:get, 'session/:session_id/log/types'
|
|
214
|
-
get_log: [:post, 'session/:session_id/log'
|
|
215
|
+
get_available_log_types: [:get, 'session/:session_id/log/types'],
|
|
216
|
+
get_log: [:post, 'session/:session_id/log']
|
|
215
217
|
}.freeze
|
|
216
218
|
|
|
217
219
|
end # Bridge
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
# Licensed to the Software Freedom Conservancy (SFC) under one
|
|
2
4
|
# or more contributor license agreements. See the NOTICE file
|
|
3
5
|
# distributed with this work for additional information
|
|
@@ -20,7 +22,7 @@ module Selenium
|
|
|
20
22
|
module Remote
|
|
21
23
|
# @api private
|
|
22
24
|
class Response
|
|
23
|
-
STACKTRACE_KEY = 'stackTrace'
|
|
25
|
+
STACKTRACE_KEY = 'stackTrace'
|
|
24
26
|
|
|
25
27
|
attr_reader :code, :payload
|
|
26
28
|
attr_writer :payload
|
|
@@ -49,6 +51,7 @@ module Selenium
|
|
|
49
51
|
when Hash
|
|
50
52
|
msg = val['message']
|
|
51
53
|
return 'unknown error' unless msg
|
|
54
|
+
|
|
52
55
|
msg << ": #{val['alert']['text'].inspect}" if val['alert'].is_a?(Hash) && val['alert']['text']
|
|
53
56
|
msg << " (#{val['class']})" if val['class']
|
|
54
57
|
msg
|
|
@@ -69,12 +72,15 @@ module Selenium
|
|
|
69
72
|
e = error
|
|
70
73
|
raise e if e
|
|
71
74
|
return unless @code.nil? || @code >= 400
|
|
75
|
+
|
|
72
76
|
raise Error::ServerError, self
|
|
73
77
|
end
|
|
74
78
|
|
|
75
79
|
def add_backtrace(ex)
|
|
76
80
|
return unless error_payload.is_a?(Hash)
|
|
77
81
|
|
|
82
|
+
# Legacy Firefox returns String in ['value'], while we expect Hash.
|
|
83
|
+
# Use #dig when Firefox legacy is removed (4.0).
|
|
78
84
|
server_trace = error_payload[STACKTRACE_KEY] ||
|
|
79
85
|
error_payload[STACKTRACE_KEY.downcase] ||
|
|
80
86
|
(error_payload['value'] && error_payload['value'][STACKTRACE_KEY])
|
|
@@ -91,7 +97,7 @@ module Selenium
|
|
|
91
97
|
end
|
|
92
98
|
|
|
93
99
|
def backtrace_from_remote(server_trace)
|
|
94
|
-
server_trace.map
|
|
100
|
+
server_trace.map { |frame|
|
|
95
101
|
next unless frame.is_a?(Hash)
|
|
96
102
|
|
|
97
103
|
file = frame['fileName']
|
|
@@ -104,7 +110,7 @@ module Selenium
|
|
|
104
110
|
meth = 'unknown' if meth.nil? || meth.empty?
|
|
105
111
|
|
|
106
112
|
"[remote server] #{file}:#{line}:in `#{meth}'"
|
|
107
|
-
|
|
113
|
+
}.compact
|
|
108
114
|
end
|
|
109
115
|
|
|
110
116
|
def error_payload
|
|
@@ -115,11 +121,13 @@ module Selenium
|
|
|
115
121
|
|
|
116
122
|
def status
|
|
117
123
|
return unless error_payload.is_a? Hash
|
|
124
|
+
|
|
118
125
|
@status ||= error_payload['status'] || error_payload['error']
|
|
119
126
|
end
|
|
120
127
|
|
|
121
128
|
def value
|
|
122
129
|
return unless error_payload.is_a? Hash
|
|
130
|
+
|
|
123
131
|
@value ||= error_payload['value'] || error_payload['message']
|
|
124
132
|
end
|
|
125
133
|
end # Response
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
# Licensed to the Software Freedom Conservancy (SFC) under one
|
|
2
4
|
# or more contributor license agreements. See the NOTICE file
|
|
3
5
|
# distributed with this work for additional information
|
|
@@ -116,6 +118,20 @@ module Selenium
|
|
|
116
118
|
'return source;')
|
|
117
119
|
end
|
|
118
120
|
|
|
121
|
+
#
|
|
122
|
+
# Create a new top-level browsing context
|
|
123
|
+
# https://w3c.github.io/webdriver/#new-window
|
|
124
|
+
# @param type [String] Supports two values: 'tab' and 'window'.
|
|
125
|
+
# Use 'tab' if you'd like the new window to share an OS-level window
|
|
126
|
+
# with the current browsing context.
|
|
127
|
+
# Use 'window' otherwise
|
|
128
|
+
# @return [Hash] Containing 'handle' with the value of the window handle
|
|
129
|
+
# and 'type' with the value of the created window type
|
|
130
|
+
#
|
|
131
|
+
def new_window(type)
|
|
132
|
+
execute :new_window, {}, {type: type}
|
|
133
|
+
end
|
|
134
|
+
|
|
119
135
|
def switch_to_window(name)
|
|
120
136
|
execute :switch_to_window, {}, {handle: name}
|
|
121
137
|
end
|
|
@@ -162,16 +178,14 @@ module Selenium
|
|
|
162
178
|
end
|
|
163
179
|
|
|
164
180
|
def resize_window(width, height, handle = :current)
|
|
165
|
-
unless handle == :current
|
|
166
|
-
|
|
167
|
-
end
|
|
181
|
+
raise Error::WebDriverError, 'Switch to desired window before changing its size' unless handle == :current
|
|
182
|
+
|
|
168
183
|
set_window_rect(width: width, height: height)
|
|
169
184
|
end
|
|
170
185
|
|
|
171
186
|
def window_size(handle = :current)
|
|
172
|
-
unless handle == :current
|
|
173
|
-
|
|
174
|
-
end
|
|
187
|
+
raise Error::UnsupportedOperationError, 'Switch to desired window before getting its size' unless handle == :current
|
|
188
|
+
|
|
175
189
|
data = execute :get_window_rect
|
|
176
190
|
|
|
177
191
|
Dimension.new data['width'], data['height']
|
|
@@ -182,9 +196,8 @@ module Selenium
|
|
|
182
196
|
end
|
|
183
197
|
|
|
184
198
|
def maximize_window(handle = :current)
|
|
185
|
-
unless handle == :current
|
|
186
|
-
|
|
187
|
-
end
|
|
199
|
+
raise Error::UnsupportedOperationError, 'Switch to desired window before changing its size' unless handle == :current
|
|
200
|
+
|
|
188
201
|
execute :maximize_window
|
|
189
202
|
end
|
|
190
203
|
|
|
@@ -203,7 +216,7 @@ module Selenium
|
|
|
203
216
|
|
|
204
217
|
def set_window_rect(x: nil, y: nil, width: nil, height: nil)
|
|
205
218
|
params = {x: x, y: y, width: width, height: height}
|
|
206
|
-
params.update(params) { |
|
|
219
|
+
params.update(params) { |_k, v| Integer(v) unless v.nil? }
|
|
207
220
|
execute :set_window_rect, {}, params
|
|
208
221
|
end
|
|
209
222
|
|
|
@@ -302,8 +315,8 @@ module Selenium
|
|
|
302
315
|
# cookies
|
|
303
316
|
#
|
|
304
317
|
|
|
305
|
-
def
|
|
306
|
-
@
|
|
318
|
+
def manage
|
|
319
|
+
@manage ||= WebDriver::W3CManager.new(self)
|
|
307
320
|
end
|
|
308
321
|
|
|
309
322
|
def add_cookie(cookie)
|
|
@@ -459,6 +472,7 @@ module Selenium
|
|
|
459
472
|
end
|
|
460
473
|
|
|
461
474
|
def element_attribute(element, name)
|
|
475
|
+
WebDriver.logger.info "Using script for :getAttribute of #{name}"
|
|
462
476
|
execute_atom :getAttribute, element, name
|
|
463
477
|
end
|
|
464
478
|
|
|
@@ -506,6 +520,7 @@ module Selenium
|
|
|
506
520
|
end
|
|
507
521
|
|
|
508
522
|
def element_displayed?(element)
|
|
523
|
+
WebDriver.logger.info 'Using script for :isDisplayed'
|
|
509
524
|
execute_atom :isDisplayed, element
|
|
510
525
|
end
|
|
511
526
|
|
|
@@ -569,7 +584,7 @@ module Selenium
|
|
|
569
584
|
[how, what]
|
|
570
585
|
end
|
|
571
586
|
|
|
572
|
-
ESCAPE_CSS_REGEXP = /(['"\\#.:;,!?+<>=~*^$|%&@`{}\-\[\]\(\)])
|
|
587
|
+
ESCAPE_CSS_REGEXP = /(['"\\#.:;,!?+<>=~*^$|%&@`{}\-\[\]\(\)])/.freeze
|
|
573
588
|
UNICODE_CODE_POINT = 30
|
|
574
589
|
|
|
575
590
|
# Escapes invalid characters in CSS selector.
|