
    i                     l    d dl Z d dlZd dl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	  G d d          Z
dS )    N)SeleniumManagerc                   h    e Zd ZdZddZed             Zed             Zej        d             Zed	             Z	e	j         fd
            Z	ed             Z
e
j         fd            Z
ed             Zej        d             Zed             Zej        d             ZddZddZd Zd Z xZS )Servera  Manage a Selenium Grid (Remote) Server in standalone mode.

    This class contains functionality for downloading the server and starting/stopping it.

    For more information on Selenium Grid, see:
        - https://www.selenium.dev/documentation/grid/getting_started/

    Parameters:
    -----------
    host : str
        Hostname or IP address to bind to (determined automatically if not specified)
    port : int or str
        Port to listen on (4444 if not specified)
    path : str
        Path/filename of existing server .jar file (Selenium Manager is used if not specified)
    version : str
        Version of server to download (latest version if not specified)
    log_level : str
        Logging level to control logging output ("INFO" if not specified)
        Available levels: "SEVERE", "WARNING", "INFO", "CONFIG", "FINE", "FINER", "FINEST"
    env: collections.abc.Mapping
        Mapping that defines the environment variables for the server process
    N\  INFOc                     |r|rt          d          || _        || _        || _        || _        || _        || _        d | _        d S )NzCNot allowed to specify a version when using an existing server path)	TypeErrorhostportpathversion	log_levelenvprocess)selfr
   r   r   r   r   r   s          l/var/www/html/nodeJS/PythonScripts/venv3.11/lib/python3.11/site-packages/selenium/webdriver/remote/server.py__init__zServer.__init__7   sW     	cG 	cabbb			"    c                 >    | j         | j         nd}d| d| j         dS )N	localhostzhttp://:z/status)r
   r   )r   r
   s     r   
status_urlzServer.status_urlC   s/     I1tyy{222	2222r   c                     | j         S N)_pathr   s    r   r   zServer.pathH   
    zr   c                 z    |r1t           j                            |          st          d|           || _        d S )Nz"Can't find server .jar located at )osr   existsOSErrorr   )r   r   s     r   r   zServer.pathL   sC     	Gt,, 	GEtEEFFF


r   c                     | j         S r   )_portr   s    r   r   zServer.portR   r   r   c                     	 t          |          }n(# t          $ r t          j         d| d          w xY wd|cxk    rdk    sn t          d          || _        d S )Nz".__init__() got an invalid port: ''r   i  zport must be 0-65535)int
ValueErrorr	   __name__r#   )r   r   	__class__s     r   r   zServer.portV   s    	^t99DD 	^ 	^ 	^y1\\UY\\\]]]	^T""""U""""3444


s    %8c                     | j         S r   )_versionr   s    r   r   zServer.version`   s
    }r   c                     |r<t          j        dt          |                    st          j         d| d          || _        d S )Nz^\d+\.\d+\.\d+$z%.__init__() got an invalid version: 'r%   )rematchstrr	   r(   r+   )r   r   r)   s     r   r   zServer.versiond   sV     	h8.G== h9#5 f f\c f f fgggr   c                     | j         S r   )
_log_levelr   s    r   r   zServer.log_levelk   s
    r   c                 j    d}||vr%t          dd                    |                     || _        d S )N)SEVEREWARNINGr   CONFIGFINEFINERFINESTzlog_level must be one of: z, )r	   joinr1   )r   r   levelss      r   r   zServer.log_levelo   s@    SF""L69J9JLLMMM#r   c                     | j         S r   )_envr   s    r   r   z
Server.envv   s
    yr   c                 t    |.t          |t          j        j                  st	          d          || _        d S )Nz.env must be a mapping of environment variables)
isinstancecollectionsabcMappingr	   r<   )r   r   s     r   r   z
Server.envz   s4    ?:c;?3J#K#K?LMMM			r   
   c                 >   t          j                     }t          j                     |z
  |k     ro	 t          j                            | j                   dS # t          j        j        $ r t          j        d           Y nw xY wt          j                     |z
  |k     odS )NTg?F)timeurllibrequesturlopenr   errorURLErrorsleep)r   timeoutstarts      r   _wait_for_serverzServer._wait_for_server   s    	ikkE!G++ &&t777t<(      
3 	 ikkE!G++ us   $A (B ?B c                     dg}||                     |           t                                          |          d         S )zqDownload the server if it doesn't already exist.

        Latest version is downloaded unless specified.
        z--gridNdriver_path)appendr   binary_paths)r   r   argss      r   download_if_neededzServer.download_if_needed   sB    
 zKK     --d33MBBr   c                 n   | j         |                     | j                  n| j         }t          j        d          }|t          d          |d|ddt          | j                  d| j        dd	d
d	g}| j	        |
                    d| j	        g           | j	        | j	        nd}	 t          j        t          j        t          j                  5 }|                    || j        f           ddd           n# 1 swxY w Y   t          d| j                   # t           $ r t#          d           t%          j        || j                  | _        t#          d| j        j                    |                                 st1          d| j                   t#          d           Y nw xY w| j        S )zStart the server.

        Selenium Manager will detect the server location and download it if necessary,
        unless an existing server path was specified.
        NjavazJCan't find java on system PATH. JRE is required to run the Selenium serverz-jar
standalonez--portz--log-levelz--selenium-managertruez--enable-managed-downloadsz--hostr   zDSelenium server is already running, or something else is using port zStarting Selenium server...)r   z$Selenium server running as process: z)Timed out waiting for Selenium server at zSelenium server is ready)r   rS   r   shutilwhichr!   r/   r   r   r
   extendsocketAF_INETSOCK_STREAMconnectConnectionErrorConnectionRefusedErrorprint
subprocessPopenr   r   pidrM   TimeoutErrorr   )r   r   	java_pathcommandr
   socks         r   rL   zServer.start   s    9=	8It&&t|444tyL((	fggg 	NNN (
 9 NNHdi0111 I1tyy{
	.v~v/ABB 0ddDI.///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0!"timir"t"tuuu% 	. 	. 	./000%+GBBBDLK9IKKLLL((** b"#`t#`#`aaa,-----	. |s7   ')D C9-D 9C==D  C=D BF-,F-c                     | j         t          d          | j                                         2| j                                          | j                                          d| _         t          d           dS )zStop the server.NzSelenium server isn't runningz#Selenium server has been terminated)r   RuntimeErrorpoll	terminatewaitra   r   s    r   stopzServer.stop   sq    <>???|  ""*&&(((!!###DL788888r   )Nr   NNr   N)rB   r   )r(   
__module____qualname____doc__r   propertyr   r   setterr   r   r   r   rM   rS   rL   rn   __classcell__)r)   s   @r   r   r      s        0
 
 
 
 3 3 X3   X 
[  [
   X 
[    [   X ^        ^    X $ $ $   X 	Z  Z
   C C C C* * *X	9 	9 	9 	9 	9 	9 	9r   r   )r?   r   r-   rX   r[   rb   rD   rE   *selenium.webdriver.common.selenium_managerr   r    r   r   <module>rw      s   $     				 				         F F F F F Fk9 k9 k9 k9 k9 k9 k9 k9 k9 k9r   