o
    N,h#                     @   sz   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 ZG d	d
 d
ZG dd dZe	e dS )    )Any)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   }/var/www/www-root/data/www/bot.pdev.uz/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e	f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e fddZde	deed f d!e	d"ee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_driverN      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%   T      zEventFiringWebDriver.getc                 C      |  d| jfdd d S )Nnavigate_backbackr   r&   r    r   r   r   r+   W      zEventFiringWebDriver.backc                 C   r)   )Nnavigate_forwardforwardr   r&   r    r   r   r   r.   Z   r,   zEventFiringWebDriver.forwardscriptc                 G   s&   |f|  | }| d|| jfd|S )Nexecute_script_unwrap_element_argsr'   r   r   r/   argsunwrapped_argsr   r   r   r0   ]      z#EventFiringWebDriver.execute_scriptc                 G   s&   |f|  | }| d|| jfd|S )Nr0   execute_async_scriptr1   r3   r   r   r   r7   a   r6   z)EventFiringWebDriver.execute_async_scriptc                 C      |  d| jfdd d S )Ncloser   r&   r    r   r   r   r9   e   r,   zEventFiringWebDriver.closec                 C   r8   )Nquitr   r&   r    r   r   r   r:   h   r,   zEventFiringWebDriver.quitc                 C      |  d||| jfd||fS Nfindfind_elementr&   r   byvaluer   r   r   r>   k   r(   z!EventFiringWebDriver.find_elementc                 C   r;   Nr=   find_elementsr&   r?   r   r   r   rC   n   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'   q   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r2   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   r2   {   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.   r0   r7   r9   r:   r   IDr   r>   r   rC   rT   r   r'   r2   r   r[   rf   r   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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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   rp   r   r   r   r   r      s   zEventFiringWebElement.__init__c                 C   r   )zNReturns the WebElement wrapped by this EventFiringWebElement
        instance.)rq   r    r   r   r   rS      r"   z%EventFiringWebElement.wrapped_elementc                 C   s   |  d| j| jfdd d S )Nclickr   r'   rq   r   r    r   r   r   rs      r(   zEventFiringWebElement.clickc                 C   s   |  d| j| jfdd d S )Nchange_value_ofclearr   rt   r    r   r   r   rv      r(   zEventFiringWebElement.clearc                 G   s   |  d| j| jfd| d S )Nru   	send_keysrt   rU   r   r   r   rw      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   rq   rL   rM   r   r	   rr   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   rq   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	   rr   rL   r   rM   r   r^   r`   r   r   rb      s   z0EventFiringWebElement.__getattr__.<locals>._wrap)rK   rq   rc   rL   r   rM   r   rd   r   r`   r   rf      rg   z!EventFiringWebElement.__getattr__rh   )ri   rj   rk   rl   r   r   r   rm   rS   rs   rv   rw   r   ro   r>   r   rC   r'   r[   rf   r   r   r   r   r      s    




r   N)typingr   selenium.common.exceptionsr   selenium.webdriver.common.byr   #selenium.webdriver.remote.webdriverr   $selenium.webdriver.remote.webelementr   2selenium.webdriver.support.abstract_event_listenerr   r	   r   r   registerr   r   r   r   <module>   s   ~E