a
    7ñ»j3  ã                   @   s€   d 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
 dd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Zedkr|edƒ dS )aó  
Launches SeleniumBase Commander | GUI for pytest.

Usage:
      seleniumbase commander [OPTIONAL PATH or TEST FILE]
             sbase commander [OPTIONAL PATH or TEST FILE]
            seleniumbase gui [OPTIONAL PATH or TEST FILE]
                   sbase gui [OPTIONAL PATH or TEST FILE]

Examples:
      sbase gui
      sbase gui -k agent
      sbase gui -m marker2
      sbase gui test_suite.py
      sbase gui offline_examples/

Output:
      Launches SeleniumBase Commander | GUI for pytest.
é    N)Úshared_utils)ÚScrolledTextc                 C   sš   d}d}d}d}d}d}d}| rˆ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 }t j	j
}|||||||fS )NÚ )ÚcoloramaZForeZBLUEZBackZLIGHTCYAN_EXZLIGHTGREEN_EXZREDZLIGHTYELLOW_EXZBLACKÚStyleZ	RESET_ALL)Ú
use_colorsÚc0Úc1Úc2Úc3Úc4Úc5Úcr© r   úOE:\soccer\ml_env\Lib\site-packages\seleniumbase/console_scripts/sb_commander.pyÚ
set_colors   s     r   c                 C   s(   |   ¡  |  dd¡ |  | jdd¡ d S )Nz-topmostTF)ZliftÚ
attributesZ
after_idle)Úrootr   r   r   Úsend_window_to_front0   s    r   c                 C   sê  g }|D ]<}|  d¡r:| d¡d  d¡d }| |¡ q| |¡ q|}t|ƒ}d}|D ]}||  ¡ rZ|d7 }qZdtj }|dksŽ||kr¤|r¢|d7 }||7 }n^t|ƒD ]T\}}||  ¡ r¬|d7 }d|vrÚ||7 }q¬d|vrð|d| 7 }q¬|| dd	¡7 }q¬d
|v �r|d7 }n&d|v �r*|d7 }nd|v �r<|d7 }d|v �rP|d7 }n:d|v �rd|d7 }n&d|v �rx|d7 }nd|v �rŠ|d7 }d|v �rž|d7 }nvd|v �r²|d7 }nbd|v �rÆ|d7 }nNd|v �rÚ|d7 }n:d |v �rî|d!7 }n&d"|v �r|d#7 }nd$|v �r|d%7 }|�r"|d&7 }|	�r0|d'7 }|
�r>|d(7 }|�rL|d)7 }|�r\|d*7 }nt	 
¡ �rn|d+7 }|�r||d,7 }d-}d.|v�rŽd/}| ¡ }|�r¬|d7 }||7 }|�rº|d07 }|�rÈ|d17 }t|ƒ tj|d/d2� t| ƒ d S )3Nz(FILE)  é   z  =>  r   z"%s" -m pytestú ú"z"%s"z\ z(--edge)z --edgez(--firefox)z
 --firefoxz
(--safari)z	 --safariz(--rs)z --rsz(--rs --crumbs)z --rs --crumbsz(--rcs)z --rcsz(--rcs --crumbs)z --rcs --crumbsz(-n=2)z -n=2z(-n=3)z -n=3z(-n=4)z -n=4z(-n=5)z -n=5z(-n=6)z -n=6z(-n=7)z -n=7z(-n=8)z -n=8z --demoz	 --mobilez --dashboardz --html=report.htmlz --headlessz --guiz --screenshotFz	--captureTz -vz --capture=tee-sys)Úshell)Ú
startswithÚsplitÚappendÚlenÚgetÚsysÚ
executableÚ	enumerateÚreplacer   Úis_linuxÚstripÚprintÚ
subprocessÚPopenr   )r   ÚtestsZselected_testsÚcommand_stringZbrowser_stringZ	rs_stringZthread_stringÚverboseZ	demo_modeZmobile_modeZ	dashboardZhtml_reportZheadlessZsave_screenshotsÚadditional_optionsZcleaned_testsÚtestZ
clean_testZtotal_testsZtotal_selected_testsZselected_testZfull_run_commandZtest_numberZcapture_neededr   r   r   Údo_pytest_run6   s¢    
































r,   c                    s´  t  ¡ ‰
ˆ
 d¡ t ¡ r(ˆ
 dd¡ nˆ
 dd¡ t jˆ
dd� ¡  g d¢}t ¡ r`| 	d¡ t  
ˆ
¡‰ˆ |d	 ¡ t jˆ
ˆg|¢R Ž }| ¡  g d
¢}t  
ˆ
¡‰ˆ |d	 ¡ t jˆ
ˆg|¢R Ž }| ¡  g d¢}z>tt ¡ ƒdk�r| 	d¡ | 	d¡ | 	d¡ | 	d¡ W n t�y*   Y n0 t  
ˆ
¡‰	ˆ	 |d	 ¡ t jˆ
ˆ	g|¢R Ž }| ¡  t  ¡ ‰t jˆ
dˆd	d�}| ¡  | ¡  t  ¡ ‰t jˆ
dˆd	d�}| ¡  t  ¡ ‰t jˆ
dˆd	d�}| ¡  t  ¡ ‰t jˆ
dˆd	d�}| ¡  | ¡  t  ¡ ‰t jˆ
dˆd	d�}| ¡  | ¡  t  ¡ ‰t jˆ
dˆd	d�}| ¡  t  ¡ ‰t jˆ
dˆd	d�}| ¡  t jˆ
dd� ¡  dtˆƒt|ƒt|ƒf }t|ƒdk�rªd}|‰nt|ƒdk�rÈdt|ƒ }|‰t jˆ
|ddd� ¡  tˆ
d d!d"t jd#�}|jt jt jd$d%� d	}	i ‰ˆD ]ˆ}
|
d&7 }
t  ¡ ˆ|	< d }t ¡ �rZt j||
d'd(d)d	ddˆ|	 d*�	}nt j||
d'd(d)d	ˆ|	 d+�}|jd,|d-� | d,d.¡ |	d7 }	�qt jˆ
dd� ¡  d}t j
|d/�‰ t jˆ
d0dd1d� ¡  t jˆ
ˆ d2�}| ¡  | ¡  | d3‡ ‡‡‡‡‡‡‡‡‡	‡
‡‡‡‡fd4d5„¡ t jˆ
d6d7‡ ‡‡‡‡‡‡‡‡‡	‡
‡‡‡‡fd8d5„d9� ¡  t jˆ
d.d� ¡  tˆ
ƒ t  ¡ }|  d:¡ | !¡  | "¡  | #¡  | $¡  ˆ
 %¡  d S );Nz'SeleniumBase Commander | GUI for pytesti4  i¸  i¾  r   )Útext)zUse Chrome Browser  (Default)zUse Edge Browser  (--edge)z Use Firefox Browser  (--firefox)zUse Safari Browser  (--safari)r   )zNew Session Per Test  (Default)z-Reuse Session for ALL tests in thread  (--rs)z5Reuse Session and also clear cookies  (--rs --crumbs)z0Reuse Session for tests with same CLASS  (--rcs)z;Reuse Session for class and clear cookies  (--rcs --crumbs))zNumber of Threads: 1  (Default)zNumber of Threads: 2  (-n=2)zNumber of Threads: 3  (-n=3)zNumber of Threads: 4  (-n=4)é   zNumber of Threads: 5  (-n=5)zNumber of Threads: 6  (-n=6)zNumber of Threads: 7  (-n=7)zNumber of Threads: 8  (-n=8)zVerbose Output  (-v))r-   ÚvariableÚpadyzDemo Mode  (--demo)zMobile Mode  (--mobile)zDashboard  (--dashboard)zReport  (--html=report.html)zHeadless Browser  (--headless)z Save Screenshots  (--screenshot)zXSelect from %s rows (%s files with %s tests):  (All tests will run if none are selected)r   z(Only ONE TEST was found and will be run:z@Select from %s tests:  (All tests will run if none are selected)ÚyellowÚmagenta)r-   ÚbgÚfgéd   é   Úword)ÚwidthÚheightÚwrapÚstateT)ZsideÚfillÚexpandzÈ                                                                                                                                                                                                        ÚwhiteÚblackÚw)r-   r3   r4   Úanchorr0   ZborderwidthZhighlightthicknessr/   )r-   r3   r4   rA   r0   r/   Úend)ZwindowÚ
)Úvaluez8Additional "pytest" Options:  (Eg. "--incognito --slow")Úblue)Ztextvariablez<Return>c                    sP   t ˆ
ˆˆˆˆ ¡ ˆ ¡ ˆ	 ¡ ˆ ¡ ˆ ¡ ˆ ¡ ˆ ¡ ˆ ¡ ˆ ¡ ˆ ¡ ˆ  ¡ ƒS ©N©r,   r   )Ú_©ZaoptsZaraZbrxr(   ZdbxZdmxZhbxZhrxZmmxZntxr   ZrsxZssxr'   Zvoxr   r   Ú<lambda>Q  s    ñz$create_tkinter_gui.<locals>.<lambda>zRun Selected TestsÚgreenc                      sP   t ˆ
ˆˆˆˆ ¡ ˆ ¡ ˆ	 ¡ ˆ ¡ ˆ ¡ ˆ ¡ ˆ ¡ ˆ ¡ ˆ ¡ ˆ ¡ ˆ  ¡ ƒS rF   rG   r   rI   r   r   rJ   h  s    ñ)r-   r4   ÚcommandZ1x1)&ÚtkZTkÚtitler   Ú
is_windowsZminsizeÚLabelÚpackZis_macr   Z	StringVarÚsetZ
OptionMenuÚintÚosÚ	cpu_countÚ	ExceptionZIntVarZCheckbuttonÚselectr   r   ZDISABLEDZTOPZBOTHZwindow_createÚinsertZEntryZfocusÚbindZButtonr   ZgeometryZiconifyÚupdateZ	deiconifyÚdestroyZmainloop)r'   r(   ÚfilesÚ
solo_testsZoptions_listZquestion_menuZchkZrun_displayZ	text_areaÚcountÚrowÚcbr*   ÚentryZdecoyr   rI   r   Úcreate_tkinter_gui¬   s(   







ÿÿÿÿÿÿÿþÿþÿÿ
÷ù	ý
&ý&ü

rb   c                  C   sX  d} t  ¡ rd} t| ƒ\}}}}}}}tjdd … }d |¡}	d}
|
|7 }
|
d7 }
|
|7 }
|
d7 }
|
|7 }
|
d7 }
|
|7 }
|
d	7 }
|
|7 }
|
d7 }
|
|7 }
|
d
7 }
|
|7 }
|
d7 }
|
|7 }
|
d7 }
|
|7 }
t|
ƒ tjdtj	|	f tj
dd�}| ¡ \}}|�r$dt|ƒ }|| | }t|ƒ d S g }t  ¡ �r>| d¡}n
| d¡}| dd¡ d¡D ]}d|v �rZ| |¡ �qZ|�sœd}|d | | }t|ƒ d S g }|D ]2}| d¡dk�r¤d| d¡d  }| |¡ �q¤g }g }|D ]P}||v�rä| |¡ d}| |¡dk�rd}d|| |¡|f }| |¡ �qä|}g |¢|¢}t||	||ƒ d S )NTFé   r   r   Ú*z Starting the ZSeleniumZBaseZ	Commanderz Desktop Appz...z2"%s" -m pytest --collect-only -q --rootdir="./" %s)Ústdoutr   zError collecting tests: %sÚlatin1zutf-8úrC   z::z1No tests found! Exiting SeleniumBase Commander...zERROR: r   z
(FILE)  %sr   Úsz%s  =>  (%s Test%s))r   r"   r   r   ÚargvÚjoinr$   r%   r&   r   ÚPIPEÚcommunicateÚstrrO   Údecoder!   r   r   r^   rb   )r   r   r	   r
   r   r   r   r   Úcommand_argsr(   ÚmessageÚprocÚoutputÚerrorÚ	error_msgr'   r_   ÚgroupsZg_namer\   Z
used_filesÚpluralZf_rowr]   r   r   r   Úmain‰  sˆ    
ÿü




rw   Ú__main__z>To open SBase Commander, type "sbase commander" or "sbase gui")Ú__doc__r   rT   r%   r   ÚtkinterrM   Zseleniumbase.fixturesr   Ztkinter.scrolledtextr   r   r   r,   rb   rw   Ú__name__r$   r   r   r   r   Ú<module>   s   v ^I