@applitools/eyes.selenium
Version:
Applitools Eyes SDK for Selenium WebDriver
98 lines (83 loc) • 2.63 kB
JavaScript
;
const { ArgumentGuard, PositionProvider, Location } = require('@applitools/eyes.sdk.core');
const { EyesSeleniumUtils } = require('../EyesSeleniumUtils');
const { ScrollPositionMemento } = require('./ScrollPositionMemento');
const { EyesDriverOperationError } = require('../errors/EyesDriverOperationError');
class ScrollPositionProvider extends PositionProvider {
/**
* @param {Logger} logger A Logger instance.
* @param {EyesJsExecutor} executor
*/
constructor(logger, executor) {
super();
ArgumentGuard.notNull(logger, 'logger');
ArgumentGuard.notNull(executor, 'executor');
this._logger = logger;
this._executor = executor;
this._logger.verbose('creating ScrollPositionProvider');
}
/**
* @override
* @inheritDoc
*/
getCurrentPosition() {
this._logger.verbose('ScrollPositionProvider - getCurrentPosition()');
const that = this;
return EyesSeleniumUtils.getCurrentScrollPosition(this._executor)
.catch(err => {
throw new EyesDriverOperationError('Failed to extract current scroll position!', err);
})
.then(result => {
that._logger.verbose(`Current position: ${result}`);
return result;
});
}
/**
* @override
* @inheritDoc
*/
setPosition(location) {
const that = this;
that._logger.verbose(`ScrollPositionProvider - Scrolling to ${location}`);
return EyesSeleniumUtils.setCurrentScrollPosition(this._executor, location).then(() => {
that._logger.verbose('ScrollPositionProvider - Done scrolling!');
});
}
/**
* @override
* @inheritDoc
*/
getEntireSize() {
const that = this;
return EyesSeleniumUtils.getCurrentFrameContentEntireSize(this._executor).then(result => {
that._logger.verbose(`ScrollPositionProvider - Entire size: ${result}`);
return result;
});
}
/**
* @override
* @return {Promise<ScrollPositionMemento>}
*/
getState() {
return this.getCurrentPosition().then(position => new ScrollPositionMemento(position));
}
// noinspection JSCheckFunctionSignatures
/**
* @override
* @param {ScrollPositionMemento} state The initial state of position
* @return {Promise<void>}
*/
restoreState(state) {
const that = this;
return this.setPosition(new Location(state.getX(), state.getY())).then(() => {
that._logger.verbose('Position restored.');
});
}
/**
* @return {Promise<void>}
*/
scrollToBottomRight() {
return EyesSeleniumUtils.scrollToBottomRight(this._executor);
}
}
exports.ScrollPositionProvider = ScrollPositionProvider;