
    g#                         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 Z G d	 d
      Z G d d      Z ej                  e       y)    N)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      d/var/www/html/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            
       p   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j,                  e   fdZde	dej0                  ej2                  df   de	dej0                  ej2                  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_driverJ   s     ||r   urlc                 F    | j                  d|| j                  fd|f       y )Nnavigate_toget	_dispatchr   )r   r"   s     r   r%   zEventFiringWebDriver.getP   s    }sDLL&953&Ir   c                 B    | j                  d| j                  fdd       y )Nnavigate_backback r&   r    s    r   r*   zEventFiringWebDriver.backS   s    Dr   c                 B    | j                  d| j                  fdd       y )Nnavigate_forwardforwardr+   r&   r    s    r   r.   zEventFiringWebDriver.forwardV   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   r0   z#EventFiringWebDriver.execute_scriptY   s:     T%>%>t%DD~~.0FHXZhiir   c                 l    |f| j                  |      z   }| j                  d|| j                  fd|      S )Nr0   execute_async_scriptr1   r3   s       r   r8   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.closea   s    w"=r   c                 B    | j                  d| j                  fdd       y )Nquitr+   r&   r    s    r   r<   zEventFiringWebDriver.quitd   s    v;r   c                 H    | j                  d||| j                  fd||f      S Nfindfind_elementr&   r   byvalues      r   r@   z!EventFiringWebDriver.find_elementg   )    ~~fr5$,,&?RTV[Q\]]r   c                 H    | j                  d||| j                  fd||f      S Nr?   find_elementsr&   rA   s      r   rG   z"EventFiringWebDriver.find_elementsj   )    ~~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   rI   rJ   rK   rL   r   excs          r   r'   zEventFiringWebDriver._dispatchm   s     	4'& 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
   )r2   ).0r   r   s     r   	<genexpr>z<EventFiringWebDriver._unwrap_element_args.<locals>.<genexpr>}   s     JT2248Js   )r   r   wrapped_elementtupler   r2   )r   r5   r   s   `  r   r2   z)EventFiringWebDriver._unwrap_element_argsy   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   rZ   r   rC   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__rR   r   rS   r   r   rC   rU   s       r   rd   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   rR   r   rS   r   r5   kwargsr   rU   attribr   s       r   _wrapz/EventFiringWebDriver.__getattr__.<locals>._wrap   sO    00%fd33 ++C>s    	A'AA)rQ   r   callablerR   r   rS   r   namerl   rU   rk   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*   r.   r0   r8   r:   r<   r   IDr   r@   typingListrG   TupleAnyr'   r2   r   rd   rp   r+   r   r   r   r   &   s   (y (:O (TX (@ 	  
Js Jt JEKjp>< !ee4 ^J ^  "uuD _V[[5L _
,
,#)<<

C#@
,JM
,W]WcWcdjdndnpsdsWt
,:
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j                   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   rZ   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 r>   r&   rA   s      r   r@   z"EventFiringWebElement.find_element   rD   r   c                 H    | j                  d||| j                  fd||f      S rF   r&   rA   s      r   rG   z#EventFiringWebElement.find_elements   rH   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rN   )rQ   r   r   rR   rS   r   r   r   rT   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r_   )	ra   rb   r   rc   rd   rR   r   rS   r   re   s       r   rd   z!EventFiringWebElement.__setattr__   sw    ??3wt/?/?'FtT51""4#3#3T5A ++C>rf   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   rR   r   rS   r   ri   s       r   rl   z0EventFiringWebElement.__getattr__.<locals>._wrap   sS    00%fdoo>> ++C>s   ! 	A'AA)rQ   r   rm   rR   r   rS   r   rn   s   `   @r   rp   z!EventFiringWebElement.__getattr__   s\    		T--t4F$V,58&8 	NN''T\\:	rq   rr   )rs   rt   ru   rv   r   r   r   rw   rZ   r   r   r   r   ry   r@   rz   r{   rG   r'   rd   rp   r+   r   r   r   r      s    L-: -:N -SW -      
OY` !ee4 ^J ^  "uuD _V[[5L _7r   r   )rz   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      sK   "  9 + 9 ; :y yxA AJ 
  ) *r   