96 lines
3.5 KiB
JavaScript
Executable file
96 lines
3.5 KiB
JavaScript
Executable file
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const http = require("http");
|
|
const url = require("url");
|
|
/**
|
|
* Super dumb and simple WebDriver client. Works with selenium standalone, may or may not work yet
|
|
* directly with other drivers.
|
|
*/
|
|
class SimpleWebDriverClient {
|
|
constructor(seleniumAddress) {
|
|
this.seleniumAddress = seleniumAddress;
|
|
}
|
|
/**
|
|
* Send an execute script command.
|
|
*
|
|
* @param sessionId
|
|
* @param data A JSON blob with the script and arguments to execute.
|
|
*/
|
|
execute(sessionId, data) {
|
|
const url = ['session', sessionId, 'execute'].join('/');
|
|
return this.createSeleniumRequest('POST', url, data);
|
|
}
|
|
/**
|
|
* Send an execute async script command.
|
|
*
|
|
* @param sessionId
|
|
* @param data A JSON blob with the script and arguments to execute.
|
|
*/
|
|
executeAsync(sessionId, data) {
|
|
const url = ['session', sessionId, 'execute_async'].join('/');
|
|
return this.createSeleniumRequest('POST', url, data);
|
|
}
|
|
/**
|
|
* Get the location of an element.
|
|
*
|
|
* @param sessionId
|
|
* @param elementId
|
|
* @returns Promise<{}> A promise that resolves with the x and y coordinates of the element.
|
|
*/
|
|
getLocation(sessionId, elementId) {
|
|
const url = ['session', sessionId, 'element', elementId, 'location'].join('/');
|
|
return this.createSeleniumRequest('GET', url);
|
|
}
|
|
/**
|
|
* Get the size of an element.
|
|
*
|
|
* @param sessionId
|
|
* @param elementId
|
|
* @returns Promise<{}> A promise that resolves with the height and width of the element.
|
|
*/
|
|
getSize(sessionId, elementId) {
|
|
const url = ['session', sessionId, 'element', elementId, 'size'].join('/');
|
|
return this.createSeleniumRequest('GET', url);
|
|
}
|
|
createSeleniumRequest(method, messageUrl, data) {
|
|
let parsedUrl = url.parse(this.seleniumAddress);
|
|
let options = {};
|
|
options['method'] = method;
|
|
options['path'] = parsedUrl.path + '/' + messageUrl;
|
|
options['hostname'] = parsedUrl.hostname;
|
|
options['port'] = parseInt(parsedUrl.port);
|
|
let request = http.request(options);
|
|
return new Promise((resolve, reject) => {
|
|
if (data) {
|
|
request.write(data);
|
|
}
|
|
request.end();
|
|
request.on('response', (resp) => {
|
|
let respData = '';
|
|
resp.on('data', (d) => {
|
|
respData += d;
|
|
});
|
|
resp.on('error', (err) => {
|
|
reject(err);
|
|
});
|
|
resp.on('end', () => {
|
|
let response = JSON.parse(respData);
|
|
// Selenium 3.5.x or greater
|
|
if (response.status && response.status > 0) {
|
|
console.error(`Got status ${response.status} from selenium`, response.value);
|
|
reject(JSON.stringify(response.value));
|
|
}
|
|
// Selenium 3.0.x
|
|
if (response.state && response.state !== 'success') {
|
|
console.error(`Got response ${response.state} from selenium`, response.value);
|
|
reject(JSON.stringify(response.value));
|
|
}
|
|
resolve(response.value);
|
|
});
|
|
});
|
|
});
|
|
}
|
|
;
|
|
}
|
|
exports.SimpleWebDriverClient = SimpleWebDriverClient;
|
|
//# sourceMappingURL=simple_webdriver_client.js.map
|