import logger from '@wdio/logger'
const log = logger('webdriverio')
*
* Scroll within the browser viewport. Note that `x` and `y` coordinates are relative to the current
* scroll positon, therefore `browser.scroll(0, 0)` is a non operation.
*
* <example>
:scroll.js
it('should demonstrate the scroll command', async () => {
await browser.url('https://webdriver.io')
console.log(await browser.execute(() => window.scrollY)) // returns 0
await browser.scroll(0, 200)
console.log(await browser.execute(() => window.scrollY)) // returns 200
});
* </example>
*
* @alias element.scroll
* @param {number} [x=0] horizontal scroll position (default: `0`)
* @param {number} [y=0] vertical scroll position (default: `0`)
* @uses protocol/execute
* @type utility
*
*/
export function scroll (
this: WebdriverIO.Browser,
x = 0,
y = 0
): Promise<void> {
if (!x && !y) {
log.warn('"scroll" command was called with no parameters, skipping execution')
return Promise.resolve()
}
if (this.isMobile) {
return this.execute((x, y) => window.scrollBy(x, y), x, y)
}
return this.action('wheel')
.scroll({
deltaX: x,
deltaY: y,
duration: 0
})
.perform()
}