UNPKG

nightwatch

Version:

Easy to use Node.js based End-to-End testing solution for browser based apps and websites, using the W3C WebDriver API.

69 lines (55 loc) 2.11 kB
const Transport = require('./transport.js'); const HttpRequest = require('../http/request.js'); class WebdriverProtocol extends Transport { get Errors() { return require('./webdriver/errors.js'); } get MethodMappings() { return require('./webdriver/actions.js'); } //////////////////////////////////////////////////////////////////// // Elements related //////////////////////////////////////////////////////////////////// getElementId(resultValue) { return resultValue[Transport.WEB_ELEMENT_ID]; } isResultSuccess(result) { return result && (typeof result.value != 'undefined') && (!result.status || result.status !== -1); } invalidWindowReference(result) { return result.value && result.value.error === this.Errors.StatusCode.NO_SUCH_WINDOW; } //////////////////////////////////////////////////////////////////// // Transport related //////////////////////////////////////////////////////////////////// runProtocolAction(requestOptions) { let request = new HttpRequest(requestOptions); return new Promise((resolve, reject) => { request .on('success', (result, response) => { resolve(result); }) .on('error', (result, response, screenshotContent) => { let errorResult = this.handleProtocolError(result, response, screenshotContent); reject(errorResult); }) .send(); }); } handleProtocolError(result, response = {}) { let errorMessage = response && response.statusCode === 404 ? 'Unknown command' : 'An unknown error has occurred.'; if (result.value && result.value.message) { errorMessage = result.value.message; } else if (result.value && result.value.error && this.Errors.Response[result.value.error]) { errorMessage = this.Errors.Response[result.value.error].message; } return { status: -1, value : result && result.value || null, errorStatus: result && result.status || '', error : errorMessage, httpStatusCode: response.statusCode }; } } module.exports = WebdriverProtocol;