1 | // Copyright 2011 Software Freedom Conservancy. All Rights Reserved. |
2 | // |
3 | // Licensed under the Apache License, Version 2.0 (the "License"); |
4 | // you may not use this file except in compliance with the License. |
5 | // You may obtain a copy of the License at |
6 | // |
7 | // http://www.apache.org/licenses/LICENSE-2.0 |
8 | // |
9 | // Unless required by applicable law or agreed to in writing, software |
10 | // distributed under the License is distributed on an "AS IS" BASIS, |
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
12 | // See the License for the specific language governing permissions and |
13 | // limitations under the License. |
14 | |
15 | /** |
16 | * @fileoverview Contains several classes for handling commands. |
17 | */ |
18 | |
19 | goog.provide('webdriver.Command'); |
20 | goog.provide('webdriver.CommandExecutor'); |
21 | goog.provide('webdriver.CommandName'); |
22 | |
23 | |
24 | |
25 | /** |
26 | * Describes a command to be executed by the WebDriverJS framework. |
27 | * @param {!webdriver.CommandName} name The name of this command. |
28 | * @constructor |
29 | */ |
30 | webdriver.Command = function(name) { |
31 | |
32 | /** |
33 | * The name of this command. |
34 | * @private {!webdriver.CommandName} |
35 | */ |
36 | this.name_ = name; |
37 | |
38 | /** |
39 | * The parameters to this command. |
40 | * @private {!Object.<*>} |
41 | */ |
42 | this.parameters_ = {}; |
43 | }; |
44 | |
45 | |
46 | /** |
47 | * @return {!webdriver.CommandName} This command's name. |
48 | */ |
49 | webdriver.Command.prototype.getName = function() { |
50 | return this.name_; |
51 | }; |
52 | |
53 | |
54 | /** |
55 | * Sets a parameter to send with this command. |
56 | * @param {string} name The parameter name. |
57 | * @param {*} value The parameter value. |
58 | * @return {!webdriver.Command} A self reference. |
59 | */ |
60 | webdriver.Command.prototype.setParameter = function(name, value) { |
61 | this.parameters_[name] = value; |
62 | return this; |
63 | }; |
64 | |
65 | |
66 | /** |
67 | * Sets the parameters for this command. |
68 | * @param {!Object.<*>} parameters The command parameters. |
69 | * @return {!webdriver.Command} A self reference. |
70 | */ |
71 | webdriver.Command.prototype.setParameters = function(parameters) { |
72 | this.parameters_ = parameters; |
73 | return this; |
74 | }; |
75 | |
76 | |
77 | /** |
78 | * Returns a named command parameter. |
79 | * @param {string} key The parameter key to look up. |
80 | * @return {*} The parameter value, or undefined if it has not been set. |
81 | */ |
82 | webdriver.Command.prototype.getParameter = function(key) { |
83 | return this.parameters_[key]; |
84 | }; |
85 | |
86 | |
87 | /** |
88 | * @return {!Object.<*>} The parameters to send with this command. |
89 | */ |
90 | webdriver.Command.prototype.getParameters = function() { |
91 | return this.parameters_; |
92 | }; |
93 | |
94 | |
95 | /** |
96 | * Enumeration of predefined names command names that all command processors |
97 | * will support. |
98 | * @enum {string} |
99 | */ |
100 | // TODO: Delete obsolete command names. |
101 | webdriver.CommandName = { |
102 | GET_SERVER_STATUS: 'getStatus', |
103 | |
104 | NEW_SESSION: 'newSession', |
105 | GET_SESSIONS: 'getSessions', |
106 | DESCRIBE_SESSION: 'getSessionCapabilities', |
107 | |
108 | CLOSE: 'close', |
109 | QUIT: 'quit', |
110 | |
111 | GET_CURRENT_URL: 'getCurrentUrl', |
112 | GET: 'get', |
113 | GO_BACK: 'goBack', |
114 | GO_FORWARD: 'goForward', |
115 | REFRESH: 'refresh', |
116 | |
117 | ADD_COOKIE: 'addCookie', |
118 | GET_COOKIE: 'getCookie', |
119 | GET_ALL_COOKIES: 'getCookies', |
120 | DELETE_COOKIE: 'deleteCookie', |
121 | DELETE_ALL_COOKIES: 'deleteAllCookies', |
122 | |
123 | GET_ACTIVE_ELEMENT: 'getActiveElement', |
124 | FIND_ELEMENT: 'findElement', |
125 | FIND_ELEMENTS: 'findElements', |
126 | FIND_CHILD_ELEMENT: 'findChildElement', |
127 | FIND_CHILD_ELEMENTS: 'findChildElements', |
128 | |
129 | CLEAR_ELEMENT: 'clearElement', |
130 | CLICK_ELEMENT: 'clickElement', |
131 | SEND_KEYS_TO_ELEMENT: 'sendKeysToElement', |
132 | SUBMIT_ELEMENT: 'submitElement', |
133 | |
134 | GET_CURRENT_WINDOW_HANDLE: 'getCurrentWindowHandle', |
135 | GET_WINDOW_HANDLES: 'getWindowHandles', |
136 | GET_WINDOW_POSITION: 'getWindowPosition', |
137 | SET_WINDOW_POSITION: 'setWindowPosition', |
138 | GET_WINDOW_SIZE: 'getWindowSize', |
139 | SET_WINDOW_SIZE: 'setWindowSize', |
140 | MAXIMIZE_WINDOW: 'maximizeWindow', |
141 | |
142 | SWITCH_TO_WINDOW: 'switchToWindow', |
143 | SWITCH_TO_FRAME: 'switchToFrame', |
144 | GET_PAGE_SOURCE: 'getPageSource', |
145 | GET_TITLE: 'getTitle', |
146 | |
147 | EXECUTE_SCRIPT: 'executeScript', |
148 | EXECUTE_ASYNC_SCRIPT: 'executeAsyncScript', |
149 | |
150 | GET_ELEMENT_TEXT: 'getElementText', |
151 | GET_ELEMENT_TAG_NAME: 'getElementTagName', |
152 | IS_ELEMENT_SELECTED: 'isElementSelected', |
153 | IS_ELEMENT_ENABLED: 'isElementEnabled', |
154 | IS_ELEMENT_DISPLAYED: 'isElementDisplayed', |
155 | GET_ELEMENT_LOCATION: 'getElementLocation', |
156 | GET_ELEMENT_LOCATION_IN_VIEW: 'getElementLocationOnceScrolledIntoView', |
157 | GET_ELEMENT_SIZE: 'getElementSize', |
158 | GET_ELEMENT_ATTRIBUTE: 'getElementAttribute', |
159 | GET_ELEMENT_VALUE_OF_CSS_PROPERTY: 'getElementValueOfCssProperty', |
160 | ELEMENT_EQUALS: 'elementEquals', |
161 | |
162 | SCREENSHOT: 'screenshot', |
163 | IMPLICITLY_WAIT: 'implicitlyWait', |
164 | SET_SCRIPT_TIMEOUT: 'setScriptTimeout', |
165 | SET_TIMEOUT: 'setTimeout', |
166 | |
167 | ACCEPT_ALERT: 'acceptAlert', |
168 | DISMISS_ALERT: 'dismissAlert', |
169 | GET_ALERT_TEXT: 'getAlertText', |
170 | SET_ALERT_TEXT: 'setAlertValue', |
171 | |
172 | EXECUTE_SQL: 'executeSQL', |
173 | GET_LOCATION: 'getLocation', |
174 | SET_LOCATION: 'setLocation', |
175 | GET_APP_CACHE: 'getAppCache', |
176 | GET_APP_CACHE_STATUS: 'getStatus', |
177 | CLEAR_APP_CACHE: 'clearAppCache', |
178 | IS_BROWSER_ONLINE: 'isBrowserOnline', |
179 | SET_BROWSER_ONLINE: 'setBrowserOnline', |
180 | |
181 | GET_LOCAL_STORAGE_ITEM: 'getLocalStorageItem', |
182 | GET_LOCAL_STORAGE_KEYS: 'getLocalStorageKeys', |
183 | SET_LOCAL_STORAGE_ITEM: 'setLocalStorageItem', |
184 | REMOVE_LOCAL_STORAGE_ITEM: 'removeLocalStorageItem', |
185 | CLEAR_LOCAL_STORAGE: 'clearLocalStorage', |
186 | GET_LOCAL_STORAGE_SIZE: 'getLocalStorageSize', |
187 | |
188 | GET_SESSION_STORAGE_ITEM: 'getSessionStorageItem', |
189 | GET_SESSION_STORAGE_KEYS: 'getSessionStorageKey', |
190 | SET_SESSION_STORAGE_ITEM: 'setSessionStorageItem', |
191 | REMOVE_SESSION_STORAGE_ITEM: 'removeSessionStorageItem', |
192 | CLEAR_SESSION_STORAGE: 'clearSessionStorage', |
193 | GET_SESSION_STORAGE_SIZE: 'getSessionStorageSize', |
194 | |
195 | SET_SCREEN_ORIENTATION: 'setScreenOrientation', |
196 | GET_SCREEN_ORIENTATION: 'getScreenOrientation', |
197 | |
198 | // These belong to the Advanced user interactions - an element is |
199 | // optional for these commands. |
200 | CLICK: 'mouseClick', |
201 | DOUBLE_CLICK: 'mouseDoubleClick', |
202 | MOUSE_DOWN: 'mouseButtonDown', |
203 | MOUSE_UP: 'mouseButtonUp', |
204 | MOVE_TO: 'mouseMoveTo', |
205 | SEND_KEYS_TO_ACTIVE_ELEMENT: 'sendKeysToActiveElement', |
206 | |
207 | // These belong to the Advanced Touch API |
208 | TOUCH_SINGLE_TAP: 'touchSingleTap', |
209 | TOUCH_DOWN: 'touchDown', |
210 | TOUCH_UP: 'touchUp', |
211 | TOUCH_MOVE: 'touchMove', |
212 | TOUCH_SCROLL: 'touchScroll', |
213 | TOUCH_DOUBLE_TAP: 'touchDoubleTap', |
214 | TOUCH_LONG_PRESS: 'touchLongPress', |
215 | TOUCH_FLICK: 'touchFlick', |
216 | |
217 | GET_AVAILABLE_LOG_TYPES: 'getAvailableLogTypes', |
218 | GET_LOG: 'getLog', |
219 | GET_SESSION_LOGS: 'getSessionLogs', |
220 | |
221 | // Non-standard commands used by the standalone Selenium server. |
222 | UPLOAD_FILE: 'uploadFile' |
223 | }; |
224 | |
225 | |
226 | |
227 | /** |
228 | * Handles the execution of WebDriver {@link webdriver.Command commands}. |
229 | * @interface |
230 | */ |
231 | webdriver.CommandExecutor = function() {}; |
232 | |
233 | |
234 | /** |
235 | * Executes the given {@code command}. If there is an error executing the |
236 | * command, the provided callback will be invoked with the offending error. |
237 | * Otherwise, the callback will be invoked with a null Error and non-null |
238 | * {@link bot.response.ResponseObject} object. |
239 | * @param {!webdriver.Command} command The command to execute. |
240 | * @param {function(Error, !bot.response.ResponseObject=)} callback the function |
241 | * to invoke when the command response is ready. |
242 | */ |
243 | webdriver.CommandExecutor.prototype.execute = goog.abstractMethod; |