selenium-webdriver 3.0.1 → 3.0.2
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.
- data/CHANGES +17 -0
- data/lib/selenium/webdriver/chrome.rb +13 -13
- data/lib/selenium/webdriver/chrome/bridge.rb +4 -3
- data/lib/selenium/webdriver/chrome/service.rb +6 -4
- data/lib/selenium/webdriver/common.rb +1 -0
- data/lib/selenium/webdriver/common/driver.rb +1 -1
- data/lib/selenium/webdriver/common/element.rb +14 -0
- data/lib/selenium/webdriver/common/options.rb +12 -10
- data/lib/selenium/webdriver/common/port_prober.rb +2 -1
- data/lib/selenium/webdriver/common/service.rb +23 -8
- data/lib/selenium/webdriver/common/w3c_options.rb +45 -0
- data/lib/selenium/webdriver/edge.rb +13 -13
- data/lib/selenium/webdriver/edge/bridge.rb +98 -1
- data/lib/selenium/webdriver/edge/service.rb +6 -4
- data/lib/selenium/webdriver/firefox.rb +13 -13
- data/lib/selenium/webdriver/firefox/extension/webdriver.xpi +0 -0
- data/lib/selenium/webdriver/firefox/service.rb +10 -4
- data/lib/selenium/webdriver/firefox/w3c_bridge.rb +2 -1
- data/lib/selenium/webdriver/ie.rb +13 -13
- data/lib/selenium/webdriver/ie/bridge.rb +3 -1
- data/lib/selenium/webdriver/ie/service.rb +6 -4
- data/lib/selenium/webdriver/phantomjs.rb +13 -9
- data/lib/selenium/webdriver/phantomjs/bridge.rb +2 -1
- data/lib/selenium/webdriver/phantomjs/service.rb +2 -4
- data/lib/selenium/webdriver/remote/bridge.rb +102 -108
- data/lib/selenium/webdriver/remote/commands.rb +188 -185
- data/lib/selenium/webdriver/remote/w3c_bridge.rb +75 -94
- data/lib/selenium/webdriver/remote/w3c_capabilities.rb +3 -3
- data/lib/selenium/webdriver/remote/w3c_commands.rb +108 -104
- data/lib/selenium/webdriver/safari.rb +14 -13
- data/lib/selenium/webdriver/safari/bridge.rb +2 -1
- data/lib/selenium/webdriver/safari/service.rb +16 -4
- data/selenium-webdriver.gemspec +1 -1
- metadata +3 -4
- data/Gemfile.lock +0 -53
- data/lib/selenium/webdriver/edge/legacy_support.rb +0 -117
@@ -25,191 +25,194 @@ module Selenium
|
|
25
25
|
# https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol#command-reference
|
26
26
|
#
|
27
27
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
28
|
+
COMMANDS = {
|
29
|
+
|
30
|
+
new_session: [:post, 'session'.freeze],
|
31
|
+
get_capabilities: [:get, 'session/:session_id'.freeze],
|
32
|
+
status: [:get, 'status'.freeze],
|
33
|
+
|
34
|
+
#
|
35
|
+
# basic driver
|
36
|
+
#
|
37
|
+
|
38
|
+
get_current_url: [:get, 'session/:session_id/url'.freeze],
|
39
|
+
get: [:post, 'session/:session_id/url'.freeze],
|
40
|
+
go_forward: [:post, 'session/:session_id/forward'.freeze],
|
41
|
+
go_back: [:post, 'session/:session_id/back'.freeze],
|
42
|
+
refresh: [:post, 'session/:session_id/refresh'.freeze],
|
43
|
+
quit: [:delete, 'session/:session_id'.freeze],
|
44
|
+
close: [:delete, 'session/:session_id/window'.freeze],
|
45
|
+
get_page_source: [:get, 'session/:session_id/source'.freeze],
|
46
|
+
get_title: [:get, 'session/:session_id/title'.freeze],
|
47
|
+
find_element: [:post, 'session/:session_id/element'.freeze],
|
48
|
+
find_elements: [:post, 'session/:session_id/elements'.freeze],
|
49
|
+
get_active_element: [:post, 'session/:session_id/element/active'.freeze],
|
50
|
+
|
51
|
+
#
|
52
|
+
# window handling
|
53
|
+
#
|
54
|
+
|
55
|
+
get_current_window_handle: [:get, 'session/:session_id/window_handle'.freeze],
|
56
|
+
get_window_handles: [:get, 'session/:session_id/window_handles'.freeze],
|
57
|
+
set_window_size: [:post, 'session/:session_id/window/:window_handle/size'.freeze],
|
58
|
+
set_window_position: [:post, 'session/:session_id/window/:window_handle/position'.freeze],
|
59
|
+
get_window_size: [:get, 'session/:session_id/window/:window_handle/size'.freeze],
|
60
|
+
get_window_position: [:get, 'session/:session_id/window/:window_handle/position'.freeze],
|
61
|
+
maximize_window: [:post, 'session/:session_id/window/:window_handle/maximize'.freeze],
|
62
|
+
|
63
|
+
#
|
64
|
+
# script execution
|
65
|
+
#
|
66
|
+
|
67
|
+
execute_script: [:post, 'session/:session_id/execute'.freeze],
|
68
|
+
execute_async_script: [:post, 'session/:session_id/execute_async'.freeze],
|
69
|
+
|
70
|
+
#
|
71
|
+
# screenshot
|
72
|
+
#
|
73
|
+
|
74
|
+
screenshot: [:get, 'session/:session_id/screenshot'.freeze],
|
75
|
+
|
76
|
+
#
|
77
|
+
# alerts
|
78
|
+
#
|
79
|
+
|
80
|
+
dismiss_alert: [:post, 'session/:session_id/dismiss_alert'.freeze],
|
81
|
+
accept_alert: [:post, 'session/:session_id/accept_alert'.freeze],
|
82
|
+
get_alert_text: [:get, 'session/:session_id/alert_text'.freeze],
|
83
|
+
set_alert_value: [:post, 'session/:session_id/alert_text'.freeze],
|
84
|
+
set_authentication: [:post, 'session/:session_id/alert/credentials'.freeze],
|
85
|
+
|
86
|
+
#
|
87
|
+
# target locator
|
88
|
+
#
|
89
|
+
|
90
|
+
switch_to_frame: [:post, 'session/:session_id/frame'.freeze],
|
91
|
+
switch_to_parent_frame: [:post, 'session/:session_id/frame/parent'.freeze],
|
92
|
+
switch_to_window: [:post, 'session/:session_id/window'.freeze],
|
93
|
+
|
94
|
+
#
|
95
|
+
# options
|
96
|
+
#
|
97
|
+
|
98
|
+
get_cookies: [:get, 'session/:session_id/cookie'.freeze],
|
99
|
+
add_cookie: [:post, 'session/:session_id/cookie'.freeze],
|
100
|
+
delete_all_cookies: [:delete, 'session/:session_id/cookie'.freeze],
|
101
|
+
delete_cookie: [:delete, 'session/:session_id/cookie/:name'.freeze],
|
102
|
+
|
103
|
+
#
|
104
|
+
# timeouts
|
105
|
+
#
|
106
|
+
|
107
|
+
implicitly_wait: [:post, 'session/:session_id/timeouts/implicit_wait'.freeze],
|
108
|
+
set_script_timeout: [:post, 'session/:session_id/timeouts/async_script'.freeze],
|
109
|
+
set_timeout: [:post, 'session/:session_id/timeouts'.freeze],
|
110
|
+
|
111
|
+
#
|
112
|
+
# element
|
113
|
+
#
|
114
|
+
|
115
|
+
describe_element: [:get, 'session/:session_id/element/:id'.freeze],
|
116
|
+
find_child_element: [:post, 'session/:session_id/element/:id/element'.freeze],
|
117
|
+
find_child_elements: [:post, 'session/:session_id/element/:id/elements'.freeze],
|
118
|
+
click_element: [:post, 'session/:session_id/element/:id/click'.freeze],
|
119
|
+
submit_element: [:post, 'session/:session_id/element/:id/submit'.freeze],
|
120
|
+
get_element_value: [:get, 'session/:session_id/element/:id/value'.freeze],
|
121
|
+
send_keys_to_element: [:post, 'session/:session_id/element/:id/value'.freeze],
|
122
|
+
upload_file: [:post, 'session/:session_id/file'.freeze],
|
123
|
+
get_element_tag_name: [:get, 'session/:session_id/element/:id/name'.freeze],
|
124
|
+
clear_element: [:post, 'session/:session_id/element/:id/clear'.freeze],
|
125
|
+
is_element_selected: [:get, 'session/:session_id/element/:id/selected'.freeze],
|
126
|
+
is_element_enabled: [:get, 'session/:session_id/element/:id/enabled'.freeze],
|
127
|
+
get_element_attribute: [:get, 'session/:session_id/element/:id/attribute/:name'.freeze],
|
128
|
+
element_equals: [:get, 'session/:session_id/element/:id/equals/:other'.freeze],
|
129
|
+
is_element_displayed: [:get, 'session/:session_id/element/:id/displayed'.freeze],
|
130
|
+
get_element_location: [:get, 'session/:session_id/element/:id/location'.freeze],
|
131
|
+
get_element_location_once_scrolled_into_view: [:get, 'session/:session_id/element/:id/location_in_view'.freeze],
|
132
|
+
get_element_size: [:get, 'session/:session_id/element/:id/size'.freeze],
|
133
|
+
drag_element: [:post, 'session/:session_id/element/:id/drag'.freeze],
|
134
|
+
get_element_value_of_css_property: [:get, 'session/:session_id/element/:id/css/:property_name'.freeze],
|
135
|
+
get_element_text: [:get, 'session/:session_id/element/:id/text'.freeze],
|
136
|
+
|
137
|
+
#
|
138
|
+
# rotatable
|
139
|
+
#
|
140
|
+
|
141
|
+
get_screen_orientation: [:get, 'session/:session_id/orientation'.freeze],
|
142
|
+
set_screen_orientation: [:post, 'session/:session_id/orientation'.freeze],
|
143
|
+
|
144
|
+
#
|
145
|
+
# interactions API
|
146
|
+
#
|
147
|
+
|
148
|
+
click: [:post, 'session/:session_id/click'.freeze],
|
149
|
+
double_click: [:post, 'session/:session_id/doubleclick'.freeze],
|
150
|
+
mouse_down: [:post, 'session/:session_id/buttondown'.freeze],
|
151
|
+
mouse_up: [:post, 'session/:session_id/buttonup'.freeze],
|
152
|
+
mouse_move_to: [:post, 'session/:session_id/moveto'.freeze],
|
153
|
+
send_modifier_key_to_active_element: [:post, 'session/:session_id/modifier'.freeze],
|
154
|
+
send_keys_to_active_element: [:post, 'session/:session_id/keys'.freeze],
|
155
|
+
|
156
|
+
#
|
157
|
+
# html 5
|
158
|
+
#
|
159
|
+
|
160
|
+
execute_sql: [:post, 'session/:session_id/execute_sql'.freeze],
|
161
|
+
|
162
|
+
get_location: [:get, 'session/:session_id/location'.freeze],
|
163
|
+
set_location: [:post, 'session/:session_id/location'.freeze],
|
164
|
+
|
165
|
+
get_app_cache: [:get, 'session/:session_id/application_cache'.freeze],
|
166
|
+
get_app_cache_status: [:get, 'session/:session_id/application_cache/status'.freeze],
|
167
|
+
clear_app_cache: [:delete, 'session/:session_id/application_cache/clear'.freeze],
|
168
|
+
|
169
|
+
get_network_connection: [:get, 'session/:session_id/network_connection'.freeze],
|
170
|
+
set_network_connection: [:post, 'session/:session_id/network_connection'.freeze],
|
171
|
+
|
172
|
+
get_local_storage_item: [:get, 'session/:session_id/local_storage/key/:key'.freeze],
|
173
|
+
remove_local_storage_item: [:delete, 'session/:session_id/local_storage/key/:key'.freeze],
|
174
|
+
get_local_storage_keys: [:get, 'session/:session_id/local_storage'.freeze],
|
175
|
+
set_local_storage_item: [:post, 'session/:session_id/local_storage'.freeze],
|
176
|
+
clear_local_storage: [:delete, 'session/:session_id/local_storage'.freeze],
|
177
|
+
get_local_storage_size: [:get, 'session/:session_id/local_storage/size'.freeze],
|
178
|
+
|
179
|
+
get_session_storage_item: [:get, 'session/:session_id/session_storage/key/:key'.freeze],
|
180
|
+
remove_session_storage_item: [:delete, 'session/:session_id/session_storage/key/:key'.freeze],
|
181
|
+
get_session_storage_keys: [:get, 'session/:session_id/session_storage'.freeze],
|
182
|
+
set_session_storage_item: [:post, 'session/:session_id/session_storage'.freeze],
|
183
|
+
clear_session_storage: [:delete, 'session/:session_id/session_storage'.freeze],
|
184
|
+
get_session_storage_size: [:get, 'session/:session_id/session_storage/size'.freeze],
|
185
|
+
|
186
|
+
#
|
187
|
+
# ime
|
188
|
+
#
|
189
|
+
|
190
|
+
ime_get_available_engines: [:get, 'session/:session_id/ime/available_engines'.freeze],
|
191
|
+
ime_get_active_engine: [:get, 'session/:session_id/ime/active_engine'.freeze],
|
192
|
+
ime_is_activated: [:get, 'session/:session_id/ime/activated'.freeze],
|
193
|
+
ime_deactivate: [:post, 'session/:session_id/ime/deactivate'.freeze],
|
194
|
+
ime_activate_engine: [:post, 'session/:session_id/ime/activate'.freeze],
|
195
|
+
|
196
|
+
#
|
197
|
+
# touch
|
198
|
+
#
|
199
|
+
|
200
|
+
touch_single_tap: [:post, 'session/:session_id/touch/click'.freeze],
|
201
|
+
touch_double_tap: [:post, 'session/:session_id/touch/doubleclick'.freeze],
|
202
|
+
touch_long_press: [:post, 'session/:session_id/touch/longclick'.freeze],
|
203
|
+
touch_down: [:post, 'session/:session_id/touch/down'.freeze],
|
204
|
+
touch_up: [:post, 'session/:session_id/touch/up'.freeze],
|
205
|
+
touch_move: [:post, 'session/:session_id/touch/move'.freeze],
|
206
|
+
touch_scroll: [:post, 'session/:session_id/touch/scroll'.freeze],
|
207
|
+
touch_flick: [:post, 'session/:session_id/touch/flick'.freeze],
|
208
|
+
|
209
|
+
#
|
210
|
+
# logs
|
211
|
+
#
|
212
|
+
|
213
|
+
get_available_log_types: [:get, 'session/:session_id/log/types'.freeze],
|
214
|
+
get_log: [:post, 'session/:session_id/log'.freeze]
|
215
|
+
}.freeze
|
213
216
|
end
|
214
217
|
end # Remote
|
215
218
|
end # WebDriver
|
@@ -32,25 +32,6 @@ module Selenium
|
|
32
32
|
include BridgeHelper
|
33
33
|
include Atoms
|
34
34
|
|
35
|
-
# TODO: constant shouldn't be modified in class
|
36
|
-
COMMANDS = {}
|
37
|
-
|
38
|
-
#
|
39
|
-
# Defines a wrapper method for a command, which ultimately calls #execute.
|
40
|
-
#
|
41
|
-
# @param name [Symbol]
|
42
|
-
# name of the resulting method
|
43
|
-
# @param verb [Symbol]
|
44
|
-
# the appropriate http verb, such as :get, :post, or :delete
|
45
|
-
# @param url [String]
|
46
|
-
# a URL template, which can include some arguments, much like the definitions on the server.
|
47
|
-
# the :session_id parameter is implicitly handled, but the remainder will become required method arguments.
|
48
|
-
#
|
49
|
-
|
50
|
-
def self.command(name, verb, url)
|
51
|
-
COMMANDS[name] = [verb, url.freeze]
|
52
|
-
end
|
53
|
-
|
54
35
|
attr_accessor :context, :http, :file_detector
|
55
36
|
attr_reader :capabilities
|
56
37
|
|
@@ -63,7 +44,6 @@ module Selenium
|
|
63
44
|
#
|
64
45
|
|
65
46
|
def initialize(opts = {})
|
66
|
-
edge_check(opts)
|
67
47
|
|
68
48
|
opts = opts.dup
|
69
49
|
|
@@ -97,13 +77,6 @@ module Selenium
|
|
97
77
|
)
|
98
78
|
end
|
99
79
|
|
100
|
-
def edge_check(opts)
|
101
|
-
caps = opts[:desired_capabilities]
|
102
|
-
return unless caps && caps[:browser_name] && caps[:browser_name] == 'MicrosoftEdge'
|
103
|
-
require_relative '../edge/legacy_support'
|
104
|
-
extend Edge::LegacySupport
|
105
|
-
end
|
106
|
-
|
107
80
|
def driver_extensions
|
108
81
|
[
|
109
82
|
DriverExtensions::HasInputDevices,
|
@@ -117,6 +90,15 @@ module Selenium
|
|
117
90
|
]
|
118
91
|
end
|
119
92
|
|
93
|
+
def commands(command)
|
94
|
+
case command
|
95
|
+
when :status, :is_element_displayed
|
96
|
+
Bridge::COMMANDS[command]
|
97
|
+
else
|
98
|
+
COMMANDS[command]
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
120
102
|
#
|
121
103
|
# Returns the current session ID.
|
122
104
|
#
|
@@ -129,7 +111,7 @@ module Selenium
|
|
129
111
|
# TODO - Remove this when Mozilla fixes bug
|
130
112
|
desired_capabilities[:browser_name] = 'firefox' if desired_capabilities[:browser_name] == 'Firefox'
|
131
113
|
|
132
|
-
resp = raw_execute :
|
114
|
+
resp = raw_execute :new_session, {}, {desiredCapabilities: desired_capabilities}
|
133
115
|
@session_id = resp['sessionId']
|
134
116
|
return W3CCapabilities.json_create resp['value'] if @session_id
|
135
117
|
|
@@ -137,8 +119,6 @@ module Selenium
|
|
137
119
|
end
|
138
120
|
|
139
121
|
def status
|
140
|
-
jwp = Selenium::WebDriver::Remote::Bridge::COMMANDS[:status]
|
141
|
-
self.class.command(:status, jwp.first, jwp.last)
|
142
122
|
execute :status
|
143
123
|
end
|
144
124
|
|
@@ -155,7 +135,7 @@ module Selenium
|
|
155
135
|
end
|
156
136
|
|
157
137
|
def timeout(type, milliseconds)
|
158
|
-
execute :
|
138
|
+
execute :set_timeout, {}, {type: type, ms: milliseconds}
|
159
139
|
end
|
160
140
|
|
161
141
|
#
|
@@ -163,19 +143,19 @@ module Selenium
|
|
163
143
|
#
|
164
144
|
|
165
145
|
def accept_alert
|
166
|
-
execute :
|
146
|
+
execute :accept_alert
|
167
147
|
end
|
168
148
|
|
169
149
|
def dismiss_alert
|
170
|
-
execute :
|
150
|
+
execute :dismiss_alert
|
171
151
|
end
|
172
152
|
|
173
153
|
def alert=(keys)
|
174
|
-
execute :
|
154
|
+
execute :send_alert_text, {}, {handler: 'prompt', text: keys}
|
175
155
|
end
|
176
156
|
|
177
157
|
def alert_text
|
178
|
-
execute :
|
158
|
+
execute :get_alert_text
|
179
159
|
end
|
180
160
|
|
181
161
|
#
|
@@ -191,11 +171,11 @@ module Selenium
|
|
191
171
|
end
|
192
172
|
|
193
173
|
def url
|
194
|
-
execute :
|
174
|
+
execute :get_current_url
|
195
175
|
end
|
196
176
|
|
197
177
|
def title
|
198
|
-
execute :
|
178
|
+
execute :get_title
|
199
179
|
end
|
200
180
|
|
201
181
|
def page_source
|
@@ -205,16 +185,16 @@ module Selenium
|
|
205
185
|
end
|
206
186
|
|
207
187
|
def switch_to_window(name)
|
208
|
-
execute :
|
188
|
+
execute :switch_to_window, {}, {handle: name}
|
209
189
|
end
|
210
190
|
|
211
191
|
def switch_to_frame(id)
|
212
192
|
id = find_element_by('id', id) if id.is_a? String
|
213
|
-
execute :
|
193
|
+
execute :switch_to_frame, {}, {id: id}
|
214
194
|
end
|
215
195
|
|
216
196
|
def switch_to_parent_frame
|
217
|
-
execute :
|
197
|
+
execute :switch_to_parent_frame
|
218
198
|
end
|
219
199
|
|
220
200
|
def switch_to_default_content
|
@@ -224,13 +204,13 @@ module Selenium
|
|
224
204
|
QUIT_ERRORS = [IOError].freeze
|
225
205
|
|
226
206
|
def quit
|
227
|
-
execute :
|
207
|
+
execute :delete_session
|
228
208
|
http.close
|
229
209
|
rescue *QUIT_ERRORS
|
230
210
|
end
|
231
211
|
|
232
212
|
def close
|
233
|
-
execute :
|
213
|
+
execute :close_window
|
234
214
|
end
|
235
215
|
|
236
216
|
def refresh
|
@@ -242,18 +222,18 @@ module Selenium
|
|
242
222
|
#
|
243
223
|
|
244
224
|
def window_handles
|
245
|
-
execute :
|
225
|
+
execute :get_window_handles
|
246
226
|
end
|
247
227
|
|
248
228
|
def window_handle
|
249
|
-
execute :
|
229
|
+
execute :get_window_handle
|
250
230
|
end
|
251
231
|
|
252
232
|
def resize_window(width, height, handle = :current)
|
253
233
|
unless handle == :current
|
254
234
|
raise Error::WebDriverError, 'Switch to desired window before changing its size'
|
255
235
|
end
|
256
|
-
execute :
|
236
|
+
execute :set_window_size, {}, {width: width,
|
257
237
|
height: height}
|
258
238
|
end
|
259
239
|
|
@@ -261,18 +241,18 @@ module Selenium
|
|
261
241
|
unless handle == :current
|
262
242
|
raise Error::UnsupportedOperationError, 'Switch to desired window before changing its size'
|
263
243
|
end
|
264
|
-
execute :
|
244
|
+
execute :maximize_window
|
265
245
|
end
|
266
246
|
|
267
247
|
def full_screen_window
|
268
|
-
execute :
|
248
|
+
execute :fullscreen_window
|
269
249
|
end
|
270
250
|
|
271
251
|
def window_size(handle = :current)
|
272
252
|
unless handle == :current
|
273
253
|
raise Error::UnsupportedOperationError, 'Switch to desired window before getting its size'
|
274
254
|
end
|
275
|
-
data = execute :
|
255
|
+
data = execute :get_window_size
|
276
256
|
|
277
257
|
Dimension.new data['width'], data['height']
|
278
258
|
end
|
@@ -286,7 +266,7 @@ module Selenium
|
|
286
266
|
end
|
287
267
|
|
288
268
|
def screenshot
|
289
|
-
execute :
|
269
|
+
execute :take_screenshot
|
290
270
|
end
|
291
271
|
|
292
272
|
#
|
@@ -362,12 +342,12 @@ module Selenium
|
|
362
342
|
#
|
363
343
|
|
364
344
|
def execute_script(script, *args)
|
365
|
-
result = execute :
|
345
|
+
result = execute :execute_script, {}, {script: script, args: args}
|
366
346
|
unwrap_script_result result
|
367
347
|
end
|
368
348
|
|
369
349
|
def execute_async_script(script, *args)
|
370
|
-
result = execute :
|
350
|
+
result = execute :execute_async_script, {}, {script: script, args: args}
|
371
351
|
unwrap_script_result result
|
372
352
|
end
|
373
353
|
|
@@ -375,25 +355,28 @@ module Selenium
|
|
375
355
|
# cookies
|
376
356
|
#
|
377
357
|
|
358
|
+
def options
|
359
|
+
@options ||= WebDriver::W3COptions.new(self)
|
360
|
+
end
|
361
|
+
|
378
362
|
def add_cookie(cookie)
|
379
|
-
execute :
|
363
|
+
execute :add_cookie, {}, {cookie: cookie}
|
380
364
|
end
|
381
365
|
|
382
366
|
def delete_cookie(name)
|
383
|
-
execute :
|
367
|
+
execute :delete_cookie, name: name
|
384
368
|
end
|
385
369
|
|
386
|
-
# TODO: - write specs
|
387
370
|
def cookie(name)
|
388
|
-
execute :
|
371
|
+
execute :get_cookie, name: name
|
389
372
|
end
|
390
373
|
|
391
374
|
def cookies
|
392
|
-
execute :
|
375
|
+
execute :get_all_cookies
|
393
376
|
end
|
394
377
|
|
395
378
|
def delete_all_cookies
|
396
|
-
|
379
|
+
execute :delete_all_cookies
|
397
380
|
end
|
398
381
|
|
399
382
|
#
|
@@ -401,7 +384,7 @@ module Selenium
|
|
401
384
|
#
|
402
385
|
|
403
386
|
def click_element(element)
|
404
|
-
execute :
|
387
|
+
execute :element_click, id: element.values.first
|
405
388
|
end
|
406
389
|
|
407
390
|
def click
|
@@ -409,7 +392,7 @@ module Selenium
|
|
409
392
|
end
|
410
393
|
|
411
394
|
def double_click
|
412
|
-
execute :
|
395
|
+
execute :double_click
|
413
396
|
end
|
414
397
|
|
415
398
|
def context_click
|
@@ -417,11 +400,11 @@ module Selenium
|
|
417
400
|
end
|
418
401
|
|
419
402
|
def mouse_down
|
420
|
-
execute :
|
403
|
+
execute :mouse_down
|
421
404
|
end
|
422
405
|
|
423
406
|
def mouse_up
|
424
|
-
execute :
|
407
|
+
execute :mouse_up
|
425
408
|
end
|
426
409
|
|
427
410
|
def mouse_move_to(element, x = nil, y = nil)
|
@@ -432,7 +415,7 @@ module Selenium
|
|
432
415
|
params[:yoffset] = y
|
433
416
|
end
|
434
417
|
|
435
|
-
execute :
|
418
|
+
execute :mouse_move_to, {}, params
|
436
419
|
end
|
437
420
|
|
438
421
|
def send_keys_to_active_element(keys)
|
@@ -441,11 +424,11 @@ module Selenium
|
|
441
424
|
|
442
425
|
# TODO: - Implement file verification
|
443
426
|
def send_keys_to_element(element, keys)
|
444
|
-
execute :
|
427
|
+
execute :element_send_keys, {id: element.values.first}, {value: keys.join('').split(//)}
|
445
428
|
end
|
446
429
|
|
447
430
|
def clear_element(element)
|
448
|
-
execute :
|
431
|
+
execute :element_clear, id: element.values.first
|
449
432
|
end
|
450
433
|
|
451
434
|
def submit_element(element)
|
@@ -456,60 +439,60 @@ module Selenium
|
|
456
439
|
end
|
457
440
|
|
458
441
|
def drag_element(element, right_by, down_by)
|
459
|
-
execute :
|
442
|
+
execute :drag_element, {id: element.values.first}, {x: right_by, y: down_by}
|
460
443
|
end
|
461
444
|
|
462
445
|
def touch_single_tap(element)
|
463
|
-
execute :
|
446
|
+
execute :touch_single_tap, {}, {element: element}
|
464
447
|
end
|
465
448
|
|
466
449
|
def touch_double_tap(element)
|
467
|
-
execute :
|
450
|
+
execute :touch_double_tap, {}, {element: element}
|
468
451
|
end
|
469
452
|
|
470
453
|
def touch_long_press(element)
|
471
|
-
execute :
|
454
|
+
execute :touch_long_press, {}, {element: element}
|
472
455
|
end
|
473
456
|
|
474
457
|
def touch_down(x, y)
|
475
|
-
execute :
|
458
|
+
execute :touch_down, {}, {x: x, y: y}
|
476
459
|
end
|
477
460
|
|
478
461
|
def touch_up(x, y)
|
479
|
-
execute :
|
462
|
+
execute :touch_up, {}, {x: x, y: y}
|
480
463
|
end
|
481
464
|
|
482
465
|
def touch_move(x, y)
|
483
|
-
execute :
|
466
|
+
execute :touch_move, {}, {x: x, y: y}
|
484
467
|
end
|
485
468
|
|
486
469
|
def touch_scroll(element, x, y)
|
487
470
|
if element
|
488
|
-
execute :
|
471
|
+
execute :touch_scroll, {}, {element: element,
|
489
472
|
xoffset: x,
|
490
473
|
yoffset: y}
|
491
474
|
else
|
492
|
-
execute :
|
475
|
+
execute :touch_scroll, {}, {xoffset: x, yoffset: y}
|
493
476
|
end
|
494
477
|
end
|
495
478
|
|
496
479
|
def touch_flick(xspeed, yspeed)
|
497
|
-
execute :
|
480
|
+
execute :touch_flick, {}, {xspeed: xspeed, yspeed: yspeed}
|
498
481
|
end
|
499
482
|
|
500
483
|
def touch_element_flick(element, right_by, down_by, speed)
|
501
|
-
execute :
|
484
|
+
execute :touch_flick, {}, {element: element,
|
502
485
|
xoffset: right_by,
|
503
486
|
yoffset: down_by,
|
504
487
|
speed: speed}
|
505
488
|
end
|
506
489
|
|
507
490
|
def screen_orientation=(orientation)
|
508
|
-
execute :
|
491
|
+
execute :set_screen_orientation, {}, {orientation: orientation}
|
509
492
|
end
|
510
493
|
|
511
494
|
def screen_orientation
|
512
|
-
execute :
|
495
|
+
execute :get_screen_orientation
|
513
496
|
end
|
514
497
|
|
515
498
|
#
|
@@ -517,7 +500,7 @@ module Selenium
|
|
517
500
|
#
|
518
501
|
|
519
502
|
def element_tag_name(element)
|
520
|
-
execute :
|
503
|
+
execute :get_element_tag_name, id: element.values.first
|
521
504
|
end
|
522
505
|
|
523
506
|
def element_attribute(element, name)
|
@@ -525,7 +508,7 @@ module Selenium
|
|
525
508
|
end
|
526
509
|
|
527
510
|
def element_property(element, name)
|
528
|
-
execute :
|
511
|
+
execute :get_element_property, id: element.ref.values.first, name: name
|
529
512
|
end
|
530
513
|
|
531
514
|
def element_value(element)
|
@@ -533,11 +516,11 @@ module Selenium
|
|
533
516
|
end
|
534
517
|
|
535
518
|
def element_text(element)
|
536
|
-
execute :
|
519
|
+
execute :get_element_text, id: element.values.first
|
537
520
|
end
|
538
521
|
|
539
522
|
def element_location(element)
|
540
|
-
data = execute :
|
523
|
+
data = execute :get_element_rect, id: element.values.first
|
541
524
|
|
542
525
|
Point.new data['x'], data['y']
|
543
526
|
end
|
@@ -548,27 +531,25 @@ module Selenium
|
|
548
531
|
end
|
549
532
|
|
550
533
|
def element_size(element)
|
551
|
-
data = execute :
|
534
|
+
data = execute :get_element_rect, id: element.values.first
|
552
535
|
|
553
536
|
Dimension.new data['width'], data['height']
|
554
537
|
end
|
555
538
|
|
556
539
|
def element_enabled?(element)
|
557
|
-
execute :
|
540
|
+
execute :is_element_enabled, id: element.values.first
|
558
541
|
end
|
559
542
|
|
560
543
|
def element_selected?(element)
|
561
|
-
execute :
|
544
|
+
execute :is_element_selected, id: element.values.first
|
562
545
|
end
|
563
546
|
|
564
547
|
def element_displayed?(element)
|
565
|
-
|
566
|
-
self.class.command(:isElementDisplayed, jwp.first, jwp.last)
|
567
|
-
execute :isElementDisplayed, id: element.values.first
|
548
|
+
execute :is_element_displayed, id: element.values.first
|
568
549
|
end
|
569
550
|
|
570
551
|
def element_value_of_css_property(element, prop)
|
571
|
-
execute :
|
552
|
+
execute :get_element_css_value, id: element.values.first, property_name: prop
|
572
553
|
end
|
573
554
|
|
574
555
|
#
|
@@ -576,7 +557,7 @@ module Selenium
|
|
576
557
|
#
|
577
558
|
|
578
559
|
def active_element
|
579
|
-
Element.new self, execute(:
|
560
|
+
Element.new self, execute(:get_active_element)
|
580
561
|
end
|
581
562
|
|
582
563
|
alias_method :switch_to_active_element, :active_element
|
@@ -585,9 +566,9 @@ module Selenium
|
|
585
566
|
how, what = convert_locators(how, what)
|
586
567
|
|
587
568
|
id = if parent
|
588
|
-
execute :
|
569
|
+
execute :find_child_element, {id: parent.values.first}, {using: how, value: what}
|
589
570
|
else
|
590
|
-
execute :
|
571
|
+
execute :find_element, {}, {using: how, value: what}
|
591
572
|
end
|
592
573
|
Element.new self, id
|
593
574
|
end
|
@@ -596,9 +577,9 @@ module Selenium
|
|
596
577
|
how, what = convert_locators(how, what)
|
597
578
|
|
598
579
|
ids = if parent
|
599
|
-
execute :
|
580
|
+
execute :find_child_elements, {id: parent.values.first}, {using: how, value: what}
|
600
581
|
else
|
601
|
-
execute :
|
582
|
+
execute :find_elements, {}, {using: how, value: what}
|
602
583
|
end
|
603
584
|
|
604
585
|
ids.map { |id| Element.new self, id }
|
@@ -642,7 +623,7 @@ module Selenium
|
|
642
623
|
#
|
643
624
|
|
644
625
|
def raw_execute(command, opts = {}, command_hash = nil)
|
645
|
-
verb, path =
|
626
|
+
verb, path = commands(command) || raise(ArgumentError, "unknown command: #{command.inspect}")
|
646
627
|
path = path.dup
|
647
628
|
|
648
629
|
path[':session_id'] = @session_id if path.include?(':session_id')
|