o
    ҷh#                     @   sv   d dl 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	 ZG d
d dZG dd dZee dS )    N)WebDriverException)By)	WebDriver)
WebElement   )AbstractEventListenerc                    sB   t | tr| S t | trt|  S t | tr fdd| D S | S )Nc                    s   g | ]}t | qS  )_wrap_elements.0item	ef_driverr   d/var/www/html/venv/lib/python3.10/site-packages/selenium/webdriver/support/event_firing_webdriver.py
<listcomp>"       z"_wrap_elements.<locals>.<listcomp>)
isinstanceEventFiringWebElementr   list)resultr   r   r   r   r	      s   



r	   c                
   @   s  e Zd ZdZdededdfddZedefdd	Zd
e	ddfddZ
d,ddZd,ddZdd Zdd Zd,ddZd,ddZejdfdefddZejdfdeje fddZde	dejejdf d e	d!ejejdf fd"d#Zd$d% Zd&d' Zd(d) Zd*d+ ZdS )-EventFiringWebDriverzRA wrapper around an arbitrary WebDriver instance which supports firing
    events.driverevent_listenerreturnNc                 C   s>   t |ts	tdt |tstd|| _| j| j_|| _dS )a]  Creates a new instance of the EventFiringWebDriver.

        :Args:
         - driver : A WebDriver instance
         - event_listener : Instance of a class that subclasses AbstractEventListener and implements it fully or partially

        Example:

        ::

            from selenium.webdriver import Firefox
            from selenium.webdriver.support.events import EventFiringWebDriver, AbstractEventListener

            class MyListener(AbstractEventListener):
                def before_navigate_to(self, url, driver):
                    print("Before navigate to %s" % url)
                def after_navigate_to(self, url, driver):
                    print("After navigate to %s" % url)

            driver = Firefox()
            ef_driver = EventFiringWebDriver(driver, MyListener())
            ef_driver.get("http://www.google.co.in/")
        z%A WebDriver instance must be suppliedz:Event listener must be a subclass of AbstractEventListenerN)r   r   r   r   _driver_wrap_value	_listener)selfr   r   r   r   r   __init__*   s   



zEventFiringWebDriver.__init__c                 C      | j S )zMReturns the WebDriver instance wrapped by this
        EventsFiringWebDriver.)r   r   r   r   r   wrapped_driverJ      z#EventFiringWebDriver.wrapped_driverurlc                 C   s   |  d|| jfd|f d S )Nnavigate_toget	_dispatchr   )r   r#   r   r   r   r%   P      zEventFiringWebDriver.getc                 C      |  d| jfdd d S )Nnavigate_backbackr   r&   r    r   r   r   r+   S      zEventFiringWebDriver.backc                 C   r)   )Nnavigate_forwardforwardr   r&   r    r   r   r   r.   V   r,   zEventFiringWebDriver.forwardc                 G   s&   |f|  | }| d|| jfd|S )Nexecute_script_unwrap_element_argsr'   r   r   scriptargsunwrapped_argsr   r   r   r/   Y      z#EventFiringWebDriver.execute_scriptc                 G   s&   |f|  | }| d|| jfd|S )Nr/   execute_async_scriptr0   r2   r   r   r   r7   ]   r6   z)EventFiringWebDriver.execute_async_scriptc                 C      |  d| jfdd d S )Ncloser   r&   r    r   r   r   r9   a   r,   zEventFiringWebDriver.closec                 C   r8   )Nquitr   r&   r    r   r   r   r:   d   r,   zEventFiringWebDriver.quitc                 C      |  d||| jfd||fS Nfindfind_elementr&   r   byvaluer   r   r   r>   g   r(   z!EventFiringWebDriver.find_elementc                 C   r;   Nr=   find_elementsr&   r?   r   r   r   rC   j   r(   z"EventFiringWebDriver.find_elementsl_calll_args.d_calld_argsc              
   C   sv   t | jd| |  z
t | j|| }W n ty* } z	| j|| j  d }~ww t | jd| |  t|| S Nbefore_after_)getattrr   r   	Exceptionon_exceptionr	   r   rD   rE   rF   rG   r   excr   r   r   r'   m   s   
zEventFiringWebDriver._dispatchc                    sP   t |tr|jS t |trt fdd|D S t |tr& fdd|D S |S )Nc                 3   s    | ]}  |V  qd S Nr1   r
   r    r   r   	<genexpr>}   s    z<EventFiringWebDriver._unwrap_element_args.<locals>.<genexpr>c                    s   g | ]}  |qS r   rQ   r
   r    r   r   r      r   z=EventFiringWebDriver._unwrap_element_args.<locals>.<listcomp>)r   r   wrapped_elementtupler   )r   r4   r   r    r   r1   y   s   


z)EventFiringWebDriver._unwrap_element_argsc                 C   s(   t |trt| j|jS t| j|S rP   )r   r   r   r   r   rS   r   rA   r   r   r   r      s   
z EventFiringWebDriver._wrap_valuec              
   C   sj   | dst| j|st| || d S zt| j|| W d S  ty4 } z	| j|| j  d }~ww N_)
startswithhasattrr   object__setattr__rL   r   rM   r   r   rA   rO   r   r   r   r[         z EventFiringWebDriver.__setattr__c              
      sZ    fdd}zt j| t r|W S  W S  ty, } z	j|j  d }~ww )Nc               
      sF   z | i |}t |W S  ty" } z	j|j  d }~ww rP   )r	   rL   r   rM   r   r4   kwargsr   rO   attribr   r   r   _wrap   s   z/EventFiringWebDriver.__getattr__.<locals>._wrap)rK   r   callablerL   r   rM   r   namerb   rO   r   r`   r   __getattr__      z EventFiringWebDriver.__getattr__r   N)__name__
__module____qualname____doc__r   r   r   propertyr!   strr%   r+   r.   r/   r7   r9   r:   r   IDr   r>   typingListrC   TupleAnyr'   r1   r   r[   rf   r   r   r   r   r   &   s6     




	
r   c                   @   s   e Zd ZdZdededdfddZedefdd	Zdd
dZ	dddZ
dddZejdfdefddZejdfdeje fddZdd Zdd Zdd ZdS )r   zBA wrapper around WebElement instance which supports firing events.
webelementr   r   Nc                 C   s    || _ || _|j| _|j| _dS )z4Creates a new instance of the EventFiringWebElement.N)_webelement
_ef_driverr!   r   r   )r   rt   r   r   r   r   r      s   zEventFiringWebElement.__init__c                 C   r   )zNReturns the WebElement wrapped by this EventFiringWebElement
        instance.)ru   r    r   r   r   rS      r"   z%EventFiringWebElement.wrapped_elementc                 C   s   |  d| j| jfdd d S )Nclickr   r'   ru   r   r    r   r   r   rw      r(   zEventFiringWebElement.clickc                 C   s   |  d| j| jfdd d S )Nchange_value_ofclearr   rx   r    r   r   r   rz      r(   zEventFiringWebElement.clearc                 G   s   |  d| j| jfd| d S )Nry   	send_keysrx   rU   r   r   r   r{      r(   zEventFiringWebElement.send_keysc                 C   r;   r<   r&   r?   r   r   r   r>      r(   z"EventFiringWebElement.find_elementc                 C   r;   rB   r&   r?   r   r   r   rC      r(   z#EventFiringWebElement.find_elementsc              
   C   sx   t | jd| |  z
t | j|| }W n ty* } z	| j|| j  d }~ww t | jd| |  t|| jS rH   )rK   r   ru   rL   rM   r   r	   rv   rN   r   r   r   r'      s   zEventFiringWebElement._dispatchc              
   C   sj   | dst| j|st| || d S zt| j|| W d S  ty4 } z	| j|| j  d }~ww rV   )	rX   rY   ru   rZ   r[   rL   r   rM   r   r\   r   r   r   r[      r]   z!EventFiringWebElement.__setattr__c              
      sZ    fdd}zt j| t r|W S  W S  ty, } z	j|j  d }~ww )Nc               
      sH   z | i |}t |jW S  ty# } z	j|j  d }~ww rP   )r	   rv   rL   r   rM   r   r^   r`   r   r   rb      s   z0EventFiringWebElement.__getattr__.<locals>._wrap)rK   ru   rc   rL   r   rM   r   rd   r   r`   r   rf      rg   z!EventFiringWebElement.__getattr__rh   )ri   rj   rk   rl   r   r   r   rm   rS   rw   rz   r{   r   ro   r>   rp   rq   rC   r'   r[   rf   r   r   r   r   r      s    




r   )rp   selenium.common.exceptionsr   selenium.webdriver.common.byr   #selenium.webdriver.remote.webdriverr   $selenium.webdriver.remote.webelementr   abstract_event_listenerr   r	   r   r   registerr   r   r   r   <module>   s   |E