import { browser , Key , element , by } from 'protractor' ; import { getScrollPosition } from '../util/index' ; describe ( 'scroll blocking' , ( ) => { beforeEach ( ( ) => browser . get ( '/block-scroll-strategy' ) ) ; afterEach ( ( ) => clickOn ( 'disable' ) ) ; it ( 'should not be able to scroll programmatically along the x axis' , async ( ) => { scrollPage ( 0 , 100 ) ; expect ( ( await getScrollPosition ( ) ) . y ) . toBe ( 100 , 'Expected the page to be scrollable.' ) ; clickOn ( 'enable' ) ; scrollPage ( 0 , 200 ) ; expect ( ( await getScrollPosition ( ) ) . y ) . toBe ( 100 , 'Expected the page not to be scrollable.' ) ; clickOn ( 'disable' ) ; scrollPage ( 0 , 300 ) ; expect ( ( await getScrollPosition ( ) ) . y ) . toBe ( 300 , 'Exected page to be scrollable again.' ) ; } ) ; it ( 'should not be able to scroll programmatically along the y axis' , async ( ) => { scrollPage ( 100 , 0 ) ; expect ( ( await getScrollPosition ( ) ) . x ) . toBe ( 100 , 'Expected the page to be scrollable.' ) ; clickOn ( 'enable' ) ; scrollPage ( 200 , 0 ) ; expect ( ( await getScrollPosition ( ) ) . x ) . toBe ( 100 , 'Expected the page not to be scrollable.' ) ; clickOn ( 'disable' ) ; scrollPage ( 300 , 0 ) ; expect ( ( await getScrollPosition ( ) ) . x ) . toBe ( 300 , 'Exected page to be scrollable again.' ) ; } ) ; it ( 'should not be able to scroll via the keyboard along the y axis' , async ( ) => { const body = element ( by . tagName ( 'body' ) ) ; scrollPage ( 0 , 100 ) ; expect ( ( await getScrollPosition ( ) ) . y ) . toBe ( 100 , 'Expected the page to be scrollable.' ) ; clickOn ( 'enable' ) ; await body . sendKeys ( Key . ARROW_DOWN ) ; await body . sendKeys ( Key . ARROW_DOWN ) ; await body . sendKeys ( Key . ARROW_DOWN ) ; expect ( ( await getScrollPosition ( ) ) . y ) . toBe ( 100 , 'Expected the page not to be scrollable.' ) ; clickOn ( 'disable' ) ; await body . sendKeys ( Key . ARROW_DOWN ) ; await body . sendKeys ( Key . ARROW_DOWN ) ; await body . sendKeys ( Key . ARROW_DOWN ) ; expect ( ( await getScrollPosition ( ) ) . y ) . toBeGreaterThan ( 100 , 'Expected the page to be scrollable again.' ) ; } ) ; it ( 'should not be able to scroll via the keyboard along the x axis' , async ( ) => { const body = element ( by . tagName ( 'body' ) ) ; scrollPage ( 100 , 0 ) ; expect ( ( await getScrollPosition ( ) ) . x ) . toBe ( 100 , 'Expected the page to be scrollable.' ) ; clickOn ( 'enable' ) ; await body . sendKeys ( Key . ARROW_RIGHT ) ; await body . sendKeys ( Key . ARROW_RIGHT ) ; await body . sendKeys ( Key . ARROW_RIGHT ) ; expect ( ( await getScrollPosition ( ) ) . x ) . toBe ( 100 , 'Expected the page not to be scrollable.' ) ; clickOn ( 'disable' ) ; await body . sendKeys ( Key . ARROW_RIGHT ) ; await body . sendKeys ( Key . ARROW_RIGHT ) ; await body . sendKeys ( Key . ARROW_RIGHT ) ; expect ( ( await getScrollPosition ( ) ) . x ) . toBeGreaterThan ( 100 , 'Expected the page to be scrollable again.' ) ; } ) ; it ( 'should not be able to scroll the page after reaching the end of an element along the y axis' , async ( ) => { const scroller = element ( by . id ( 'scroller' ) ) ; browser . executeScript ( `document.getElementById('scroller').scrollTop = 200;` ) ; scrollPage ( 0 , 100 ) ; expect ( ( await getScrollPosition ( ) ) . y ) . toBe ( 100 , 'Expected the page to be scrollable.' ) ; clickOn ( 'enable' ) ; scroller . sendKeys ( Key . ARROW_DOWN ) ; scroller . sendKeys ( Key . ARROW_DOWN ) ; scroller . sendKeys ( Key . ARROW_DOWN ) ; expect ( ( await getScrollPosition ( ) ) . y ) . toBe ( 100 , 'Expected the page not to have scrolled.' ) ; } ) ; it ( 'should not be able to scroll the page after reaching the end of an element along the x axis' , async ( ) => { const scroller = element ( by . id ( 'scroller' ) ) ; browser . executeScript ( `document.getElementById('scroller').scrollLeft = 200;` ) ; scrollPage ( 100 , 0 ) ; expect ( ( await getScrollPosition ( ) ) . x ) . toBe ( 100 , 'Expected the page to be scrollable.' ) ; clickOn ( 'enable' ) ; scroller . sendKeys ( Key . ARROW_RIGHT ) ; scroller . sendKeys ( Key . ARROW_RIGHT ) ; scroller . sendKeys ( Key . ARROW_RIGHT ) ; expect ( ( await getScrollPosition ( ) ) . x ) . toBe ( 100 , 'Expected the page not to have scrolled.' ) ; } ) ; } ) ; function clickOn ( id ) { browser . executeScript ( `document.getElementById('${ id }').click()` ) ; } function scrollPage ( x , y ) { return browser . executeScript ( `window.scrollTo(${ x }, ${ y });` ) ; }