UNPKG

@testim/testim-cli

Version:

Command line interface for running Testing on you CI

97 lines (82 loc) 9.27 kB
/** * * This command changes the viewport size of the browser. When talking about browser size we have to differentiate * between the actual window size of the browser application and the document/viewport size of the website. The * window size will always be bigger since it includes the height of any menu or status bars. * * <example> :setViewportSize.js client .setViewportSize({ width: 500, height: 500 }) .windowHandleSize(function(err, res) { console.log(res.value); // outputs: "{ width: 500, height: 602 }" }) * </example> * * @param {Object} size window width/height * @param {Boolean} type set to `false` to change window size, `true` (default) to change viewport size * * @uses protocol/execute, protocol/windowHandleSize * @type window * */ 'use strict'; var _interopRequireDefault = require('babel-runtime/helpers/interop-require-default')['default']; Object.defineProperty(exports, '__esModule', { value: true }); var _scriptsGetViewportSize = require('../scripts/getViewportSize'); var _scriptsGetViewportSize2 = _interopRequireDefault(_scriptsGetViewportSize); var _utilsErrorHandler = require('../utils/ErrorHandler'); var MAX_TRIES = 5; var setViewportSize = function setViewportSize(size, type) { /** * parameter check */ if (typeof size !== 'object' || typeof size.width !== 'number' || typeof size.height !== 'number' || typeof type !== 'undefined' && typeof type !== 'boolean') { throw new _utilsErrorHandler.CommandError('number or type of arguments don\'t agree with setViewportSize command'); } var shouldIndent = typeof type === 'undefined' ? true : type; return shouldIndent ? _setViewportSize.call(this, size) : this.windowHandleSize(size); }; /** * to set viewport size properly we need to execute the process multiple times * since the difference between the inner and outer size changes when browser * switch between fullscreen modes or visibility of scrollbar */ var _setViewportSize = function _setViewportSize(size) { var _this = this; var retryNo = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1]; /** * get window size */ return this.windowHandleSize().then(function (windowHandleSize) { /** * get viewport size */ return _this.execute(_scriptsGetViewportSize2['default']).then(function (viewportSize) { var widthDiff = windowHandleSize.value.width - viewportSize.value.screenWidth; var heightDiff = windowHandleSize.value.height - viewportSize.value.screenHeight; /** * change window size with indent */ return _this.windowHandleSize({ width: size.width + widthDiff, height: size.height + heightDiff }); }).execute(_scriptsGetViewportSize2['default']).then(function (res) { /** * if viewport size not equals desired size, execute process again */ if (retryNo < MAX_TRIES && (res.value.screenWidth !== size.width || res.value.screenHeight !== size.height)) { return _setViewportSize.call(_this, size, ++retryNo); } }); }); }; exports['default'] = setViewportSize; module.exports = exports['default']; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jb21tYW5kcy9zZXRWaWV3cG9ydFNpemUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztzQ0EwQjRCLDRCQUE0Qjs7OztpQ0FDM0IsdUJBQXVCOztBQUVwRCxJQUFNLFNBQVMsR0FBRyxDQUFDLENBQUE7O0FBRW5CLElBQUksZUFBZSxHQUFHLFNBQWxCLGVBQWUsQ0FBYSxJQUFJLEVBQUUsSUFBSSxFQUFFOzs7O0FBSXhDLFFBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxJQUN4QixPQUFPLElBQUksQ0FBQyxLQUFLLEtBQUssUUFBUSxJQUM5QixPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssUUFBUSxJQUM5QixPQUFPLElBQUksS0FBSyxXQUFXLElBQUksT0FBTyxJQUFJLEtBQUssU0FBUyxBQUFDLEVBQUU7QUFDNUQsY0FBTSw0R0FBd0YsQ0FBQTtLQUNqRzs7QUFFRCxRQUFJLFlBQVksR0FBRyxBQUFDLE9BQU8sSUFBSSxLQUFLLFdBQVcsR0FBSSxJQUFJLEdBQUcsSUFBSSxDQUFBO0FBQzlELFdBQU8sWUFBWSxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFBO0NBQ3hGLENBQUE7Ozs7Ozs7QUFPRCxJQUFJLGdCQUFnQixHQUFHLFNBQW5CLGdCQUFnQixDQUFhLElBQUksRUFBZTs7O1FBQWIsT0FBTyx5REFBRyxDQUFDOzs7OztBQUk5QyxXQUFPLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFDLGdCQUFnQixFQUFLOzs7O0FBSXRELGVBQU8sTUFBSyxPQUFPLHFDQUFpQixDQUFDLElBQUksQ0FBQyxVQUFDLFlBQVksRUFBSztBQUN4RCxnQkFBSSxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQTtBQUM3RSxnQkFBSSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQTs7Ozs7QUFLaEYsbUJBQU8sTUFBSyxnQkFBZ0IsQ0FBQztBQUN6QixxQkFBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUztBQUM3QixzQkFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVTthQUNuQyxDQUFDLENBQUE7U0FDTCxDQUFDLENBQUMsT0FBTyxxQ0FBaUIsQ0FBQyxJQUFJLENBQUMsVUFBQyxHQUFHLEVBQUs7Ozs7QUFJdEMsZ0JBQUksT0FBTyxHQUFHLFNBQVMsS0FBSyxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsS0FBSyxJQUFJLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsWUFBWSxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUEsQUFBQyxFQUFFO0FBQ3pHLHVCQUFPLGdCQUFnQixDQUFDLElBQUksUUFBTyxJQUFJLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQTthQUN0RDtTQUNKLENBQUMsQ0FBQTtLQUNMLENBQUMsQ0FBQTtDQUNMLENBQUE7O3FCQUVjLGVBQWUiLCJmaWxlIjoic2V0Vmlld3BvcnRTaXplLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKlxuICogVGhpcyBjb21tYW5kIGNoYW5nZXMgdGhlIHZpZXdwb3J0IHNpemUgb2YgdGhlIGJyb3dzZXIuIFdoZW4gdGFsa2luZyBhYm91dCBicm93c2VyIHNpemUgd2UgaGF2ZSB0byBkaWZmZXJlbnRpYXRlXG4gKiBiZXR3ZWVuIHRoZSBhY3R1YWwgd2luZG93IHNpemUgb2YgdGhlIGJyb3dzZXIgYXBwbGljYXRpb24gYW5kIHRoZSBkb2N1bWVudC92aWV3cG9ydCBzaXplIG9mIHRoZSB3ZWJzaXRlLiBUaGVcbiAqIHdpbmRvdyBzaXplIHdpbGwgYWx3YXlzIGJlIGJpZ2dlciBzaW5jZSBpdCBpbmNsdWRlcyB0aGUgaGVpZ2h0IG9mIGFueSBtZW51IG9yIHN0YXR1cyBiYXJzLlxuICpcbiAqIDxleGFtcGxlPlxuIDpzZXRWaWV3cG9ydFNpemUuanNcbiBjbGllbnRcbiAuc2V0Vmlld3BvcnRTaXplKHtcbiAgICB3aWR0aDogNTAwLFxuICAgIGhlaWdodDogNTAwXG4gfSlcbiAud2luZG93SGFuZGxlU2l6ZShmdW5jdGlvbihlcnIsIHJlcykge1xuICAgIGNvbnNvbGUubG9nKHJlcy52YWx1ZSk7IC8vIG91dHB1dHM6IFwieyB3aWR0aDogNTAwLCBoZWlnaHQ6IDYwMiB9XCJcbiB9KVxuICogPC9leGFtcGxlPlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSAgIHNpemUgIHdpbmRvdyB3aWR0aC9oZWlnaHRcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gIHR5cGUgIHNldCB0byBgZmFsc2VgIHRvIGNoYW5nZSB3aW5kb3cgc2l6ZSwgYHRydWVgIChkZWZhdWx0KSB0byBjaGFuZ2Ugdmlld3BvcnQgc2l6ZVxuICpcbiAqIEB1c2VzIHByb3RvY29sL2V4ZWN1dGUsIHByb3RvY29sL3dpbmRvd0hhbmRsZVNpemVcbiAqIEB0eXBlIHdpbmRvd1xuICpcbiAqL1xuXG5pbXBvcnQgZ2V0Vmlld3BvcnRTaXplIGZyb20gJy4uL3NjcmlwdHMvZ2V0Vmlld3BvcnRTaXplJ1xuaW1wb3J0IHsgQ29tbWFuZEVycm9yIH0gZnJvbSAnLi4vdXRpbHMvRXJyb3JIYW5kbGVyJ1xuXG5jb25zdCBNQVhfVFJJRVMgPSA1XG5cbmxldCBzZXRWaWV3cG9ydFNpemUgPSBmdW5jdGlvbiAoc2l6ZSwgdHlwZSkge1xuICAgIC8qKlxuICAgICAqIHBhcmFtZXRlciBjaGVja1xuICAgICAqL1xuICAgIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ29iamVjdCcgfHxcbiAgICAgICAgdHlwZW9mIHNpemUud2lkdGggIT09ICdudW1iZXInIHx8XG4gICAgICAgIHR5cGVvZiBzaXplLmhlaWdodCAhPT0gJ251bWJlcicgfHxcbiAgICAgICAgKHR5cGVvZiB0eXBlICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgdHlwZSAhPT0gJ2Jvb2xlYW4nKSkge1xuICAgICAgICB0aHJvdyBuZXcgQ29tbWFuZEVycm9yKGBudW1iZXIgb3IgdHlwZSBvZiBhcmd1bWVudHMgZG9uJ3QgYWdyZWUgd2l0aCBzZXRWaWV3cG9ydFNpemUgY29tbWFuZGApXG4gICAgfVxuXG4gICAgbGV0IHNob3VsZEluZGVudCA9ICh0eXBlb2YgdHlwZSA9PT0gJ3VuZGVmaW5lZCcpID8gdHJ1ZSA6IHR5cGVcbiAgICByZXR1cm4gc2hvdWxkSW5kZW50ID8gX3NldFZpZXdwb3J0U2l6ZS5jYWxsKHRoaXMsIHNpemUpIDogdGhpcy53aW5kb3dIYW5kbGVTaXplKHNpemUpXG59XG5cbi8qKlxuICogdG8gc2V0IHZpZXdwb3J0IHNpemUgcHJvcGVybHkgd2UgbmVlZCB0byBleGVjdXRlIHRoZSBwcm9jZXNzIG11bHRpcGxlIHRpbWVzXG4gKiBzaW5jZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBpbm5lciBhbmQgb3V0ZXIgc2l6ZSBjaGFuZ2VzIHdoZW4gYnJvd3NlclxuICogc3dpdGNoIGJldHdlZW4gZnVsbHNjcmVlbiBtb2RlcyBvciB2aXNpYmlsaXR5IG9mIHNjcm9sbGJhclxuICovXG5sZXQgX3NldFZpZXdwb3J0U2l6ZSA9IGZ1bmN0aW9uIChzaXplLCByZXRyeU5vID0gMCkge1xuICAgIC8qKlxuICAgICAqIGdldCB3aW5kb3cgc2l6ZVxuICAgICAqL1xuICAgIHJldHVybiB0aGlzLndpbmRvd0hhbmRsZVNpemUoKS50aGVuKCh3aW5kb3dIYW5kbGVTaXplKSA9PiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBnZXQgdmlld3BvcnQgc2l6ZVxuICAgICAgICAgKi9cbiAgICAgICAgcmV0dXJuIHRoaXMuZXhlY3V0ZShnZXRWaWV3cG9ydFNpemUpLnRoZW4oKHZpZXdwb3J0U2l6ZSkgPT4ge1xuICAgICAgICAgICAgbGV0IHdpZHRoRGlmZiA9IHdpbmRvd0hhbmRsZVNpemUudmFsdWUud2lkdGggLSB2aWV3cG9ydFNpemUudmFsdWUuc2NyZWVuV2lkdGhcbiAgICAgICAgICAgIGxldCBoZWlnaHREaWZmID0gd2luZG93SGFuZGxlU2l6ZS52YWx1ZS5oZWlnaHQgLSB2aWV3cG9ydFNpemUudmFsdWUuc2NyZWVuSGVpZ2h0XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogY2hhbmdlIHdpbmRvdyBzaXplIHdpdGggaW5kZW50XG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHJldHVybiB0aGlzLndpbmRvd0hhbmRsZVNpemUoe1xuICAgICAgICAgICAgICAgIHdpZHRoOiBzaXplLndpZHRoICsgd2lkdGhEaWZmLFxuICAgICAgICAgICAgICAgIGhlaWdodDogc2l6ZS5oZWlnaHQgKyBoZWlnaHREaWZmXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KS5leGVjdXRlKGdldFZpZXdwb3J0U2l6ZSkudGhlbigocmVzKSA9PiB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIGlmIHZpZXdwb3J0IHNpemUgbm90IGVxdWFscyBkZXNpcmVkIHNpemUsIGV4ZWN1dGUgcHJvY2VzcyBhZ2FpblxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAocmV0cnlObyA8IE1BWF9UUklFUyAmJiAocmVzLnZhbHVlLnNjcmVlbldpZHRoICE9PSBzaXplLndpZHRoIHx8IHJlcy52YWx1ZS5zY3JlZW5IZWlnaHQgIT09IHNpemUuaGVpZ2h0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfc2V0Vmlld3BvcnRTaXplLmNhbGwodGhpcywgc2l6ZSwgKytyZXRyeU5vKVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH0pXG59XG5cbmV4cG9ydCBkZWZhdWx0IHNldFZpZXdwb3J0U2l6ZVxuIl19