o
    ѷ6i                     @   s   d dl mZmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZ d d	lmZ G d
d dZdS )    )AnyUnion)interaction)
KeyActions)KeyInput)PointerActions)PointerInput)WheelActions)
WheelInput)Commandc                   @   s$  e Zd Z				d&dedB dedB dedB deddf
dd	Zd
ede	d dB fddZ
edee fddZedee fddZedefddZedefddZedefddZd
edefddZded
edefddZd
edefddZd'dd Zd'd!d"Zd#eeB eB ddfd$d%ZdS )(ActionBuilderN   mousewheelkeyboarddurationreturnc                 C   sd   |pt tjd}|pttj}|pttj}|||g| _t|| _	t
||d| _t|| _|| _d S )Nr   )r   )r   r   POINTER_MOUSEr   KEYr
   WHEELdevicesr   _key_actionr   _pointer_actionr	   _wheel_actiondriver)selfr   r   r   r   r    r   u/var/www/hoanhtaovolam_webdjango/env/lib/python3.10/site-packages/selenium/webdriver/common/actions/action_builder.py__init__    s   


zActionBuilder.__init__name)r
   r   r   c                    s   t t fdd| jdS )zGet the device with the given name.

        Args:
            name: The name of the device to get.

        Returns:
            The device with the given name, or None if not found.
        c                    s   |  kS Nr   )xr   r   r   <lambda>:   s    z/ActionBuilder.get_device_with.<locals>.<lambda>N)nextfilterr   )r   r   r   r"   r   get_device_with1   s   	zActionBuilder.get_device_withc                 C      dd | j D S )Nc                 S      g | ]	}t |tr|qS r   )
isinstancer   .0devicer   r   r   
<listcomp>>       z0ActionBuilder.pointer_inputs.<locals>.<listcomp>r   r   r   r   r   pointer_inputs<      zActionBuilder.pointer_inputsc                 C   r'   )Nc                 S   r(   r   )r)   r   r*   r   r   r   r-   B   r.   z,ActionBuilder.key_inputs.<locals>.<listcomp>r/   r0   r   r   r   
key_inputs@   r2   zActionBuilder.key_inputsc                 C      | j S r    )r   r0   r   r   r   
key_actionD      zActionBuilder.key_actionc                 C   r4   r    )r   r0   r   r   r   pointer_actionH   r6   zActionBuilder.pointer_actionc                 C   r4   r    )r   r0   r   r   r   wheel_actionL   r6   zActionBuilder.wheel_actionc                 C      t |}| | |S )aG  Add a new key input device to the action builder.

        Args:
            name: The name of the key input device.

        Returns:
            The newly created key input device.

        Example:
            >>> action_builder = ActionBuilder(driver)
            >>> action_builder.add_key_input(name="keyboard2")
        )r   
_add_inputr   r   	new_inputr   r   r   add_key_inputP      
zActionBuilder.add_key_inputkindc                 C   s   t ||}| | |S )a  Add a new pointer input device to the action builder.

        Args:
            kind: The kind of pointer input device. Valid values are "mouse",
                "touch", or "pen".
            name: The name of the pointer input device.

        Returns:
            The newly created pointer input device.

        Example:
            >>> action_builder = ActionBuilder(driver)
            >>> action_builder.add_pointer_input(kind="mouse", name="mouse")
        )r   r:   )r   r?   r   r<   r   r   r   add_pointer_inputa   s   

zActionBuilder.add_pointer_inputc                 C   r9   )aL  Add a new wheel input device to the action builder.

        Args:
            name: The name of the wheel input device.

        Returns:
            The newly created wheel input device.

        Example:
            >>> action_builder = ActionBuilder(driver)
            >>> action_builder.add_wheel_input(name="wheel2")
        )r
   r:   r;   r   r   r   add_wheel_inputt   r>   zActionBuilder.add_wheel_inputc                 C   sL   dg i}| j D ]}| }|d r|d | g |_q| jtj| dS )aO  Performs all stored actions.

        Example:
            >>> action_builder = ActionBuilder(driver)
            >>> keyboard = action_builder.key_input
            >>> el = driver.find_element(id: "some_id")
            >>> action_builder.click(el).pause(keyboard).pause(keyboard).pause(keyboard).send_keys("keys").perform()
        actionsN)r   encodeappendrB   r   executer   W3C_ACTIONS)r   encr,   encodedr   r   r   perform   s   	
zActionBuilder.performc                 C   s   | j tj dS )a  Clears actions that are already stored on the remote end.

        Example:
            >>> action_builder = ActionBuilder(driver)
            >>> keyboard = action_builder.key_input
            >>> el = driver.find_element(By.ID, "some_id")
            >>> action_builder.click(el).pause(keyboard).pause(keyboard).pause(keyboard).send_keys("keys")
            >>> action_builder.clear_actions()
        N)r   rE   r   W3C_CLEAR_ACTIONSr0   r   r   r   clear_actions   s   
zActionBuilder.clear_actionsr<   c                 C   s   | j | dS )zyAdd a new input device to the action builder.

        Args:
            new_input: The new input device to add.
        N)r   rD   )r   r<   r   r   r   r:      s   zActionBuilder._add_input)NNNr   )r   N)__name__
__module____qualname__r   r
   r   intr   strr   r&   propertylistr1   r3   r   r5   r   r7   r	   r8   r=   r@   rA   rI   rK   r:   r   r   r   r   r      sB    


r   N)typingr   r   !selenium.webdriver.common.actionsr   -selenium.webdriver.common.actions.key_actionsr   +selenium.webdriver.common.actions.key_inputr   1selenium.webdriver.common.actions.pointer_actionsr   /selenium.webdriver.common.actions.pointer_inputr   /selenium.webdriver.common.actions.wheel_actionsr	   -selenium.webdriver.common.actions.wheel_inputr
   !selenium.webdriver.remote.commandr   r   r   r   r   r   <module>   s   