
     f#                         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           dS )    N)WebDriverException)By)	WebDriver)
WebElement   )AbstractEventListenerc                     t          | t                    r| S t          | t                    rt          |           S t          | t                    rfd| D             S | S )Nc                 0    g | ]}t          |          S  )_wrap_elements).0item	ef_drivers     t/var/www/api.educacionweb.es/myenv/lib/python3.11/site-packages/selenium/webdriver/support/event_firing_webdriver.py
<listcomp>z"_wrap_elements.<locals>.<listcomp>"   s#    CCCDtY//CCC    )
isinstanceEventFiringWebElementr   list)resultr   s    `r   r   r      so    &/00 &*%% 8$VY777&$ DCCCCFCCCCMr   c            
       D   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j        ej        df         de	dej        ej        df         fdZd Zd Zd Zd ZdS )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        _        || _        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   s      r   __init__zEventFiringWebDriver.__init__*   sh    0 &),, 	N$%LMMM.*?@@ 	c$%abbb#'#3 'r   c                     | j         S )zMReturns the WebDriver instance wrapped by this
        EventsFiringWebDriver.)r   r    s    r   wrapped_driverz#EventFiringWebDriver.wrapped_driverJ   s     |r   urlc                 F    |                      d|| j        fd|f           d S )Nnavigate_toget	_dispatchr   )r    r%   s     r   r(   zEventFiringWebDriver.getP   s)    }sDL&953&IIIIIr   c                 B    |                      d| j        fdd           d S )Nnavigate_backbackr   r)   r#   s    r   r-   zEventFiringWebDriver.backS   s$    DDDDDr   c                 B    |                      d| j        fdd           d S )Nnavigate_forwardforwardr   r)   r#   s    r   r0   zEventFiringWebDriver.forwardV   s%    )DL?IrJJJJJr   c                 r    |f|                      |          z   }|                     d|| j        fd|          S )Nexecute_script_unwrap_element_argsr*   r   r    scriptargsunwrapped_argss       r   r2   z#EventFiringWebDriver.execute_scriptY   s>     T%>%>t%D%DD~~.0FHXZhiiir   c                 r    |f|                      |          z   }|                     d|| j        fd|          S )Nr2   execute_async_scriptr3   r5   s       r   r:   z)EventFiringWebDriver.execute_async_script]   s>     T%>%>t%D%DD~~.0FH^`nooor   c                 B    |                      d| j        fdd           d S )Ncloser   r)   r#   s    r   r<   zEventFiringWebDriver.closea   s$    w"=====r   c                 B    |                      d| j        fdd           d S )Nquitr   r)   r#   s    r   r>   zEventFiringWebDriver.quitd   s$    v;;;;;r   c                 F    |                      d||| j        fd||f          S Nfindfind_elementr)   r    byvalues      r   rB   z!EventFiringWebDriver.find_elementg   *    ~~fr5$,&?RTV[Q\]]]r   c                 F    |                      d||| j        fd||f          S NrA   find_elementsr)   rC   s      r   rI   z"EventFiringWebDriver.find_elementsj   *    ~~fr5$,&?SUW\R]^^^r   l_calll_args.d_calld_argsc                 (    t          | j        d|           |  	  t          | j        |          | }n3# t          $ r&}| j                            || j                    d }~ww xY w t          | j        d|           |  t          ||           S Nbefore_after_)getattrr   r   	Exceptionon_exceptionr   r    rK   rL   rM   rN   r   excs          r   r*   zEventFiringWebDriver._dispatchm   s     	4 2& 2 233V<<	2WT\622F;FF 	 	 	N''T\:::	 	3 1 1 122F;;fd+++   6 
A& !A!!A&c                      t          |t                    r|j        S t          |t                    rt           fd|D                       S t          |t                    r fd|D             S |S )Nc              3   B   K   | ]}                     |          V  d S Nr4   r   r   r    s     r   	<genexpr>z<EventFiringWebDriver._unwrap_element_args.<locals>.<genexpr>}   s1      JJT22488JJJJJJr   c                 :    g | ]}                     |          S r   r\   r]   s     r   r   z=EventFiringWebDriver._unwrap_element_args.<locals>.<listcomp>   s'    EEED--d33EEEr   )r   r   wrapped_elementtupler   )r    r7   s   ` r   r4   z)EventFiringWebDriver._unwrap_element_argsy   s    d122 	(''dE"" 	KJJJJTJJJJJJdD!! 	FEEEEEEEEr   c                     t          |t                    rt          j        | j        |j                  S t          j        | j        |          S r[   )r   r   r   r   r   r`   r    rE   s     r   r   z EventFiringWebDriver._wrap_value   sC    e233 	N(u7LMMM$T\5999r   c                 @   |                     d          st          | j        |          st                              | ||           d S 	 t                              | j        ||           d S # t
          $ r&}| j                            || j                    d }~ww xY wN_)
startswithhasattrr   object__setattr__rT   r   rU   r    r   rE   rW   s       r   rj   z EventFiringWebDriver.__setattr__   s    ??3 	wt|T'B'B 	tT511111""4<u=====   ++C>>>   
!A- -
B7!BBc                       fd}	 t           j        |          t                    r|nS # t          $ r&} j                            | j                    d }~ww xY w)Nc                      	  | i |}t          |          S # t          $ r&}j                            |j                    d }~ww xY wr[   )r   rT   r   rU   r   r7   kwargsr   rW   attribr    s       r   _wrapz/EventFiringWebDriver.__getattr__.<locals>._wrap   sh    000%fd333   ++C>>>s    
A!AA)rS   r   callablerT   r   rU   r    namerr   rW   rq   s   `   @r   __getattr__z EventFiringWebDriver.__getattr__   s    	 	 	 	 	 		T\400F$V,,855&8 	 	 	N''T\:::	   '2 
A"!AA"r   N)__name__
__module____qualname____doc__r   r   r!   propertyr$   strr(   r-   r0   r2   r:   r<   r>   r   IDr   rB   typingListrI   TupleAnyr*   r4   r   rj   rv   r   r   r   r   r   &   s	        (y (:O (TX ( ( ( (@ 	    X
Js Jt J J J JE E E EK K K Kj j jp p p> > > >< < < < !e4 ^ ^J ^ ^ ^ ^  "uD _ _V[5L _ _ _ _
,
,#)<
C#@
,JM
,W]WcdjdnpsdsWt
, 
, 
, 
,  : : :
      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dS )r   zBA wrapper around WebElement instance which supports firing events.
webelementr   r   Nc                 R    || _         || _        |j        | _        |j        | _        dS )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                 N    |                      d| j        | j        fdd           d S )Nclickr   r*   r   r   r#   s    r   r   zEventFiringWebElement.click   s*    w!14< @'2NNNNNr   c                 N    |                      d| j        | j        fdd           d S )Nchange_value_ofclearr   r   r#   s    r   r   zEventFiringWebElement.clear   s,    (4+;T\*JGUWXXXXXr   c                 N    |                      d| j        | j        fd|           d S )Nr   	send_keysr   rc   s     r   r   zEventFiringWebElement.send_keys   s,    (4+;T\*JKY^_____r   c                 F    |                      d||| j        fd||f          S r@   r)   rC   s      r   rB   z"EventFiringWebElement.find_element   rF   r   c                 F    |                      d||| j        fd||f          S rH   r)   rC   s      r   rI   z#EventFiringWebElement.find_elements   rJ   r   c                 2    t          | j        d|           |  	  t          | j        |          | }n3# t          $ r&}| j                            || j                    d }~ww xY w t          | j        d|           |  t          || j                  S rP   )rS   r   r   rT   rU   r   r   r   rV   s          r   r*   zEventFiringWebElement._dispatch   s    3 2& 2 233V<<	6WT-v66?FF 	 	 	N''T\:::	 	3 1 1 122F;;fdo666rX   c                 @   |                     d          st          | j        |          st                              | ||           d S 	 t                              | j        ||           d S # t
          $ r&}| j                            || j                    d }~ww xY wre   )	rg   rh   r   ri   rj   rT   r   rU   r   rk   s       r   rj   z!EventFiringWebElement.__setattr__   s    ??3 	wt/?'F'F 	tT511111""4#3T5AAAAA   ++C>>>rl   c                       fd}	 t           j        |          t                    r|nS # t          $ r&} j                            | j                    d }~ww xY w)Nc                      	  | i |}t          |j                  S # t          $ r&}j                            |j                    d }~ww xY wr[   )r   r   rT   r   rU   r   ro   s       r   rr   z0EventFiringWebElement.__getattr__.<locals>._wrap   sj    000%fdo>>>   ++C>>>s     
A!AA)rS   r   rs   rT   r   rU   r   rt   s   `   @r   rv   z!EventFiringWebElement.__getattr__   s    	 	 	 	 	 		T-t44F$V,,855&8 	 	 	N''T\:::	rw   rx   )ry   rz   r{   r|   r   r   r!   r}   r`   r   r   r   r   r   rB   r   r   rI   r*   rj   rv   r   r   r   r   r      sF       LL-: -:N -SW - - - -         X 
O O O OY Y Y Y` ` ` ` !e4 ^ ^J ^ ^ ^ ^  "uD _ _V[5L _ _ _ _7 7 7      r   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      s   "  9 9 9 9 9 9 + + + + + + 9 9 9 9 9 9 ; ; ; ; ; ; : : : : : :  y y y y y y y yxA A A A A A A AJ 
 ) * * * * *r   