UNPKG

@applitools/eyes.selenium

Version:

Applitools Eyes SDK for Selenium WebDriver

65 lines (52 loc) 1.86 kB
'use strict'; const { Location } = require('@applitools/eyes.sdk.core'); const { RegionVisibilityStrategy } = require('./RegionVisibilityStrategy'); const VISIBILITY_OFFSET = 100; // Pixels class MoveToRegionVisibilityStrategy extends RegionVisibilityStrategy { /** * @param {Logger} logger * @param {PromiseFactory} promiseFactory */ constructor(logger, promiseFactory) { super(); this._logger = logger; this._promiseFactory = promiseFactory; /** @type {PositionMemento} */ this._originalPosition = null; } /** * @override * @inheritDoc */ moveToRegion(positionProvider, location) { this._logger.verbose('Getting current position state..'); const that = this; return positionProvider.getState() .then(originalPosition_ => { that._originalPosition = originalPosition_; that._logger.verbose('Done! Setting position..'); // We set the location to "almost" the location we were asked. This is because sometimes, moving the browser // to the specific pixel where the element begins, causes the element to be slightly out of the viewport. let dstX = location.getX() - VISIBILITY_OFFSET; dstX = dstX < 0 ? 0 : dstX; let dstY = location.getY() - VISIBILITY_OFFSET; dstY = dstY < 0 ? 0 : dstY; return positionProvider.setPosition(new Location(dstX, dstY)); }) .then(() => { that._logger.verbose('Done!'); }); } /** * @override * @inheritDoc */ returnToOriginalPosition(positionProvider) { this._logger.verbose('Returning to original position...'); const that = this; return positionProvider.restoreState(this._originalPosition).then(() => { that._logger.verbose('Done!'); }); } } exports.MoveToRegionVisibilityStrategy = MoveToRegionVisibilityStrategy;