§
    °õ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Ð1ˆtŒyˆy°{ˆØ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ÝÐE¸tÐ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‘   ø€ ð	^Ý�t‘9”9ˆDˆDøÝð 	^ð 	^ð 	^Ý˜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¸¿ºÀ6Ñ9JÔ9JÐ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•   € Ý”	‘”ˆÝŒi‰kŒk˜EÑ! GÒ+Ð+ð Ý”×&Ò& t¤Ñ7Ô7Ð7Ø�tøÝ”<Ô(ð  ð  ð  Ý”
˜3‘”���ð øøøõ	 Œi‰kŒk˜EÑ! 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ˆØÐØ�KŠK˜Ñ Ô Ð ÝÑ Ô ×-Ò-¨dÑ3Ô3°MÔ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 )z¨Start 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=¼	Ð8Iˆt×&Ò& t¤|Ñ4Ô4Ð4ÈtÌyˆå”L Ñ(Ô(ˆ	ØÐÝÐfÑgÔgÐgð ØØØØÝ�”	‰NŒNØØŒNØ ØØ(Øð
ˆð Œ9Ð Ø�NŠN˜H d¤iÐ0Ñ1Ô1Ð1à œIÐ1ˆtŒyˆy°{ˆð
	.Ý”�vœ~­vÔ/AÑBÔBð 0ÀdØ—’˜d D¤IÐ.Ñ/Ô/Ð/ð0ð 0ð 0ñ 0ô 0ð 0ð 0ð 0ð 0ð 0ð 0øøøð 0ð 0ð 0ð 0å!Ð"tÐimÔirÐ"tÐ"tÑuÔuÐuøÝ%ð 	.ð 	.ð 	.ÝÐ/Ñ0Ô0Ð0Ý%Ô+¨G¸¼ÐBÑBÔBˆDŒLÝÐ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   € àŒ<ÐÝÐ>Ñ?Ô?Ð?àŒ|× Ò Ñ"Ô"Ð*Ø”×&Ò&Ñ(Ô(Ð(Ø”×!Ò!Ñ#Ô#Ð#ØˆDŒLÝÐ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   