
    UHj]                        d Z ddlmZ ddlZddlZddlZddlZddlZddlm	Z	 ddl
mZmZ  G d de      ZddZdd	Zdd
Z	 	 d	 	 	 	 	 	 	 	 	 	 	 ddZdddZdddZdddZdddZdddZdddZy)z8Shared WebKit WebDriver helpers for browser smoke tests.    )annotationsN)Any)Requesturlopenc                      e Zd Zy)WebDriverErrorN)__name__
__module____qualname__     2/home/exedev/hwanse/tools/browser_smoke_helpers.pyr   r      s    r   r   c                     t        t        j                  j                  d      xs t        j                  j                  d            S )NDISPLAYWAYLAND_DISPLAY)boolosenvirongetr   r   r   browser_display_availabler      s-    

y)NRZZ^^<M-NOOr   c                    | dk7  st        |t              sy|j                  d      xs i }|j                  d      xs i }|j                  d      dk(  S )Nz/sessionFcapabilitiesalwaysMatchbrowserNameMiniBrowser)
isinstancedictr   )pathpayloadr   always_matchs       r   mini_browser_session_requestedr!      sT    zGT!:;;~.4"L##M28bLM*m;;r   c                     t        j                   t         j                  t         j                        5 } | j                  d       t	        | j                         d         cd d d        S # 1 sw Y   y xY w)N)z	127.0.0.1r      )socketAF_INETSOCK_STREAMbindintgetsockname)socks    r   	free_portr+      sT    	v~~v'9'9	: *d		"#4##%a()* * *s   -A**A3c           	        t        ||      rt               st        d      |d n#t        j                  |      j                  d      }t        d|  | ||ddi      }	 t        ||      5 }|j                         j                  d      }d d d        rt        j                  |      S d S # 1 sw Y   "xY w# t        $ r}	t        d| d	| d
|       |	d }	~	ww xY w)NzMiniBrowser requires DISPLAY/WAYLAND_DISPLAY. Run browser smoke tests with `xvfb-run -a ...` in this headless VM; otherwise WebKitWebDriver can hang until the /session timeout.zutf-8zhttp://127.0.0.1:zContent-Typezapplication/json)datamethodheaderstimeoutz"WebDriver request timed out after zs:  )r!   r   r   jsondumpsencoder   r   readdecodeTimeoutErrorloads)
portr.   r   r   r1   r-   requestresponsebodyexcs
             r   request_jsonr?   $   s     &dG4=V=XM
 	

 ?4

7(;(B(B7(KD
D6$(!34	GhWg. 	3(==?))'2D	3  $4::d--		3 	3 hA'#fXUVW[V\]^dgghs0   !B; . B/B; /B84B; ;	CCCc                   t        j                         |z   }t        j                         |k  r|j                         t        d|j                         	 t        | ddd      }|r$|j                  di       j                  d      d	u ry t        j                  d       t        j                         |k  rt        d
      # t        $ r t        j                  d       Y w xY w)Nz)WebKitWebDriver exited early with status GETz/statusg      ?r0   g?valuereadyTz$WebKitWebDriver did not become ready)	time	monotonicpollr   
returncoder?   	Exceptionsleepr   )r:   procr1   deadlinestatuss        r   wait_for_driverrM   @   s    ~~')H
..
X
%99;" #LT__L]!^__	!$y#FF fjj"-11':dB

3 ..
X
% ?
@@  	JJsO	s   C C&%C&c                b    t        | dd| d|g d|      }|rd|vrt        d|      |d   S )NPOST	/session/z/execute/syncscriptargsr0   rB   zbad execute/sync response: r?   r   r:   
session_idrR   r1   r<   s        r   
execute_jsrW   P   sS    
J<}-2&H wh.:8,GHHGr   c                b    t        | dd| d|g d|      }|rd|vrt        d|      |d   S )NrO   rP   z/execute/asyncrQ   r0   rB   zbad execute/async response: rT   rU   s        r   execute_async_jsrY   ]   sS    
J<~.2&H wh.;H<HIIGr   c                    t        | dd| dd|d|      }|xs i j                  d      xs i }|j                  d      xs |j                  d	      }|st        d
|d|      t        |      S )NrO   rP   z/elementzcss selector)usingrB   r0   rB   z#element-6066-11e4-a52e-4f735466cecfELEMENTzcould not find element z: )r?   r   r   str)r:   rV   selectorr1   r<   rB   
element_ids          r   find_element_idr`   j   s    
J<x( 84H ^  )/RE@AYUYYyEYJ6xl"XLQRRz?r   c           	     2    t        | dd| d| di |       y )NrO   rP   z	/element/z/clickr0   )r?   )r:   rV   r_   r1   s       r   click_elementrb   y   s#    v:,i
|6RTV`ghr   c           
     <    t        | |t        | |||      |       y)Nr0   T)rb   r`   )r:   rV   r^   r1   s       r   click_selectorrd   }   s     $
OD*hX_$`jqrr   )returnr   )r   r]   r   dict[str, Any] | Nonere   r   )re   r(   )N
   )r:   r(   r.   r]   r   r]   r   rf   r1   floatre   rf   )   )r:   r(   rJ   zsubprocess.Popen[bytes]r1   rh   re   None)
r:   r(   rV   r]   rR   r]   r1   rh   re   r   )   )
r:   r(   rV   r]   r^   r]   r1   rh   re   r]   )
r:   r(   rV   r]   r_   r]   r1   rh   re   rj   )
r:   r(   rV   r]   r^   r]   r1   rh   re   r   )__doc__
__future__r   r3   r   r$   
subprocessrD   typingr   urllib.requestr   r   RuntimeErrorr   r   r!   r+   r?   rM   rW   rY   r`   rb   rd   r   r   r   <module>rr      s    > "  	     +	\ 	P<* &*.
.. . #	.
 . .8A 

ir   