
    g#                         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 d
 Z G d d      Z G d d      Z ej"                  e       y)    )Any)List)Tuple)WebDriverException)By)	WebDriver)
WebElement   )AbstractEventListenerc                     t        | t              r| S t        | t              rt        | |      S t        | t              r| D cg c]  }t	        ||       c}S | S c c}w N)
isinstanceEventFiringWebElementr	   list_wrap_elements)result	ef_driveritems      e/var/www/kongo/venv/lib/python3.12/site-packages/selenium/webdriver/support/event_firing_webdriver.pyr   r      sV    &/0&*%$VY77&$<BCDtY/CCM Ds   Ac            
          e Zd ZdZdededdfdZedefd       Zde	ddfd	Z
dd
ZddZd Zd ZddZddZej$                  dfdefdZej$                  dfdee   fdZde	deedf   de	deedf   fdZd Zd Zd Zd Zy)EventFiringWebDriverzRA wrapper around an arbitrary WebDriver instance which supports firing
    events.driverevent_listenerreturnNc                     t        |t              st        d      t        |t              st        d      || _        | j
                  | j                  _        || _        y)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   s      r   __init__zEventFiringWebDriver.__init__-   sQ    0 &),$%LMM.*?@$%abb#'#3#3 '    c                     | j                   S )zMReturns the WebDriver instance wrapped by this
        EventsFiringWebDriver.)r   r   s    r   wrapped_driverz#EventFiringWebDriver.wrapped_driverM   s     ||r!   urlc                 F    | j                  d|| j                  fd|f       y )Nnavigate_toget	_dispatchr   )r   r%   s     r   r(   zEventFiringWebDriver.getS   s    }sDLL&953&Ir!   c                 B    | j                  d| j                  fdd       y )Nnavigate_backback r)   r#   s    r   r-   zEventFiringWebDriver.backV   s    Dr!   c                 B    | j                  d| j                  fdd       y )Nnavigate_forwardforwardr.   r)   r#   s    r   r1   zEventFiringWebDriver.forwardY   s    )DLL?IrJr!   c                 l    |f| j                  |      z   }| j                  d|| j                  fd|      S )Nexecute_script_unwrap_element_argsr*   r   r   scriptargsunwrapped_argss       r   r3   z#EventFiringWebDriver.execute_script\   s:     T%>%>t%DD~~.0FHXZhiir!   c                 l    |f| j                  |      z   }| j                  d|| j                  fd|      S )Nr3   execute_async_scriptr4   r6   s       r   r;   z)EventFiringWebDriver.execute_async_script`   s:     T%>%>t%DD~~.0FH^`noor!   c                 B    | j                  d| j                  fdd       y )Ncloser.   r)   r#   s    r   r=   zEventFiringWebDriver.closed   s    w"=r!   c                 B    | j                  d| j                  fdd       y )Nquitr.   r)   r#   s    r   r?   zEventFiringWebDriver.quitg   s    v;r!   c                 H    | j                  d||| j                  fd||f      S Nfindfind_elementr)   r   byvalues      r   rC   z!EventFiringWebDriver.find_elementj   )    ~~fr5$,,&?RTV[Q\]]r!   c                 H    | j                  d||| j                  fd||f      S NrB   find_elementsr)   rD   s      r   rJ   z"EventFiringWebDriver.find_elementsm   )    ~~fr5$,,&?SUW\R]^^r!   l_calll_args.d_calld_argsc                 .    t        | j                  d|       |  	  t        | j                  |      | } t        | j                  d|       |  t        ||       S # t        $ r,}| j                  j	                  || j                          d }~ww xY wNbefore_after_)getattrr   r   	Exceptionon_exceptionr   r   rL   rM   rN   rO   r   excs          r   r*   zEventFiringWebDriver._dispatchp   s    3'& 23V<	2WT\\62F;F 	3& 12F;fd++	  	NN''T\\:	s   A 	B('BBc                      t        |t              r|j                  S t        |t              rt         fd|D              S t        |t              r|D cg c]  } j                  |       c}S |S c c}w )Nc              3   @   K   | ]  }j                  |        y wr   )r5   ).0r   r   s     r   	<genexpr>z<EventFiringWebDriver._unwrap_element_args.<locals>.<genexpr>~   s     JT2248Js   )r   r   wrapped_elementtupler   r5   )r   r8   r   s   `  r   r5   z)EventFiringWebDriver._unwrap_element_argsz   sf    d12'''dE"JTJJJdD!@DED--d3EE Fs   A3c                     t        |t              r*t        j                  | j                  |j
                        S t        j                  | j                  |      S r   )r   r   r   r   r   r]   r   rF   s     r   r   z EventFiringWebDriver._wrap_value   sA    e23((u7L7LMM$$T\\599r!   c                 6   |j                  d      st        | j                  |      st        j	                  | ||       y 	 t        j	                  | j                  ||       y # t
        $ r,}| j                  j                  || j                          d }~ww xY wN_)
startswithhasattrr   object__setattr__rU   r   rV   r   r   rF   rX   s       r   rg   z EventFiringWebDriver.__setattr__   ss    ??3wt||T'BtT51""4<<u= ++C>   !A# #	B,'BBc                       fd}	 t         j                  |      t              r|S S # t        $ r,} j                  j                  | j                          d }~ww xY w)Nc                      	  | i |}t        |      S # t        $ r,}j                  j                  |j                          d }~ww xY wr   )r   rU   r   rV   r   r8   kwargsr   rX   attribr   s       r   _wrapz/EventFiringWebDriver.__getattr__.<locals>._wrap   sO    00%fd33 ++C>s    	A'AA)rT   r   callablerU   r   rV   r   namero   rX   rn   s   `   @r   __getattr__z EventFiringWebDriver.__getattr__   sZ    		T\\40F$V,58&8 	NN''T\\:	   "/ / 	A$'AA$r   N)__name__
__module____qualname____doc__r   r   r    propertyr$   strr(   r-   r1   r3   r;   r=   r?   r   IDr	   rC   r   rJ   r   r   r*   r5   r   rg   rs   r.   r!   r   r   r   )   s    (y (:O (TX (@ 	  
Js Jt JEKjp>< !ee4 ^J ^  "uuD _T*5E _, ,U38_ ,c ,SXY\^aYaSb ,:
r!   r   c                       e Zd ZdZdededdfdZedefd       ZddZ	dd	Z
dd
Zej                  dfdefdZej                  dfdee   fdZd Zd Zd Zy)r   zBA wrapper around WebElement instance which supports firing events.
webelementr   r   Nc                 d    || _         || _        |j                  | _        |j                  | _        y)z4Creates a new instance of the EventFiringWebElement.N)_webelement
_ef_driverr$   r   r   )r   r~   r   s      r   r    zEventFiringWebElement.__init__   s+    %# //",,r!   c                     | j                   S )zNReturns the WebElement wrapped by this EventFiringWebElement
        instance.)r   r#   s    r   r]   z%EventFiringWebElement.wrapped_element   s     r!   c                 X    | j                  d| j                  | j                  fdd       y )Nclickr.   r*   r   r   r#   s    r   r   zEventFiringWebElement.click   s#    w!1!14<< @'2Nr!   c                 X    | j                  d| j                  | j                  fdd       y )Nchange_value_ofclearr.   r   r#   s    r   r   zEventFiringWebElement.clear   s%    (4+;+;T\\*JGUWXr!   c                 X    | j                  d| j                  | j                  fd|       y )Nr   	send_keysr   r`   s     r   r   zEventFiringWebElement.send_keys   s%    (4+;+;T\\*JKY^_r!   c                 H    | j                  d||| j                  fd||f      S rA   r)   rD   s      r   rC   z"EventFiringWebElement.find_element   rG   r!   c                 H    | j                  d||| j                  fd||f      S rI   r)   rD   s      r   rJ   z#EventFiringWebElement.find_elements   rK   r!   c                 B    t        | j                  d|       |  	  t        | j                  |      | } t        | j                  d|       |  t        || j                        S # t        $ r,}| j                  j	                  || j
                          d }~ww xY wrQ   )rT   r   r   rU   rV   r   r   r   rW   s          r   r*   zEventFiringWebElement._dispatch   s    3'& 23V<	6WT--v6?F 	3& 12F;fdoo66	  	NN''T\\:	s   A) )	B2'BBc                 6   |j                  d      st        | j                  |      st        j	                  | ||       y 	 t        j	                  | j                  ||       y # t
        $ r,}| j                  j                  || j                          d }~ww xY wrb   )	rd   re   r   rf   rg   rU   r   rV   r   rh   s       r   rg   z!EventFiringWebElement.__setattr__   sw    ??3wt/?/?'FtT51""4#3#3T5A ++C>ri   c                       fd}	 t         j                  |      t              r|S S # t        $ r,} j                  j                  | j                          d }~ww xY w)Nc                      	  | i |}t        |j                        S # t        $ r,}j                  j	                  |j
                          d }~ww xY wr   )r   r   rU   r   rV   r   rl   s       r   ro   z0EventFiringWebElement.__getattr__.<locals>._wrap   sS    00%fdoo>> ++C>s   ! 	A'AA)rT   r   rp   rU   r   rV   r   rq   s   `   @r   rs   z!EventFiringWebElement.__getattr__   s\    		T--t4F$V,58&8 	NN''T\\:	rt   ru   )rv   rw   rx   ry   r	   r   r    rz   r]   r   r   r   r   r|   rC   r   rJ   r*   rg   rs   r.   r!   r   r   r      s    L-: -:N -SW -      
OY` !ee4 ^J ^  "uuD _T*5E _7r!   r   N)typingr   r   r   selenium.common.exceptionsr   selenium.webdriver.common.byr   #selenium.webdriver.remote.webdriverr   $selenium.webdriver.remote.webelementr	   abstract_event_listenerr   r   r   r   registerr.   r!   r   <module>r      sQ   $    9 + 9 ; :w wtA AJ 
  ) *r!   