| "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 |