@@ -4886,11 +4886,13 @@ def get_offsets(location: str, Element: WebElement) -> tuple[int]:
48864886def drag_and_drop (dataset ):
48874887 sModuleInfo = inspect .currentframe ().f_code .co_name + " : " + MODULE_NAME
48884888 global selenium_driver
4889+ from time import sleep
48894890 try :
48904891 source = []
48914892 destination = []
48924893 destination_offset = None
4893- param_dict = {"elementparameter" : "element parameter" , "parentparameter" : "parent parameter" , "siblingparameter" : "sibling parameter" , "childparameter" : "child parameter" }
4894+ delay = None
4895+ param_dict = {"elementparameter" : "element parameter" , "parentparameter" : "parent parameter" , "siblingparameter" : "sibling parameter" , "childparameter" : "child parameter" ,"optionalparameter" : "optional parameter" }
48944896 for left , mid , right in dataset :
48954897 if mid .startswith ("src" ) or mid .startswith ("source" ):
48964898 mid = mid .replace ("src" , "" ).replace (" " , "" ).replace ("source" , "" )
@@ -4907,6 +4909,8 @@ def drag_and_drop(dataset):
49074909 destination .append ((left , mid , right ))
49084910 elif left .strip ().lower () == "destination offset" and mid .strip ().lower () == 'optional parameter' :
49094911 destination_offset = right
4912+ elif left .strip ().lower () == "delay" :
4913+ delay = float (right .strip ())
49104914
49114915 if not source :
49124916 CommonUtil .ExecLog (sModuleInfo , 'Please provide source element with "src element parameter", "src parent parameter" etc. Example:\n ' +
@@ -4928,12 +4932,67 @@ def drag_and_drop(dataset):
49284932 CommonUtil .ExecLog (sModuleInfo , "Destination Element is not found" , 3 )
49294933 return "zeuz_failed"
49304934
4935+ """ The following code does not work with mentioned delay time. delay=2 takes 25 seconds for a dnd """
4936+ # if delay:
4937+ # if destination_offset:
4938+ # destination_x, destination_y = get_offsets(destination_offset, destination_element)
4939+ # else:
4940+ # destination_x = destination_element.location['x']
4941+ # destination_y = destination_element.location['y']
4942+ # distance_x = destination_x - source_element.location['x']
4943+ # distance_y = destination_y - source_element.location['y']
4944+ # total_time = delay
4945+ # total_distance = (distance_x**2 + distance_y**2)**0.5
4946+ #
4947+ # pixels_per_step = 5
4948+ # steps = int(total_distance / pixels_per_step)
4949+ #
4950+ # # Calculate the ideal time per step to fit within the total time
4951+ # ideal_time_per_step = total_time / steps
4952+ #
4953+ # # Start the high-resolution timer
4954+ # start_time = time.perf_counter()
4955+ #
4956+ # # Create an ActionChains object
4957+ # actions = ActionChains(selenium_driver)
4958+ #
4959+ # # Click and hold the source element
4960+ # actions.click_and_hold(source_element).perform()
4961+ #
4962+ # # Manually move the mouse to the target element in small increments
4963+ # for i in range(steps):
4964+ # # Calculate the movement for this step
4965+ # move_x = distance_x / steps
4966+ # move_y = distance_y / steps
4967+ #
4968+ # # Move the mouse by the calculated offset
4969+ # actions.move_by_offset(move_x, move_y).perform()
4970+ #
4971+ # # Calculate elapsed time and adjust the sleep time
4972+ # elapsed_time = time.perf_counter() - start_time
4973+ # remaining_time = total_time - elapsed_time
4974+ # time_per_step = remaining_time / (steps - i)
4975+ #
4976+ # if time_per_step > 0:
4977+ # time.sleep(time_per_step)
4978+ #
4979+ # # Release the mouse button to drop the element
4980+ # actions.release().perform()
4981+ # sleep(2)
4982+
49314983 if destination_offset :
49324984 x , y = get_offsets (destination_offset , destination_element )
4933- ActionChains (selenium_driver ).click_and_hold (source_element ).move_to_element_with_offset (destination_element , x , y ).release ().perform ()
4985+ if delay :
4986+ """ This line of code was not tested, just keeping here"""
4987+ ActionChains (selenium_driver ).click_and_hold (source_element ).move_to_element_with_offset (destination_element , x , y ).pause (0.5 ).release ().perform ()
4988+ else :
4989+ ActionChains (selenium_driver ).click_and_hold (source_element ).move_to_element_with_offset (destination_element , x , y ).release ().perform ()
4990+
49344991 else :
4935- ActionChains (selenium_driver ).drag_and_drop (source_element , destination_element ).perform ()
4936- # ActionChains(selenium_driver).click_and_hold(source_element).move_to_element(destination_element).pause(0.5).release(destination_element).perform()
4992+ if delay :
4993+ ActionChains (selenium_driver ).click_and_hold (source_element ).move_to_element (destination_element ).pause (0.5 ).release (destination_element ).perform ()
4994+ else :
4995+ ActionChains (selenium_driver ).drag_and_drop (source_element , destination_element ).perform ()
49374996
49384997 CommonUtil .ExecLog (sModuleInfo , "Drag and drop completed from source to destination" , 1 )
49394998 return "passed"
0 commit comments