Finding all elements with a scroll Finding all elements with a scroll selenium selenium

Finding all elements with a scroll


This works with both horizontal and vertical scrollbars. The trick is detecting BOTH the too-wide/too-short AND if the computed CSS is going to allow you to display a scrollbar.

var ElementsWithScrolls = (function() {    var getComputedStyle = document.body && document.body.currentStyle ? function(elem) {        return elem.currentStyle;    } : function(elem) {        return document.defaultView.getComputedStyle(elem, null);    };    function getActualCss(elem, style) {        return getComputedStyle(elem)[style];    }    function isXScrollable(elem) {        return elem.offsetWidth < elem.scrollWidth &&            autoOrScroll(getActualCss(elem, 'overflow-x'));    }    function isYScrollable(elem) {        return elem.offsetHeight < elem.scrollHeight &&            autoOrScroll(getActualCss(elem, 'overflow-y'));    }    function autoOrScroll(text) {        return text == 'scroll' || text == 'auto';    }    function hasScroller(elem) {        return isYScrollable(elem) || isXScrollable(elem);    }    return function ElemenetsWithScrolls() {        return [].filter.call(document.querySelectorAll('*'), hasScroller);    };})();ElementsWithScrolls();


It will select the elements with overflowed and non-overflowed scrolls inside body tag:

$('body *').filter(function() {     return ($(this).scrollTop() != 0 || $(this).css('overflow') == 'scroll');});