aboutsummaryrefslogtreecommitdiff
path: root/node_modules/selenium-webdriver/lib/http.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/selenium-webdriver/lib/http.js')
-rw-r--r--node_modules/selenium-webdriver/lib/http.js93
1 files changed, 51 insertions, 42 deletions
diff --git a/node_modules/selenium-webdriver/lib/http.js b/node_modules/selenium-webdriver/lib/http.js
index 136a48e63..e141bf190 100644
--- a/node_modules/selenium-webdriver/lib/http.js
+++ b/node_modules/selenium-webdriver/lib/http.js
@@ -225,6 +225,7 @@ const COMMAND_MAP = new Map([
[cmd.Name.EXECUTE_SCRIPT, post('/session/:sessionId/execute')],
[cmd.Name.EXECUTE_ASYNC_SCRIPT, post('/session/:sessionId/execute_async')],
[cmd.Name.SCREENSHOT, get('/session/:sessionId/screenshot')],
+ [cmd.Name.GET_TIMEOUT, get('/session/:sessionId/timeouts')],
[cmd.Name.SET_TIMEOUT, post('/session/:sessionId/timeouts')],
[cmd.Name.MOVE_TO, post('/session/:sessionId/moveto')],
[cmd.Name.CLICK, post('/session/:sessionId/click')],
@@ -256,6 +257,10 @@ const COMMAND_MAP = new Map([
/** @const {!Map<string, (CommandSpec|CommandTransformer)>} */
const W3C_COMMAND_MAP = new Map([
[cmd.Name.GET_ACTIVE_ELEMENT, get('/session/:sessionId/element/active')],
+ [cmd.Name.GET_ALERT_TEXT, get('/session/:sessionId/alert/text')],
+ [cmd.Name.SET_ALERT_TEXT, post('/session/:sessionId/alert/text')],
+ [cmd.Name.ACCEPT_ALERT, post('/session/:sessionId/alert/accept')],
+ [cmd.Name.DISMISS_ALERT, post('/session/:sessionId/alert/dismiss')],
[cmd.Name.GET_ELEMENT_ATTRIBUTE, (cmd) => {
return toExecuteAtomCommand(cmd, Atom.GET_ATTRIBUTE, 'id', 'name');
}],
@@ -264,11 +269,15 @@ const W3C_COMMAND_MAP = new Map([
[cmd.Name.IS_ELEMENT_DISPLAYED, (cmd) => {
return toExecuteAtomCommand(cmd, Atom.IS_DISPLAYED, 'id');
}],
+ [cmd.Name.EXECUTE_SCRIPT, post('/session/:sessionId/execute/sync')],
+ [cmd.Name.EXECUTE_ASYNC_SCRIPT, post('/session/:sessionId/execute/async')],
[cmd.Name.MAXIMIZE_WINDOW, post('/session/:sessionId/window/maximize')],
[cmd.Name.GET_WINDOW_POSITION, get('/session/:sessionId/window/position')],
[cmd.Name.SET_WINDOW_POSITION, post('/session/:sessionId/window/position')],
[cmd.Name.GET_WINDOW_SIZE, get('/session/:sessionId/window/size')],
[cmd.Name.SET_WINDOW_SIZE, post('/session/:sessionId/window/size')],
+ [cmd.Name.GET_CURRENT_WINDOW_HANDLE, get('/session/:sessionId/window')],
+ [cmd.Name.GET_WINDOW_HANDLES, get('/session/:sessionId/window/handles')],
]);
@@ -428,34 +437,29 @@ class Executor {
return doSend(this, request).then(response => {
this.log_.finer(() => `>>>\n${request}\n<<<\n${response}`);
- let parsed =
- parseHttpResponse(
- command, /** @type {!Response} */ (response), this.w3c);
+ let httpResponse = /** @type {!Response} */(response);
+ let {isW3C, value} = parseHttpResponse(command, httpResponse);
if (command.getName() === cmd.Name.NEW_SESSION
|| command.getName() === cmd.Name.DESCRIBE_SESSION) {
- if (!parsed || !parsed['sessionId']) {
+ if (!value || !value.sessionId) {
throw new error.WebDriverError(
- 'Unable to parse new session response: ' + response.body);
+ `Unable to parse new session response: ${response.body}`);
}
// The remote end is a W3C compliant server if there is no `status`
// field in the response. This is not applicable for the DESCRIBE_SESSION
// command, which is not defined in the W3C spec.
if (command.getName() === cmd.Name.NEW_SESSION) {
- this.w3c = this.w3c || !('status' in parsed);
+ this.w3c = this.w3c || isW3C;
}
- return new Session(parsed['sessionId'], parsed['value']);
+ // No implementations use the `capabilities` key yet...
+ let capabilities = value.capabilities || value.value;
+ return new Session(value.sessionId, capabilities);
}
- if (parsed
- && typeof parsed === 'object'
- && 'value' in parsed) {
- let value = parsed['value'];
- return typeof value === 'undefined' ? null : value;
- }
- return parsed;
+ return typeof value === 'undefined' ? null : value;
});
});
}
@@ -481,40 +485,45 @@ function tryParse(str) {
*
* @param {!cmd.Command} command The command the response is for.
* @param {!Response} httpResponse The HTTP response to parse.
- * @param {boolean} w3c Whether the response should be processed using the
- * W3C wire protocol.
- * @return {?} The parsed response.
+ * @return {{isW3C: boolean, value: ?}} An object describing the parsed
+ * response. This object will have two fields: `isW3C` indicates whether
+ * the response looks like it came from a remote end that conforms with the
+ * W3C WebDriver spec, and `value`, the actual response value.
* @throws {WebDriverError} If the HTTP response is an error.
*/
-function parseHttpResponse(command, httpResponse, w3c) {
- let parsed = tryParse(httpResponse.body);
- if (parsed !== undefined) {
- if (httpResponse.status < 200) {
- // This should never happen, but throw the raw response so
- // users report it.
- throw new error.WebDriverError(
- `Unexpected HTTP response:\n${httpResponse}`);
- }
+function parseHttpResponse(command, httpResponse) {
+ if (httpResponse.status < 200) {
+ // This should never happen, but throw the raw response so users report it.
+ throw new error.WebDriverError(
+ `Unexpected HTTP response:\n${httpResponse}`);
+ }
- if (w3c) {
- if (httpResponse.status > 399) {
- error.throwDecodedError(parsed);
+ let parsed = tryParse(httpResponse.body);
+ if (parsed && typeof parsed === 'object') {
+ let value = parsed.value;
+ let isW3C =
+ value !== null && typeof value === 'object'
+ && typeof parsed.status === 'undefined';
+
+ if (!isW3C) {
+ error.checkLegacyResponse(parsed);
+
+ // Adjust legacy new session responses to look like W3C to simplify
+ // later processing.
+ if (command.getName() === cmd.Name.NEW_SESSION
+ || command.getName() == cmd.Name.DESCRIBE_SESSION) {
+ value = parsed;
}
- return parsed;
- }
- // If this is a new session command, we need to check for a W3C compliant
- // error object. This is necessary since a successful new session command
- // is what puts the executor into W3C mode.
- if (httpResponse.status > 399
- && (command.getName() == cmd.Name.NEW_SESSION
- || command.getName() === cmd.Name.DESCRIBE_SESSION)
- && error.isErrorResponse(parsed)) {
- error.throwDecodedError(parsed);
+ } else if (httpResponse.status > 399) {
+ error.throwDecodedError(value);
}
- error.checkLegacyResponse(parsed);
- return parsed;
+ return {isW3C, value};
+ }
+
+ if (parsed !== undefined) {
+ return {isW3C: false, value: parsed};
}
let value = httpResponse.body.replace(/\r\n/g, '\n');
@@ -527,7 +536,7 @@ function parseHttpResponse(command, httpResponse, w3c) {
throw new error.WebDriverError(value);
}
- return value || null;
+ return {isW3C: false, value: value || null};
}