@testim/testim-cli
Version:
Command line interface for running Testing on you CI
76 lines (57 loc) • 1.91 kB
JavaScript
/**
*
* Scroll to a specific element. You can also append/pass two offset values as parameter
* to scroll to a specific position.
*
* <example>
:scroll.js
client
// scroll to specific element
.scroll('#myElement')
// scroll to specific element with offset
// scroll offset will be added to elements position
.scroll('#myElement', 100, 100)
// scroll to specific x and y position
.scroll(0, 250)
.end();
* </example>
*
* @param {String=} selector element to scroll to
* @param {Number} xoffset x offset to scroll to
* @param {Number} yoffset y offset to scroll to
*
* @uses protocol/element, protocol/elementIdLocation, protocol/touchScroll, protocol/execute
* @type utility
*
*/
var Q = require('q'),
scrollHelper = require('../helpers/_scroll');
module.exports = function scroll (selector, xoffset, yoffset) {
xoffset = typeof xoffset === 'number' ? xoffset : 0;
yoffset = typeof yoffset === 'number' ? yoffset : 0;
if(typeof selector === 'number' && typeof xoffset === 'number') {
yoffset = xoffset;
xoffset = selector;
selector = null;
}
if(this.isMobile) {
var queue = Q();
if(selector) {
queue = this.element(selector);
}
return queue.then(function(res) {
if(typeof res !== 'undefined') {
selector = res.value.ELEMENT;
}
return this.touchScroll(selector, xoffset, yoffset);
});
}
if(selector) {
return this.element(selector).then(function(res) {
return this.elementIdLocation(res.value.ELEMENT);
}).then(function(location) {
return this.execute(scrollHelper, location.value.x + xoffset, location.value.y + yoffset);
});
}
return this.execute(scrollHelper, xoffset, yoffset);
};