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