
    >fh#                         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)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/zara/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e	f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    8 &),$%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_driverN   s     ||r   urlc                 F    | j                  d|| j                  fd|f       y )Nnavigate_toget	_dispatchr   )r   r"   s     r   r%   zEventFiringWebDriver.getT   s    }sDLL&953&Ir   c                 B    | j                  d| j                  fdd       y )Nnavigate_backback r&   r    s    r   r*   zEventFiringWebDriver.backW   s    Dr   c                 B    | j                  d| j                  fdd       y )Nnavigate_forwardforwardr+   r&   r    s    r   r.   zEventFiringWebDriver.forwardZ   s    )DLL?IrJr   scriptc                 l    |f| j                  |      z   }| j                  d|| j                  fd|      S )Nexecute_script_unwrap_element_argsr'   r   r   r/   argsunwrapped_argss       r   r1   z#EventFiringWebDriver.execute_script]   s:     T%>%>t%DD~~.0FHXZhiir   c                 l    |f| j                  |      z   }| j                  d|| j                  fd|      S )Nr1   execute_async_scriptr2   r4   s       r   r8   z)EventFiringWebDriver.execute_async_scripta   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.closee   s    w"=r   c                 B    | j                  d| j                  fdd       y )Nquitr+   r&   r    s    r   r<   zEventFiringWebDriver.quith   s    v;r   c                 H    | j                  d||| j                  fd||f      S Nfindfind_elementr&   r   byvalues      r   r@   z!EventFiringWebDriver.find_elementk   )    ~~fr5$,,&?RTV[Q\]]r   c                 H    | j                  d||| j                  fd||f      S Nr?   find_elementsr&   rA   s      r   rG   z"EventFiringWebDriver.find_elementsn   )    ~~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._dispatchq   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
   )r3   ).0r   r   s     r   	<genexpr>z<EventFiringWebDriver._unwrap_element_args.<locals>.<genexpr>   s     JT2248Js   )r   r   wrapped_elementtupler   r3   )r   r5   r   s   `  r   r3   z)EventFiringWebDriver._unwrap_element_args{   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.   r1   r8   r:   r<   r   IDr   r@   r   rG   r[   r   r'   r3   r   rd   rp   r+   r   r   r   r   &   s    "(y "(:O "(TX "(H 	  
Js Jt JEKjS 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   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@   r   rG   r'   rd   rp   r+   r   r   r   r      s    L-: -:N -SW -      
OY` !ee4 ^J ^  "uuD _T*5E _7r   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   <module>r      sK   $  9 + 9 ; T{ {|A AJ 
  ) *r   