@@ -1212,6 +1212,32 @@ def find_element(self, selector: str, by: str = By.CSS_SELECTOR, waiting_time=10
12121212 except (TimeoutException , NoSuchElementException ):
12131213 return None
12141214
1215+ def scroll_element (self , element : WebElement , steps : int = 100 , interval : float = 500 ,
1216+ start : int = 0 , end : int = None ):
1217+ """Scrolls down an element by its scroll height or a given amount defined by `start` and `end`.
1218+
1219+ This is useful for scrolling down a page to load more content or
1220+ to scroll down a dynamically loaded element.
1221+
1222+ Args:
1223+ element (WebElement): The element to scroll.
1224+ steps (int, optional): Number of steps in which to conclude the scroll. Defaults to 100.
1225+ interval (float, optional): Time interval between each step. Defaults to 500ms.
1226+ start (int, optional): Start position. Defaults to 0.
1227+ end (int, optional): End position. Defaults to None.
1228+ """
1229+ ele_height = self .driver .execute_script (
1230+ "return arguments[0].scrollHeight;" , element
1231+ )
1232+
1233+ start = max (0 , start )
1234+ end = min (ele_height , end ) if end is not None else ele_height
1235+
1236+ for i in range (start , end , steps ):
1237+ self .driver .execute_script (
1238+ "arguments[0].scrollTo(0, arguments[1])" , element , i )
1239+ self .sleep (interval / 1000.0 )
1240+
12151241 def wait_for_stale_element (self , element : WebElement , timeout : int = 10000 ):
12161242 """
12171243 Wait until the WebElement element becomes stale (outdated).
0 commit comments