a
    7ñ»jðÓ  ã                   @   s‚  d Z ddlZddlZ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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ejfdd„Zejfdd„Zejfdd„Ze
jfdd„Zdd„ Zdd„ Zd€dd„Zdd„ Zdd „ Z d!d"„ Z!d#d$„ Z"d%d&„ Z#d'd(„ Z$d)d*„ Z%d+d,„ Z&ejfd-d.„Z'd/d0„ Z(d1d2„ Z)d3d4„ Z*d�d7d8„Z+d‚d:d;„Z,dƒd<d=„Z-d„d>d?„Z.d@dA„ Z/dBdC„ Z0dDdE„ Z1dFdG„ Z2dHdI„ Z3d…dJdK„Z4dLdM„ Z5dNdO„ Z6dPdQ„ Z7dRdS„ Z8d†dUdV„Z9d‡dXdY„Z:dˆdZd[„Z;d‰d\d]„Z<d^d_„ Z=d`da„ Z>dbdc„ Z?ddde„ Z@dfdg„ ZAdhdi„ ZBdjdk„ ZCdldm„ ZDdndo„ ZEdpdq„ ZFdrds„ ZGdtdu„ ZHdvdw„ ZIdxdy„ ZJdzd{„ ZKd|d}„ ZLd~d„ ZMdS )ŠzDThis module contains useful Javascript utility methods for BaseCase.é    N)Úsuppress)ÚNoSuchElementException)ÚWebDriverException)ÚBy)Úconfig)Úsettings)Ú	constants)Úcss_to_xpath)Úshared_utils)Úxpath_to_cssc                 O   s.   t  | ¡r| j |¡S | j|g|¢R i |¤ŽS ©N)r
   Úis_cdp_swap_neededÚcdpÚevaluateÚexecute_script)ÚdriverÚscriptÚargsÚkwargs© r   úDE:\soccer\ml_env\Lib\site-packages\seleniumbase/fixtures/js_utils.pyr      s    
r   c              	   C   sÎ   t | dƒrdS ttddƒrdS t ¡ d }||d  }tt|d ƒƒD ]‚}tjr^tjs^t	 
¡  zt| dƒ}W n  tyŒ   t d¡ Y  dS 0 |d	kr¦t d
¡  dS t ¡ d }||kr¾ qÊt d¡ qFdS )a2  The DOM (Document Object Model) has a property called "readyState".
    When the value of this becomes "complete", page resources are considered
      fully loaded (although AJAX and other loads might still be happening).
    This method will wait until document.readyState == "complete".
    This may be redundant, as methods already wait for page elements to load.
    If the timeout is exceeded, the test will still continue
      because readyState == "interactive" may be good enough.
    (Previously, tests would fail immediately if exceeding the timeout.)Ú_swap_driverNÚSKIP_JS_WAITSç     @�@é
   zreturn document.readyState;g¸…ëQ¸ž?TZcompletegü©ñÒMb`?çš™™™™™¹?F)ÚhasattrÚgetattrr   ÚtimeÚrangeÚintÚ	sb_configZ
time_limitZrecorder_moder
   Zcheck_if_time_limit_exceededr   r   Úsleep)r   ÚtimeoutÚstart_msÚstop_msÚxZready_stateÚnow_msr   r   r   Úwait_for_ready_state_complete   s,    	



r(   c                 C   s0   t | dƒr|  |¡ t | dƒr(|  |¡S d S d S )NÚset_script_timeoutÚexecute_async_script)r   r)   r*   )r   r   r#   r   r   r   r*   :   s
    



r*   c           	      K   sê   t tdd ƒrd S ttƒ� t| dƒ W d   ƒ n1 s80    Y  t | dd ƒsTtjs`t| ƒ d S |tjkrttjd }d}d}| d|¡}| dd	¡}| d
d¡}||||dœ }ttƒ� t	| ||d� W d   ƒ n1 sÜ0    Y  d S )Nr   Ú Z_is_using_ucg      @a™  %(prefix)svar $elm=document.querySelector('[data-ng-app],[ng-app],.ng-scope')||document;if(window.angular && angular.getTestability){angular.getTestability($elm).whenStable(%(handler)s)}else{var $inj;try{$inj=angular.element($elm).injector()||angular.injector(['ng'])}catch(ex){$inj=angular.injector(['ng'])};$inj.get=$inj.get||$inj;$inj.get('$browser').notifyWhenNoOutstandingRequests(%(handler)s)}%(suffix)sz8var cb=arguments[arguments.length-1];if(window.angular){ÚprefixÚhandlerzfunction(){cb(true)}Úsuffixz}else{cb(false)})r,   r-   r.   ©r#   )
r   r   r   Ú	Exceptionr   ZWAIT_FOR_ANGULARJSr(   ZMINI_TIMEOUTÚpopr*   )	r   r#   r   Z
NG_WRAPPERZdef_prer,   r-   r.   r   r   r   r   Úwait_for_angularjsC   s2    
(
ÿþ

ÿý
r2   c                 C   s¼   |t jkr| S |t jkr d|  S |t jkr2d|  S |t jkrDd|  S |t jkrR| S |t jksz|  d¡sz|  d¡sz|  d¡r„t 	| ¡S |t j
kr–d|  S |t jkr¨d|  S td| |f ƒ‚d S )	Nz#%sz.%sz[name="%s"]ú/z./ú(za:contains("%s")z9Exception: Could not convert {%s}(by=%s) to CSS_SELECTOR!)r   ÚCSS_SELECTORZIDZ
CLASS_NAMEÚNAMEZTAG_NAMEZXPATHÚ
startswithr   Zconvert_xpath_to_cssZ	LINK_TEXTZPARTIAL_LINK_TEXTr0   ©ÚselectorÚbyr   r   r   Úconvert_to_css_selectorl   s8    




ÿýüû


ÿÿr;   c                 C   s*   zt | dƒ W dS  ty$   Y dS 0 d S )NúHTMLInspector;TF©r   r0   ©r   r   r   r   Úis_html_inspector_activated‹   s
    
r?   c                 C   s*   zt | dƒ W dS  ty$   Y dS 0 d S )NújQuery('html');TFr=   r>   r   r   r   Úis_jquery_activated“   s
    
rA   c              	   C   sh   |s
d}nt |d ƒ}t|ƒD ]D}z"t| dƒ t| ƒ t| ƒ W  d S  ty`   t d¡ Y q0 qd S )Né   g      $@r@   r   )r    r   r   r(   r2   r0   r   r"   )r   r#   r&   r   r   r   Úwait_for_jquery_active›   s    
rC   c              	   C   s~   d}d}g }z|   d¡}W n ttfy0   Y n0 |D ] }|d dkr6||d v r6d}q6|rltd| j ƒ‚ntd	| j ƒ‚d S )
NFz8violates the following Content Security Policy directiveÚbrowserÚlevelZSEVEREÚmessageTz¾Unable to load jQuery on "%s" due to a violation of the website's Content Security Policy directive. To override this policy, add "--disable-csp" on the command-line when running your tests.zqUnable to load jQuery on "%s" because this website may be restricting external JavaScript resources from loading.)Úget_logÚ
ValueErrorr   r0   Úcurrent_url)r   Zhas_csp_errorZcsp_violationZbrowser_logsÚentryr   r   r   Ú%raise_unable_to_load_jquery_exception«   s,    ýÿþÿrK   c                 C   s  t tƒ� t| dƒ W d   ƒ d S 1 s*0    Y  tjj}t| |ƒ tdƒD ]¨}zt| dƒ W  d S  tyÆ } zJt	 
| ¡sˆt| dƒr–dt|ƒv r–n|dkr¨t| |ƒ t d¡ W Y d }~qNd }~0  t� yô   |dkræt| |ƒ t d¡ Y qN0 qNt| ƒ d S )Nr@   é$   r   úcannot unpack non-iterableé   r   )r   r0   r   r   ÚJQueryÚMIN_JSÚadd_js_linkr   Ú	TypeErrorr
   r   r   Ústrr   r"   rK   )r   Ú	jquery_jsr&   Úer   r   r   Úactivate_jqueryÆ   s2    

 

þý
û

rV   c                 C   s0   |   d¡|   d¡ks(|   d¡|   d¡kr,dS dS )Nú\'ú'ú\"ú"TF)Úcount©Ústringr   r   r   Úare_quotes_escapedë   s
    ÿr^   c                 C   sL   t | ƒrH|  d¡|  d¡kr(|  dd¡} |  d¡|  d¡krH|  dd¡} | S )a  re.escape() works differently in Python 3.7.0 than earlier versions:

    Python 3.6.5:
    >>> import re
    >>> re.escape('"')
    '\"'

    Python 3.7.0:
    >>> import re
    >>> re.escape('"')
    '"'

    SeleniumBase needs quotes to be properly escaped for Javascript calls.
    rX   rW   rZ   rY   )r^   r[   Úreplacer\   r   r   r   Úescape_quotes_if_neededó   s    r`   c                 C   sD   t  | ¡rdS t| dƒ}t| dƒ}d}| j|kr4d}|s<|r@dS dS )NFz�
        var frame = window.frameElement;
        if (frame) {
            return true;
        }
        else {
            return false;
        }
        zreturn window.location.href;T)r
   r   r   rI   )r   Zin_basic_frameZlocation_hrefZin_external_framer   r   r   Úis_in_frame
  s    
þ

ra   c              
   C   sŽ   zt | |ƒ W nz tyf } z@t | ¡s2t| dƒr@dt|ƒv r@nt| ƒ t | |ƒ W Y d}~n,d}~0  tyˆ   t| ƒ t | |ƒ Y n0 dS )z·When executing a script that contains a jQuery command,
    it's important that the jQuery library has been loaded first.
    This method will load jQuery if it wasn't already loaded.r   rM   N)r   rR   r
   r   r   rS   rV   r0   )r   r   rU   r   r   r   Úsafe_execute_script$  s    þý
ûrb   c                 C   sø   |   d¡dkrz|   d¡|   d¡kr0|  dd¡} nJ|   d¡| dd…   d¡krzd| dd… vrzd| dd…  dd¡ d } n |   d¡dkrô|   d¡|   d¡krª|  dd¡} nJ|   d¡| dd…   d¡krôd| dd… vrôd| dd…  dd¡ d } n | S )NrY   r   rZ   é   éÿÿÿÿrX   rW   )r[   r_   )r9   r   r   r   Úremove_extra_slashes<  s    ÿÿre   c                 C   s²   t | ƒdkrH| d dkrH| d dkrHd| dd… vrHd| dd…  d } |  d¡dkr®|  d¡dkr®|  d¡d dkr®d| v r®d| v r®d	}|  d|¡} |  dd¡} |  |d¡} | S )
NrB   r   rX   rd   rZ   rc   z='z']z*_SWAP_CHAR_*)Úlenr[   r_   )r9   Z	swap_charr   r   r   Úoptimize_selectorR  s*    
ÿÿÿþýüûrg   c           	   	   C   sÀ   d }t |ƒ}t|ƒ}t|ƒ}d| }t ¡ d }||d  }tt|d ƒƒD ]^}zt| |ƒ}|rj|W   S W n ty‚   d }Y n0 |sLt ¡ d }||kr  q¬t d¡ qLt	d||f ƒ‚d S )Nz$return document.querySelector('%s');r   r   r   z.Element {%s} was not present after %s seconds!)
r`   re   rg   r   r   r    r   r0   r"   r   )	r   r9   r#   Úelementr   r$   r%   r&   r'   r   r   r   Úwait_for_css_query_selectore  s,    


ÿri   c                 C   s   | dv S )N)úcss selectorz
class nameÚidÚnamez	link textÚxpathztag namezpartial link textr   )r:   r   r   r   Úis_valid_by€  s    rn   c                 C   s"   t |ƒst | ƒr||  } }| |fS r   )rn   r8   r   r   r   Ú swap_selector_and_by_if_reversed‡  s    
ro   c                 C   s   d| }t | d||f ƒ dS )zCall script after ms passed.zfunction() {%s}zwindow.setTimeout(%s, %s);N©r   )r   r   ÚmsÚcallr   r   r   Úcall_me_later�  s    rs   rj   é   c           
      C   s¶   t ||ƒ d|v r d}t |¡}d}z|  ||¡}W n( ty\   t d¡ |  ||¡}Y n0 d}| d¡}|r¢d|v r¢| d¡}| d|¡d }|||… }	|	}t	| |||d	� dS )
z0For driver.highlight() / driver.page.highlight()z
:contains(rm   Nrc   r+   Ústylezbox-shadow: ú;)ÚloopsÚo_bs)
ro   r	   Zconvert_css_to_xpathZfind_elementr0   r   r"   Zget_attributeÚfindÚhighlight_element_with_js)
r   r9   r:   rw   rh   rx   ru   Z	box_startZbox_endZoriginal_box_shadowr   r   r   Ú	highlight“  s$    




r{   r+   c              	   C   sR  t tƒ� t| dƒ W d   ƒ n1 s(0    Y  |dkr>d}| dd¡}d}d|v r†d|v rdd}nd|v rz| dd	¡}nd}|r†d S d
| }zt| |ƒ W n ty°   Y d S 0 t|ƒD �]^}d| }zt| |ƒ W n tyì   Y  d S 0 t d¡ d| }zt| |ƒ W n t�y&   Y  d S 0 t d¡ d| }zt| |ƒ W n t�y`   Y  d S 0 t d¡ d| }zt| |ƒ W n t�yš   Y  d S 0 t d¡ d| }zt| |ƒ W n t�yÔ   Y  d S 0 t d¡ d| }zt| |ƒ W n t�y   Y  d S 0 t d¡ qºd||f }zt| |ƒ W n t�yL   Y d S 0 d S )Nr+   ÚhtmlÚbodyú Fú	[style=\"úbox\-shadow:Tú[style\*=\"úbdocument.querySelector('%s').style.boxShadow =
        '0px 0px 6px 6px rgba(128, 128, 128, 0.5)';z`document.querySelector('%s').style.boxShadow =
            '0px 0px 6px 6px rgba(255, 0, 0, 1)';çû:pÎˆ’?zbdocument.querySelector('%s').style.boxShadow =
            '0px 0px 6px 6px rgba(128, 0, 128, 1)';z`document.querySelector('%s').style.boxShadow =
            '0px 0px 6px 6px rgba(0, 0, 255, 1)';z`document.querySelector('%s').style.boxShadow =
            '0px 0px 6px 6px rgba(0, 255, 0, 1)';zbdocument.querySelector('%s').style.boxShadow =
            '0px 0px 6px 6px rgba(128, 128, 0, 1)';z<document.querySelector('%s').style.boxShadow =
        '%s';)r   r0   r   r_   r   r   r"   ©r   r9   rw   rx   Úselector_no_spacesÚ
early_exitr   Únr   r   r   Úhighlight_with_js©  s¬    
(þÿþÿ

þÿ

þÿ

þÿ

þÿ

þÿ
þÿrˆ   c              	   C   sì  t tƒ� t| dƒ W d   ƒ n1 s(0    Y  d}zt| ||ƒ W n tyZ   Y d S 0 t|ƒD �]P}d}zt| ||ƒ W n ty”   Y  d S 0 t d¡ d}zt| ||ƒ W n tyÊ   Y  d S 0 t d¡ d}zt| ||ƒ W n t�y   Y  d S 0 t d¡ d}zt| ||ƒ W n t�y:   Y  d S 0 t d¡ d}zt| ||ƒ W n t�yr   Y  d S 0 t d¡ d}zt| ||ƒ W n t�yª   Y  d S 0 t d¡ qdd	| }zt| ||ƒ W n t�yæ   Y d S 0 d S )
Nr+   úRarguments[0].style.boxShadow =
        '0px 0px 6px 6px rgba(128, 128, 128, 0.5)';zParguments[0].style.boxShadow =
            '0px 0px 6px 6px rgba(255, 0, 0, 1)';rƒ   zRarguments[0].style.boxShadow =
            '0px 0px 6px 6px rgba(128, 0, 128, 1)';zParguments[0].style.boxShadow =
            '0px 0px 6px 6px rgba(0, 0, 255, 1)';zParguments[0].style.boxShadow =
            '0px 0px 6px 6px rgba(0, 255, 0, 1)';zRarguments[0].style.boxShadow =
            '0px 0px 6px 6px rgba(128, 128, 0, 1)';ú$arguments[0].style.boxShadow = '%s';)r   r0   r   r   r   r"   )r   rh   rw   rx   r   r‡   r   r   r   rz     sp    
(ÿÿ

ÿ

ÿ

ÿ

ÿ

ÿ
rz   c              	   C   s¶  t tƒ� t| dƒ W d   ƒ n1 s(0    Y  |dkr>d}| dd¡}d}d|v r†d|v rdd}nd|v rz| dd	¡}nd}|r†d S d
| }t tƒ� t| |ƒ W d   ƒ n1 s¶0    Y  t|ƒD �]¦}d| }t tƒ� t| |ƒ W d   ƒ n1 sþ0    Y  t d¡ d| }t tƒ� t| |ƒ W d   ƒ n1 �sD0    Y  t d¡ d| }t tƒ� t| |ƒ W d   ƒ n1 �sŠ0    Y  t d¡ d| }t tƒ� t| |ƒ W d   ƒ n1 �sÐ0    Y  t d¡ d| }t tƒ� t| |ƒ W d   ƒ n1 �s0    Y  t d¡ d| }t tƒ� t| |ƒ W d   ƒ n1 �s\0    Y  t d¡ qÈd||f }t tƒ� t| |ƒ W d   ƒ n1 �s¨0    Y  d S )Nr+   r|   r}   r~   Fr   r€   Tr�   úSjQuery('%s').css('box-shadow',
        '0px 0px 6px 6px rgba(128, 128, 128, 0.5)');zQjQuery('%s').css('box-shadow',
            '0px 0px 6px 6px rgba(255, 0, 0, 1)');rƒ   zSjQuery('%s').css('box-shadow',
            '0px 0px 6px 6px rgba(128, 0, 128, 1)');zQjQuery('%s').css('box-shadow',
            '0px 0px 6px 6px rgba(0, 0, 255, 1)');zQjQuery('%s').css('box-shadow',
            '0px 0px 6px 6px rgba(0, 255, 0, 1)');zSjQuery('%s').css('box-shadow',
            '0px 0px 6px 6px rgba(128, 128, 0, 1)');ú%jQuery('%s').css('box-shadow', '%s');)r   r0   r   r_   rb   r   r   r"   r„   r   r   r   Úhighlight_with_jqueryU  s„    
(þÿ
(þÿ
(
þÿ
*
þÿ
*
þÿ
*
þÿ
*
þÿ
*
r�   c                 C   s   d}t |ƒ}t| || ƒ d S )Nan  function injectCSS(css) {
          var head_tag=document.getElementsByTagName("head")[0];
          var link_tag=document.createElement("link");
          link_tag.rel="stylesheet";
          link_tag.type="text/css";
          link_tag.href=css;
          link_tag.crossorigin="anonymous";
          head_tag.appendChild(link_tag);
       }
       injectCSS("%s");©r`   r   )r   Zcss_linkZscript_to_add_cssr   r   r   Úadd_css_link£  s    
r�   c                 C   s   d}t |ƒ}t| || ƒ d S )Na¨  function injectJS(link) {
          var body_tag=document.getElementsByTagName("body")[0];
          var script_tag=document.createElement("script");
          script_tag.src=link;
          script_tag.type="text/javascript";
          script_tag.crossorigin="anonymous";
          script_tag.defer;
          script_tag.onload=function() { null };
          body_tag.appendChild(script_tag);
       }
       injectJS("%s");rŽ   )r   Újs_linkZscript_to_add_jsr   r   r   rQ   ²  s    rQ   c                 C   s*   d}|  dd¡}t|ƒ}t| || ƒ d S )NaG  function injectStyle(css) {
          var head_tag=document.getElementsByTagName("head")[0];
          var style_tag=document.createElement("style");
          style_tag.type="text/css";
          style_tag.appendChild(document.createTextNode(css));
          head_tag.appendChild(style_tag);
       }
       injectStyle("%s");Ú
r+   ©r_   r`   r   )r   Z	css_styleZadd_css_style_scriptr   r   r   Úadd_css_styleÂ  s    r“   c                 C   sL   |  d¡rd| }tj|dd�j}d}| dd¡}t|ƒ}t| || ƒ d S )Nz//zhttp:é   r/   á
  var body_tag=document.getElementsByTagName('body').item(0);var script_tag=document.createElement("script");script_tag.type="text/javascript";script_tag.onload=function() { null };script_tag.appendChild(document.createTextNode("%s"));body_tag.appendChild(script_tag);r‘   r~   )r7   ÚrequestsÚgetÚtextr_   r`   r   )r   r�   Újs_codeÚadd_js_code_scriptr   r   r   Úadd_js_code_from_linkÐ  s    
ÿr›   c                 C   s*   d}|  dd¡}t|ƒ}t| || ƒ d S )Nr•   r‘   r~   r’   )r   r™   rš   r   r   r   Úadd_js_codeá  s
    ÿrœ   c                 C   s2   |d u rd}|d u rd}d||f }t | |ƒ d S )NzContent-Security-Policyzadefault-src *; style-src 'self' 'unsafe-inline'; script-src: 'self' 'unsafe-inline' 'unsafe-eval'a   function injectMeta() {
           var meta_tag=document.createElement('meta');
           meta_tag.httpEquiv="%s";
           meta_tag.content="%s";
           document.getElementsByTagName('head')[0].appendChild(meta_tag);
        }
        injectMeta();rp   )r   Z
http_equivÚcontentZscript_to_add_metar   r   r   Úadd_meta_tagï  s    ÿþú
rž   c                 C   s*   zt | dƒ W dS  ty$   Y dS 0 d S )Nú	jconfirm;TFr=   r>   r   r   r   Úis_jquery_confirm_activated  s
    
r    c              	   C   s¸   t jj}t jj}t jj}t| ƒs6t| |ƒ t| dd� t| |ƒ t| |ƒ t	dƒD ]`}|dkrrt| |ƒ t| |ƒ z"t
| dƒ t| ƒ t| ƒ W  d S  ty°   t d¡ Y qR0 qRd S )Nç333333ó?r/   é   é   rŸ   r   )r   rO   rP   ZJqueryConfirmÚMIN_CSSrA   rQ   rC   r�   r   r   r(   r2   r0   r   r"   )r   rT   Zjq_confirm_cssZjq_confirm_jsr&   r   r   r   Úactivate_jquery_confirm  s&    





r¥   c              	   C   sÆ   t jj}t jj}t| ƒrd S t| ƒsJt| |ƒ t| dd� t| ƒ t	| ƒ t| |ƒ t| ƒ t	| ƒ t
dƒD ]D}z"t| dƒ t| ƒ t	| ƒ W  d S  ty®   t d¡ Y ql0 qlt| ƒ t	| ƒ d S )Nr¡   r/   é   r<   r   )r   rO   rP   ZHtmlInspectorr?   rA   rQ   rC   r(   r2   r   r   r0   r   r"   )r   rT   Zhtml_inspector_jsr&   r   r   r   Úactivate_html_inspector%  s,    


r§   c              	   C   sª  ddl m} tjj}tjj}tjj}tjj}tjj}tjj	}tjj
}tjj}	tjj}
tjj}tjj}tjj}d}t| ƒsŽt| |ƒ t| dd� t| |ƒ t| |ƒ t| |ƒ t| |	ƒ t| |
ƒ t| |ƒ t| |ƒ t| |ƒ t| |ƒ t| |ƒ ƒ tdƒD ]T}z0t| dƒ}|dk�r&t d	¡ W qünW  �qRW qü t�yN   t d
¡ Y qü0 qüz4t| |ƒ t| |ƒ t| |ƒ t| ƒ t| ƒ W d S  t�y¤   t d¡ Y n0 d S )Nr   )Úget_messenger_stylezMessenger.options = {'maxMessages': 8, extraClasses: 'messenger-fixed messenger-on-bottom messenger-on-right', theme: 'future'}gš™™™™™ñ?r/   r   z7 if (typeof Messenger === 'undefined') { return "U"; } ÚUgºI+‡–?g{®Gáz”?r   )Zseleniumbase.core.style_sheetr¨   r   rO   rP   Z	Messengerr¤   ZTHEME_FLAT_JSZTHEME_FUTURE_JSZTHEME_FLAT_CSSZTHEME_FUTURE_CSSZTHEME_BLOCK_CSSZTHEME_AIR_CSSZTHEME_ICE_CSSZSPINNER_CSSZ
UnderscorerA   rQ   rC   r�   r“   r   r   r   r"   r0   r(   r2   )r   r¨   rT   Zmessenger_cssZmessenger_jsZmsgr_theme_flat_jsZmsgr_theme_future_jsZmsgr_theme_flat_cssZmsgr_theme_future_cssZmsgr_theme_block_cssZmsgr_theme_air_cssZmsgr_theme_ice_cssZspinner_cssZunderscore_jsÚ	msg_styler&   Úresultr   r   r   Úactivate_messengerA  sb    ÿ









þ




r¬   Údefaultc                 C   sj  |dkrd}|dkr(d}t tdd ƒr(d}|dkr4d}g d¢}||vrTtd||f ƒ‚g d	¢}||vrttd
||f ƒ‚|dkr‚d}nD|dkr�d}n6|dkržd}n(|dkr¬d}n|dkrºd}n|dkrÆd}d|||f }zt d¡ t| |ƒ W nn t�yZ   t d¡ t| ƒ t d¡ ttƒ�$ t| |ƒ t d¡ W d   ƒ n1 �sL0    Y  Y n0 t d¡ d S )Nr­   ÚfutureÚbottom_rightÚmobile_emulatorÚ
top_centerÚ8)Zflatr®   ÚblockZairÚicezTheme: %s is not in %s!)Útop_leftr±   Ú	top_rightÚbottom_leftÚbottom_centerr¯   zLocation: %s is not in %s!rµ   z"messenger-on-top messenger-on-leftzmessenger-on-topr¶   z#messenger-on-top messenger-on-rightr·   z%messenger-on-bottom messenger-on-leftr¸   zmessenger-on-bottomz&messenger-on-bottom messenger-on-rightzXMessenger.options = {'maxMessages': %s, extraClasses: 'messenger-fixed %s', theme: '%s'}g¸…ëQ¸Ž?gìQ¸…ë¡?gffffffÆ?g)\�Âõ(¬?)r   r!   r0   r   r"   r   r¬   r   )r   ÚthemeÚlocationZmax_messagesZvalid_themesZvalid_locationsZmessenger_locationrª   r   r   r   Úset_messenger_theme  sV    
ÿþÿ




0r»   Úinfoc              
   C   s*  |s
t j}t|ƒ}t |¡}t|ƒ}d|||f }d}zt| |ƒ W n^ tyŽ } z2t 	| ¡sht
| dƒrvdt|ƒv rvnd}W Y d}~nd}~0  ty¢   d}Y n0 |�r&t| ƒ t| ƒ zt| |ƒ W n\ tyÚ   Y nL t�y$   t d¡ t| ƒ t d¡ t| ƒ t d¡ t| |ƒ Y n0 dS )	zA helper method to post a message on the screen with Messenger.
    (Should only be called from post_message() in base_case.py)zSMessenger().post({message: "%s", type: "%s", hideAfter: %s, hideOnNavigate: true});Fr   rM   TNgÃõ(\�ÂÅ?gHáz®GÑ?)r   ÚDEFAULT_MESSAGE_DURATIONÚfloatÚreÚescaper`   r   rR   r
   r   r   rS   r0   r¬   r»   r   r"   )r   rF   Úmsg_durru   Zmessenger_scriptÚretryrU   r   r   r   Úpost_messageº  sJ    
þÿþý
û



rÃ   c                 C   s‚   |s
t j}t|ƒ}ttƒ�T d}d}ttdd ƒr4d}t| ||d� t| ||dd� t	 
|d ¡ W d   ƒ n1 st0    Y  d S )	Nr®   r¯   r°   r¶   ©r¹   rº   Úsuccess©ru   çìQ¸…ë±?)r   r½   r¾   r   r0   r   r!   r»   rÃ   r   r"   )r   rF   rÁ   r¹   rº   r   r   r   Úpost_messenger_success_messageç  s    
rÈ   c                 C   sj   |s
t j}t|ƒ}ttƒ�< t| ddd� t| ||dd� t |d ¡ W d   ƒ n1 s\0    Y  d S )Nr³   r±   rÄ   ÚerrorrÆ   rÇ   )	r   r½   r¾   r   r0   r»   rÃ   r   r"   )r   rF   rÁ   r   r   r   Úpost_messenger_error_messageõ  s    
rÊ   c                 C   sL  t tƒ� t| dƒ W d   ƒ n1 s(0    Y  |dkr>d}| dd¡}d}d|v rÂd|v rdd}nd|v rz| dd	¡}nd}|rÂt tƒ�$ t| ƒ t| ||ƒ W d   ƒ n1 s´0    Y  d S d
| }zt| |ƒ W n tyì   Y d S 0 t d¡ d| }zt| |ƒ W n t�y$   Y d S 0 t d¡ d| }zt| |ƒ W n t�y\   Y d S 0 t d¡ d| }zt| |ƒ W n t�y”   Y d S 0 t d¡ d| }zt| |ƒ W n t�yÌ   Y d S 0 t d¡ t tƒ�$ t| ƒ t| ||ƒ W d   ƒ n1 �s0    Y  d||f }zt| |ƒ W n t�yF   Y d S 0 d S )Nr+   r|   r}   r~   Fr   r€   Tr�   r‚   rƒ   z]document.querySelector('%s').style.boxShadow =
        '0px 0px 6px 6px rgba(205, 30, 0, 1)';z^document.querySelector('%s').style.boxShadow =
        '0px 0px 6px 6px rgba(128, 0, 128, 1)';z^document.querySelector('%s').style.boxShadow =
        '0px 0px 6px 6px rgba(50, 50, 128, 1)';z^document.querySelector('%s').style.boxShadow =
        '0px 0px 6px 6px rgba(50, 205, 50, 1)';z4document.querySelector('%s').style.boxShadow = '%s';)r   r0   r   r_   rV   rÈ   r   r"   ©r   rF   r9   rx   rÁ   r…   r†   r   r   r   r   Úhighlight_with_js_2ÿ  s’    
(
*þÿ
þÿ
þÿ
þÿ
þÿ

,þrÌ   c                 C   s¬  t tƒ� t| dƒ W d   ƒ n1 s(0    Y  d}zt| ||ƒ W n tyZ   Y d S 0 t d¡ d}zt| ||ƒ W n tyŽ   Y d S 0 t d¡ d}zt| ||ƒ W n tyÂ   Y d S 0 t d¡ d}zt| ||ƒ W n t� yø   Y d S 0 t d¡ d}zt| ||ƒ W n t�y.   Y d S 0 t d¡ t tƒ�$ t| ƒ t| ||ƒ W d   ƒ n1 �sn0    Y  d| }zt| ||ƒ W n t�y¦   Y d S 0 d S )	Nr+   r‰   rƒ   zMarguments[0].style.boxShadow =
        '0px 0px 6px 6px rgba(205, 30, 0, 1)';zNarguments[0].style.boxShadow =
        '0px 0px 6px 6px rgba(128, 0, 128, 1)';zNarguments[0].style.boxShadow =
        '0px 0px 6px 6px rgba(50, 50, 128, 1)';zNarguments[0].style.boxShadow =
        '0px 0px 6px 6px rgba(50, 205, 50, 1)';rŠ   )r   r0   r   r   r"   rV   rÈ   )r   rF   rh   rx   rÁ   r   r   r   r   Úhighlight_element_with_js_2R  sZ    
(ÿ
ÿ
ÿ
ÿ
ÿ

,rÍ   c                 C   s  |dkrd}|  dd¡}d}d|v r�d|v r2d}nd|v rH|  dd	¡}nd}|r�ttƒ�$ t| ƒ t| ||ƒ W d   ƒ n1 s‚0    Y  d S d
| }zt| |ƒ W n tyº   Y d S 0 t d¡ d| }zt| |ƒ W n tyð   Y d S 0 t d¡ d| }zt| |ƒ W n t�y(   Y d S 0 t d¡ d| }zt| |ƒ W n t�y`   Y d S 0 t d¡ d| }zt| |ƒ W n t�y˜   Y d S 0 t d¡ ttƒ�$ t| ƒ t| ||ƒ W d   ƒ n1 �sØ0    Y  d||f }zt| |ƒ W n t�y   Y d S 0 d S )Nr|   r}   r~   r+   Fr   r€   Tr�   r‹   rƒ   zNjQuery('%s').css('box-shadow',
        '0px 0px 6px 6px rgba(205, 30, 0, 1)');zOjQuery('%s').css('box-shadow',
        '0px 0px 6px 6px rgba(128, 0, 128, 1)');zOjQuery('%s').css('box-shadow',
        '0px 0px 6px 6px rgba(50, 50, 200, 1)');zOjQuery('%s').css('box-shadow',
        '0px 0px 6px 6px rgba(50, 205, 50, 1)');rŒ   )	r_   r   r0   rV   rÈ   rb   r   r"   r   rË   r   r   r   Úhighlight_with_jquery_2�  sˆ    
*þÿ
þÿ
þÿ
þÿ
þÿ

,rÎ   c                 C   s,   ddl m} t | ¡r | j ¡ S t| |jƒS )Nr   )Úactive_css_js)Zseleniumbase.js_coderÏ   r
   r   r   Úget_active_element_cssr   )r   rÏ   r   r   r   rÐ   Ü  s    

rÐ   c                 C   s   d}t | |ƒS )Nz4return navigator.language || navigator.languages[0];rp   )r   r   r   r   r   Úget_locale_codeä  s    rÑ   c                 C   s
   t | dƒS )Nzreturn window.screen;rp   r>   r   r   r   Úget_screen_recté  s    rÒ   c                 C   s
   t | dƒS )Nzreturn window.location.origin;rp   r>   r   r   r   Ú
get_originí  s    rÓ   c                 C   s
   t | dƒS )Nzreturn navigator.userAgent;rp   r>   r   r   r   Úget_user_agentñ  s    rÔ   c                 C   s
   t | dƒS )Nzreturn document.cookie;rp   r>   r   r   r   Úget_cookie_stringõ  s    rÕ   c                 C   sX   z>t | dƒ}d }|jd }|tjj }|dk r2d}|| }|W S  tyR   Y dS 0 d S )Núreturn window.scrollY;Úyr   )r   rº   r   ÚScrollÚY_OFFSETr0   )r   rh   Úscroll_positionZelement_locationÚdistancer   r   r   Úget_scroll_distance_to_elementù  s    

rÜ   c                 C   s"  d }d }d}d}z|j d }W n ty2   Y dS 0 z|j d }W n tyX   d}Y n0 z|jd }W n ty~   d}Y n0 z|  ¡ d }W n ty¬   t| dƒ}Y n0 |tjj }|dk rÆd}|d }|dk rÚd}|| |krêd}d||f }zt| |ƒ W d	S  t�y   Y dS 0 d S )
Nr   r×   Fr&   Úwidthúreturn window.innerWidth;é�  úwindow.scrollTo(%s, %s);T)rº   r0   ÚsizeÚget_window_sizer   r   rØ   rÙ   )r   rh   Úelement_location_yÚelement_location_xÚelement_widthÚscreen_widthÚelement_location_x_fixÚscroll_scriptr   r   r   Úscroll_to_element  sH    

ÿ
ré   c                 O   sh  | j d dkrt| |ƒ d S t| dƒ}d }z$t | ¡rB| ¡ j}n
|jd }W n. ty|   t | ¡rp| 	¡  n|j
 Y d S 0 z$t | ¡r–| ¡ j}n
|jd }W n ty¸   d}Y n0 z$t | ¡rÒ| ¡ j}n
|jd }W n tyô   d}Y n0 z,t | ¡�r| j ¡ d }n|  ¡ d }W n t�y@   t| dƒ}Y n0 |tjj }|dk �r\d}|d	 }	|	dk �rrd}	|| |k�r„d}	t | ¡�r–|}
n|| }
|
dk�rtt|
ƒd
 ƒd }t|
ƒ| }|}tt|ƒƒD ]*}t d¡ ||7 }d| }t| |ƒ �qØt d¡ d|	|f }t | ¡�s0t| |ƒ t d¡ |
dk�sN|
dk �rZt d¡ n
t d¡ d S )NZbrowserNamezinternet explorerrÖ   r×   r&   r   rÝ   rÞ   rß   g      I@g       @gºI+‡†?zwindow.scrollTo(0, %s);g{®Gáz„?rà   i®  iÔþÿÿg#Ûù~j¼Ä?g
×£p=
§?)Zcapabilitiesré   r   r
   r   Zget_positionr×   rº   r0   Zscroll_into_viewZ location_once_scrolled_into_viewr&   rÝ   rá   r   râ   r   rØ   rÙ   r    Úabsr¾   r   r   r"   )r   rh   r   r   rÚ   rã   rä   rå   ræ   rç   rÛ   Ztotal_stepsZ
step_valueÚnew_positionr×   rè   r   r   r   Úslow_scroll_to_element2  s|    













ÿ

rì   c                  C   s   d} | S )Na{	  (function( $ ) {
        $.fn.simulateDragDrop = function(options) {
                return this.each(function() {
                        new $.simulateDragDrop(this, options);
                });
        };
        $.simulateDragDrop = function(elem, options) {
                this.options = options;
                this.simulateEvent(elem, options);
        };
        $.extend($.simulateDragDrop.prototype, {
                simulateEvent: function(elem, options) {
                        /*Simulating drag start*/
                        var type = 'dragstart';
                        var event = this.createEvent(type);
                        this.dispatchEvent(elem, type, event);

                        /*Simulating drop*/
                        type = 'drop';
                        var dropEvent = this.createEvent(type, {});
                        dropEvent.dataTransfer = event.dataTransfer;
                        this.dispatchEvent(
                            $(options.dropTarget)[0], type, dropEvent);

                        /*Simulating drag end*/
                        type = 'dragend';
                        var dragEndEvent = this.createEvent(type, {});
                        dragEndEvent.dataTransfer = event.dataTransfer;
                        this.dispatchEvent(elem, type, dragEndEvent);
                },
                createEvent: function(type) {
                        var event = document.createEvent("CustomEvent");
                        event.initCustomEvent(type, true, true, null);
                        event.dataTransfer = {
                                data: {
                                },
                                setData: function(type, val){
                                        this.data[type] = val;
                                },
                                getData: function(type){
                                        return this.data[type];
                                }
                        };
                        return event;
                },
                dispatchEvent: function(elem, type, event) {
                        if(elem.dispatchEvent) {
                                elem.dispatchEvent(event);
                        }else if( elem.fireEvent ) {
                                elem.fireEvent("on"+type, event);
                        }
                }
        });
        })(jQuery);r   ©r   r   r   r   Úget_drag_and_drop_script|  s    6rî   c                  C   s   d} | S )Nuž	  var t=arguments,e=t[0],n=t[1],i=t[2]||0,o=t[3]||0,r=t[4]||1,
        a=t[5]||'',s='alt'===a||'î€Š'===a,l='ctrl'===a||'î€‰'===a,
        c='shift'===a||'î€ˆ'===a,u=e.ownerDocument,
        f=e.getBoundingClientRect(),g=n?n.getBoundingClientRect():f,
        p=f.left+f.width/2,d=f.top+f.height/2,h=g.left+(i||g.width/2),
        m=g.top+(o||g.height/2),v=u.elementFromPoint(p,d),
        y=u.elementFromPoint(h,m);if(!v||!y){
        var E=new Error('source or target element is not interactable');
        throw E.code=15,E}var _={constructor:DataTransfer,effectAllowed:null,
        dropEffect:null,types:[],files:Object.setPrototypeOf([],null),
        _items:Object.setPrototypeOf([],{add:function(t,e){
        this[this.length]={_data:''+t,kind:'string',
        type:e,getAsFile:function(){},getAsString:function(t){t(this._data)}},
        _.types.push(e)},remove:function(t){
        Array.prototype.splice.call(this,65535&t,1),_.types.splice(65535&t,1)},
        clear:function(t,e){this.length=0,_.types.length=0}}),
        setData:function(t,e){this.clearData(t),this._items.add(e,t)},
        getData:function(t){for(var e=this._items.length;
        e--&&this._items[e].type!==t;);return e>=0?this._items[e]._data:null},
        clearData:function(t){for(var e=this._items.length;
        e--&&this._items[e].type!==t;);this._items.remove(e)},
        setDragImage:function(t){}};function w(t,e,n,i){
        for(var o=0;o<e.length;++o){var r=u.createEvent('MouseEvent');
        r.initMouseEvent(e[o],!0,!0,u.defaultView,0,0,0,p,d,l,s,c,!1,0,null),
        t.dispatchEvent(r)}i&&setTimeout(i,n)}function D(t,e,n,i){
        var o=u.createEvent('DragEvent');o.initMouseEvent(
        e,!0,!0,u.defaultView,0,0,0,p,d,l,s,c,!1,0,null),Object.setPrototypeOf(
        o,null),o.dataTransfer=_,Object.setPrototypeOf(o,DragEvent.prototype),
        t.dispatchEvent(o),i&&setTimeout(i,n)}
        'items'in DataTransfer.prototype&&(_.items=_._items),
        w(v,['pointerdown','mousedown'],1,function(){
        for(var t=v;t&&!t.draggable;)t=t.parentElement;if(t&&t.contains(v)){
        var e=y.getBoundingClientRect();D(v,'dragstart',r,function(){
        var t=y.getBoundingClientRect();p=t.left+h-e.left,d=t.top+m-e.top,D(
        y,'dragenter',1,function(){D(y,'dragover',r,
        function(){D(u.elementFromPoint(p,d),'drop',1,function(){D(v,'dragend',
        1,function(){w(u.elementFromPoint(p,d),
        ['mouseup','pointerup'])})})})})})}})r   rí   r   r   r   Úget_js_drag_and_drop_script¸  s    &rï   c                 C   s   d| ||f }d}|| }|S )Nzp
        var source = document.querySelector("%s");
        var offsetX = %f;
        var offsetY = %f;
        aÛ  
        var rect = source.getBoundingClientRect();
        var dragPt = {x: rect.left + (rect.width >> 1),
                      y: rect.top + (rect.height >> 1)};
        var dropPt = {x: dragPt.x + offsetX, y: dragPt.y + offsetY};
        var target = document.elementFromPoint(dropPt.x, dropPt.y);
        var dataTransfer = {
          dropEffect: '',
          effectAllowed: 'all',
          files: [],
          items: {},
          types: [],
          setData: function (format, data) {
            this.items[format] = data;
            this.types.push(format);
          },
          getData: function (format) {
            return this.items[format];
          },
          clearData: function (format) { }
        };
        var emit = function (event, target, pt) {
          var evt = document.createEvent('MouseEvent');
          evt.initMouseEvent(event, true, true, window, 0, 0, 0, pt.x, pt.y,
                             false, false, false, false, 0, null);
          evt.dataTransfer = dataTransfer;
          target.dispatchEvent(evt);
        };
        emit('mousedown', source, dragPt);
        emit('mousemove', source, dragPt);
        emit('mousemove', source, dropPt);
        emit('mouseup',   source, dropPt);r   )r9   r&   r×   Zscript_aZscript_br   r   r   r   Ú$get_drag_and_drop_with_offset_scripté  s    ýü	 rð   c                 C   s6   t tƒ� |  d¡ W d   ƒ n1 s(0    Y  d S )NrD   )r   r0   rG   r>   r   r   r   Úclear_out_console_logs  s    
rñ   c                 C   sl   |   dd¡  dd¡  dd¡} |   dd¡  d	d
¡} |   dd¡  dd¡  dd¡} |   dd¡  dd¡  dd¡} | S )a�  
    DEPRECATED - Use re.escape() instead, which performs the intended action.
    Use before throwing raw code such as 'div[tab="advanced"]' into jQuery.
    Selectors with quotes inside of quotes would otherwise break jQuery.
    If you just want to escape quotes, there's escape_quotes_if_needed().
    This is similar to "json.dumps(value)", but with one less layer of quotes.
    ú\z\\ú	z\tr‘   z\nrZ   rY   rX   rW   úz\vúz\aúz\fúz\bz\uúz\r)r_   )Úcoder   r   r   Ú
_jq_format  s
    rú   )N)rj   rt   )rt   r+   )rt   r+   )rt   r+   )NN)r­   r­   r­   )Nr¼   )N)N)NÚ__doc__r¿   r–   r   Ú
contextlibr   Zselenium.common.exceptionsr   r   Zselenium.webdriver.common.byr   Zseleniumbaser   r!   Zseleniumbase.configr   Zseleniumbase.fixturesr   r	   r
   r   r   ZLARGE_TIMEOUTr(   r*   r2   r5   r;   r?   rA   rC   rK   rV   r^   r`   ra   rb   re   rg   ri   rn   ro   rs   r{   rˆ   rz   r�   r�   rQ   r“   r›   rœ   rž   r    r¥   r§   r¬   r»   rÃ   rÈ   rÊ   rÌ   rÍ   rÎ   rÐ   rÑ   rÒ   rÓ   rÔ   rÕ   rÜ   ré   rì   rî   rï   rð   rñ   rú   r   r   r   r   Ú<module>   sŒ   #	)
%ÿ


b
J
N
? ÿ
;
-


S;O+J<1/