@@ -1212,6 +1212,32 @@ def find_element(self, selector: str, by: str = By.CSS_SELECTOR, waiting_time=10
1212
1212
except (TimeoutException , NoSuchElementException ):
1213
1213
return None
1214
1214
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
+
1215
1241
def wait_for_stale_element (self , element : WebElement , timeout : int = 10000 ):
1216
1242
"""
1217
1243
Wait until the WebElement element becomes stale (outdated).
0 commit comments