@@ -68,8 +68,6 @@ def _validate_params(self, action, required_params):
6868 for key in keys :
6969 value = value .get (key )
7070 if value is None :
71- if action ["type" ] == "Scroll" and key == "distance" :
72- continue
7371 logging .error (f"Missing required parameter: { param } " )
7472 return False # Return False to indicate validation failure
7573 return True # Return True if all parameters are present
@@ -267,18 +265,38 @@ async def _execute_input(self, action):
267265 return {"success" : False , "message" : f"Input action failed with an exception: { e } " }
268266
269267 async def _execute_scroll (self , action ):
270- """Execute scroll action."""
271- if not self ._validate_params (action , ["param.direction" , "param.scrollType" , "param.distance" ]):
272- return {"success" : False , "message" : "Missing parameters for scroll action" }
273- direction = action .get ("param" ).get ("direction" , "down" )
274- scroll_type = action .get ("param" ).get ("scrollType" , "once" )
275- distance = action .get ("param" ).get ("distance" , None )
276-
277- success = await self ._actions .scroll (direction , scroll_type , distance )
268+ """Execute scroll action - scroll to a specific element."""
269+ if not self ._validate_params (action , ["locate.id" ]):
270+ return {"success" : False , "message" : "Missing locate.id for scroll action. Scroll requires an element ID to scroll to." }
271+
272+ element_id = action .get ("locate" , {}).get ("id" )
273+
274+ success = await self ._actions .scroll (element_id )
275+
276+ # Read action context for detailed error information
277+ ctx = action_context_var .get ()
278+
278279 if success :
279- return {"success" : True , "message" : f"Scrolled { direction } successfully." }
280+ return {"success" : True , "message" : f"Scrolled to element { element_id } successfully." }
280281 else :
281- return {"success" : False , "message" : "Scroll action failed." }
282+ # Enrich error message with context
283+ base_message = f"Scroll to element { element_id } failed."
284+ error_details = {}
285+
286+ if ctx and ctx .error_type :
287+ error_details = {
288+ "error_type" : ctx .error_type ,
289+ "error_reason" : ctx .error_reason ,
290+ "attempted_strategies" : ctx .attempted_strategies ,
291+ "element_info" : ctx .element_info ,
292+ "playwright_error" : ctx .playwright_error
293+ }
294+
295+ return {
296+ "success" : False ,
297+ "message" : base_message ,
298+ "error_details" : error_details
299+ }
282300
283301 async def _execute_keyboard_press (self , action ):
284302 """Execute keyboard press action."""
0 commit comments