a
    7ñ»juå  ã                   @   sh  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„ 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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d+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Z d3d4„ Z!d5d6„ Z"d7d8„ Z#d9d:„ Z$d;d<„ Z%d=d>„ Z&d?d@„ Z'dAdB„ Z(dCdD„ Z)dEdF„ Z*dGdH„ Z+e,dIk�rde+ƒ  dS )Ja¶  
SeleniumBase console scripts runner

Usage:
seleniumbase [COMMAND] [PARAMETERS]
  OR   sbase [COMMAND] [PARAMETERS]

Examples:
sbase get chromedriver
sbase methods
sbase options
sbase commander
sbase behave-gui
sbase behave-options
sbase caseplans
sbase mkdir ui_tests
sbase mkfile new_test.py
sbase mkrec new_test.py
sbase mkrec new_test.py --url=wikipedia.org
sbase codegen new_test.py --url=wikipedia.org
sbase recorder
sbase record new_test.py
sbase record
sbase mkpres new_presentation.py
sbase mkchart new_chart.py
sbase convert webdriver_unittest_file.py
sbase print my_first_test.py -n
sbase translate my_first_test.py --zh -p
sbase extract-objects my_first_test.py
sbase inject-objects my_first_test.py
sbase objectify my_first_test.py
sbase revert-objects my_first_test.py
sbase encrypt
sbase decrypt
sbase proxy
sbase proxy --hostname=127.0.0.1 --port=8899
sbase download server
sbase grid-hub start
sbase grid-node start --hub=127.0.0.1
é    N)Úsuppress)Úsettings)Ú	constants)Úshared_utilsc            	      C   sn  ddl m}  |  ¡ }t|ƒ t d¡ tdƒ t d¡ tƒ  t d¡ tƒ  t d¡ tdƒ t d¡ d}|d7 }|d7 }|d	7 }|d
7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d 7 }|d!7 }|d"7 }|d#7 }|d$7 }|d%7 }|d&7 }|d
7 }|d'7 }|d(7 }|d)7 }|d*7 }|d7 }|}d+tj	v�rjt
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,|d- | d. | ¡}| d/|d0 | d. | ¡}| d1|d1 | ¡}| d2|d2 | ¡}| d3|d3 | ¡}ttƒ� t|ƒ W d   ƒ d S 1 �s”0    Y  | d4d¡}| d5d¡ d6d¡ d7d¡}| d8d¡ d9d¡ d:d¡}d+tj	v�rb| d,|d- | d. | ¡}| d/|d0 | d. | ¡}| d1|d1 | ¡}| d2|d2 | ¡}| d3|d3 | ¡}t|ƒ d S );Nr   ©Úlogo_helpergìQ¸…ë¡?Ú gX9´Èv¾Ÿ?gÃõ(\�Âá?u�   â•­â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â•®
u9   â”‚  * USAGE: "seleniumbase [COMMAND] [PARAMETERS]"  â”‚
u9   â”‚  *    OR:        "sbase [COMMAND] [PARAMETERS]"  â”‚
u9   â”‚                                                  â”‚
u9   â”‚ COMMANDS:        PARAMETERS / DESCRIPTIONS:      â”‚
u9   â”‚    get / install    [DRIVER_NAME] [OPTIONS]      â”‚
u9   â”‚    methods          (List common Python methods) â”‚
u9   â”‚    options          (List common pytest options) â”‚
u9   â”‚    behave-options   (List common behave options) â”‚
u9   â”‚    gui / commander  [OPTIONAL PATH or TEST FILE] â”‚
u9   â”‚    behave-gui       (SBase Commander for Behave) â”‚
u9   â”‚    caseplans        [OPTIONAL PATH or TEST FILE] â”‚
u9   â”‚    mkdir            [DIRECTORY] [OPTIONS]        â”‚
u9   â”‚    mkfile           [FILE.py] [OPTIONS]          â”‚
u9   â”‚    mkrec / codegen  [FILE.py] [OPTIONS]          â”‚
u9   â”‚    recorder         (Open Recorder Desktop App.) â”‚
u9   â”‚    record           (If args: mkrec. Else: App.) â”‚
u9   â”‚    mkpres           [FILE.py] [LANG]             â”‚
u9   â”‚    mkchart          [FILE.py] [LANG]             â”‚
u9   â”‚    print            [FILE] [OPTIONS]             â”‚
u9   â”‚    translate        [SB_FILE.py] [LANG] [ACTION] â”‚
u9   â”‚    convert          [WEBDRIVER_UNITTEST_FILE.py] â”‚
u9   â”‚    extract-objects  [SB_FILE.py]                 â”‚
u9   â”‚    inject-objects   [SB_FILE.py] [OPTIONS]       â”‚
u9   â”‚    objectify        [SB_FILE.py] [OPTIONS]       â”‚
u9   â”‚    revert-objects   [SB_FILE.py] [OPTIONS]       â”‚
u9   â”‚    encrypt / obfuscate                           â”‚
u9   â”‚    decrypt / unobfuscate                         â”‚
u9   â”‚    proxy            (Start a basic proxy server) â”‚
u9   â”‚    download server  (Get Selenium Grid JAR file) â”‚
u9   â”‚    grid-hub         [start|stop] [OPTIONS]       â”‚
u9   â”‚    grid-node        [start|stop] --hub=[HOST/IP] â”‚
u9   â”‚ *  EXAMPLE => "sbase get chromedriver stable"    â”‚
u9   â”‚ *  For command info => "sbase help [COMMAND]"    â”‚
u9   â”‚ *  For info on all commands => "sbase --help"    â”‚
uœ   â•°â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â•¯ÚlinuxÚseleniumbaseÚseleniumÚbaseZsbaseÚsz	[COMMAND]ú--helpÚhelpu   â•®
u   â•­u   â•®u   â”‚u   â•°u   â•¯u   â”€)Úseleniumbase.console_scriptsr   Úget_seleniumbase_logoÚprintÚtimeÚsleepÚshow_package_locationÚshow_version_infoÚsysÚplatformÚcoloramaÚForeÚBLUEÚBackÚLIGHTCYAN_EXÚLIGHTGREEN_EXÚLIGHTYELLOW_EXÚMAGENTAÚStyleÚ	RESET_ALLÚreplacer   Ú	Exception)	r   Úseleniumbase_logoÚscZbordered_scÚc1Úc2Úc3Úc4Úcr© r,   úFE:\soccer\ml_env\Lib\site-packages\seleniumbase/console_scripts/run.pyÚshow_basic_usage2   s˜    





"r.   c                  C   sb  t jjt jj } t jjt jj }t jj}d|  d | d |  d | }t|ƒ tdƒ tdƒ tdƒ tdƒ td	ƒ td
ƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tƒ  tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ td ƒ td!ƒ td"ƒ td#ƒ td$ƒ tdƒ d S )%Nú  ú** zget / installú **r   ú  Usage:z1     seleniumbase install [DRIVER_NAME] [OPTIONS]z1     OR: seleniumbase get [DRIVER_NAME] [OPTIONS]z1     OR:    sbase install [DRIVER_NAME] [OPTIONS]z1     OR:        sbase get [DRIVER_NAME] [OPTIONS]z0         (Drivers: chromedriver, cft, uc_driver,z0                   edgedriver, chs, geckodriver)ú
  Options:z0     VERSION    Specify the version to download.z3                Tries to detect the needed version.z4                If using chromedriver or edgedriver,z6                you can use the major version integer.z6     -p / --path    Also copy driver to /usr/local/binú  Examples:z     sbase get chromedriverz     sbase get geckodriverz     sbase get edgedriverz     sbase get chromedriver 114z)     sbase get chromedriver 114.0.5735.90z"     sbase get chromedriver stablez      sbase get chromedriver betaz     sbase get chromedriver -pz     sbase get cft 131z     sbase get chsú	  Output:z5     Downloads the webdriver to seleniumbase/drivers/z5     (chromedriver is required for Chrome automation)z5     (geckodriver is required for Firefox automation)z5     (edgedriver is required for MS__Edge automation)z5     (cft is for the `Chrome for Testing` binary exe)z5     (chs is for the `Chrome-Headless-Shell` binary.)©	r   r   r   r   r   r   r!   r"   r   ©r(   r)   r+   r&   r,   r,   r-   Úshow_install_usage‚   sN     r8   c                  C   sÌ   t jjt jj } t jjt jj }t jj}d|  d | d |  d | }t|ƒ tdƒ tdƒ tdƒ tdƒ td	ƒ td
ƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ d S )Nr/   r0   Ú	commanderr1   r   r2   z8     seleniumbase commander [OPTIONAL PATH or TEST FILE]z8     OR:    sbase commander [OPTIONAL PATH or TEST FILE]z8     OR:   seleniumbase gui [OPTIONAL PATH or TEST FILE]z8     OR:          sbase gui [OPTIONAL PATH or TEST FILE]r4   z     sbase guiz     sbase gui -k agentz     sbase gui -m marker2z     sbase gui test_suite.pyz      sbase gui offline_examples/r5   z6     Launches SeleniumBase Commander | GUI for pytest.r6   r7   r,   r,   r-   Úshow_commander_usage¬   s(     r:   c                  C   s¼   t jjt jj } t jjt jj }t jj}d|  d | d |  d | }t|ƒ tdƒ tdƒ tdƒ tdƒ td	ƒ td
ƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ d S )Nr/   r0   ú
behave-guir1   r   r2   z9     seleniumbase behave-gui [OPTIONAL PATH or TEST FILE]z9     seleniumbase gui-behave [OPTIONAL PATH or TEST FILE]z9     OR:    sbase behave-gui [OPTIONAL PATH or TEST FILE]z9     OR:    sbase gui-behave [OPTIONAL PATH or TEST FILE]r4   z     sbase behave-guiz     sbase behave-gui features/z1     sbase behave-gui features/calculator.featurer5   z6     Launches SeleniumBase Commander | GUI for Behave.r6   r7   r,   r,   r-   Úshow_behave_gui_usageÃ   s$     r<   c                  C   s¼   t jjt jj } t jjt jj }t jj}d|  d | d |  d | }t|ƒ tdƒ tdƒ tdƒ tdƒ td	ƒ td
ƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ d S )Nr/   r0   Ú	caseplansr1   r   r2   z8     seleniumbase caseplans [OPTIONAL PATH or TEST FILE]z8     OR:    sbase caseplans [OPTIONAL PATH or TEST FILE]r4   z     sbase caseplansz     sbase caseplans -k agentz     sbase caseplans -m marker2z"     sbase caseplans test_suite.pyz&     sbase caseplans offline_examples/r5   z4     Launches the SeleniumBase Case Plans Generator.r6   r7   r,   r,   r-   Úshow_caseplans_usageØ   s$     r>   c                  C   sÔ   t jjt jj } t jjt jj }t jj}d|  d | d |  d | }t|ƒ tdƒ tdƒ tdƒ tdƒ td	ƒ td
ƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ d S )Nr/   r0   Úmkdirr1   r   r2   z-     seleniumbase mkdir [DIRECTORY] [OPTIONS]z-     OR:    sbase mkdir [DIRECTORY] [OPTIONS]ú
  Example:z     sbase mkdir ui_testsr3   z7     -b / --basic  (Only config files. No tests added.)z7     --gha  (Include GitHub Actions YML with defaults.)r5   z4     Creates a new folder for running SBase scripts.z2     The new folder contains default config files,z4     sample tests for helping new users get started,z6     and Python boilerplates for setting up customizedz     test frameworks.r6   r7   r,   r,   r-   Úshow_mkdir_usageí   s*     rA   c                  C   sl  t jjt jj } t jjt jj }t jj}d|  d | d |  d | }t|ƒ tdƒ tdƒ tdƒ tdƒ td	ƒ td
ƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ td ƒ td!ƒ td"ƒ td#ƒ td$ƒ td%ƒ td&ƒ tdƒ d S )'Nr/   r0   Úmkfiler1   r   r2   z,     seleniumbase mkfile [FILE.py] [OPTIONS]z,     OR:    sbase mkfile [FILE.py] [OPTIONS]r@   z     sbase mkfile new_test.pyr3   z9     --uc  (UC Mode boilerplate using SB context manager)z9     -b / --basic  (Basic boilerplate / single-line test)z9     -r / --rec  (Adds Pdb+ breakpoint for Recorder Mode)z9     --url=URL  (Makes the test start on a specific page)ú  Language Options:ú.     --en / --English    |    --zh / --Chineseú-     --nl / --Dutch      |    --fr / --Frenchú/     --it / --Italian    |    --ja / --Japaneseú1     --ko / --Korean     |    --pt / --Portugueseú.     --ru / --Russian    |    --es / --Spanishz  Syntax Formats:z9     --bc / --basecase       (BaseCase class inheritance)z9     --pf / --pytest-fixture          (sb pytest fixture)z9     --cf / --class-fixture   (class + sb pytest fixture)z9     --cm / --context-manager        (SB context manager)z9     --dc / --driver-context      (DriverContext manager)z9     --dm / --driver-manager             (Driver manager)r5   z9     Creates a new SBase test file with boilerplate code.ú4     If the file already exists, an error is raised.z8     By default, uses English with BaseCase inheritance,z7     and creates a boilerplate with common SeleniumBasez8     methods: "open", "type", "click", "assert_element",z6     and "assert_text". If using the basic boilerplatez9     option, only the "open" method is included. Only thez9     BaseCase format supports Languages or Recorder Mode.z9     UC Mode automatically uses English with SB() format.r6   r7   r,   r,   r-   Úshow_mkfile_usage  sP     rJ   c                  C   sì   t jjt jj } t jjt jj }t jj}d|  d | d |  d | }t|ƒ tdƒ tdƒ tdƒ tdƒ td	ƒ td
ƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ d S )Nr/   r0   Úmkrecr1   r   r2   z+     seleniumbase mkrec [FILE.py] [OPTIONS]z+     OR:    sbase mkrec [FILE.py] [OPTIONS]r4   z     sbase mkrec new_test.pyz0     sbase mkrec new_test.py --url=wikipedia.orgr3   ú2     --url=URL  (Sets the initial start page URL.)ú2     --edge  (Use Edge browser instead of Chrome.)ú2     --gui / --headed  (Use headed mode on Linux.)ú2     --uc / --undetected  (Use undetectable mode.)ú2     --ee  (Use SHIFT + ESC to end the recording.)ú2     --overwrite  (Overwrite file when it exists.)ú2     --behave  (Also output Behave/Gherkin files.)r5   ú8     Creates a new SeleniumBase test using the Recorder.ú8     If the filename already exists, an error is raised.r6   r7   r,   r,   r-   Úshow_mkrec_usage0  s0     rU   c                  C   sì   t jjt jj } t jjt jj }t jj}d|  d | d |  d | }t|ƒ tdƒ tdƒ tdƒ tdƒ td	ƒ td
ƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ d S )Nr/   r0   Úcodegenr1   r   r2   z-     seleniumbase codegen [FILE.py] [OPTIONS]z-     OR:    sbase codegen [FILE.py] [OPTIONS]r4   z     sbase codegen new_test.pyz2     sbase codegen new_test.py --url=wikipedia.orgr3   rL   rM   rN   rO   rP   rQ   rR   r5   rS   rT   r6   r7   r,   r,   r-   Úshow_codegen_usageK  s0     rW   c                  C   s¤   t jjt jj } t jjt jj }t jj}d|  d | d |  d | }t|ƒ tdƒ tdƒ tdƒ tdƒ td	ƒ td
ƒ tdƒ tdƒ tdƒ tdƒ d S )Nr/   r0   Úrecorderr1   r   r2   z$     seleniumbase recorder [OPTIONS]z$     OR:    sbase recorder [OPTIONS]r3   rO   rR   r5   z4     Launches the SeleniumBase Recorder Desktop App.r6   r7   r,   r,   r-   Úshow_recorder_usagef  s     rY   c                  C   sì   t jjt jj } t jjt jj }t jj}d|  d | d |  d | }t|ƒ tdƒ tdƒ tdƒ tdƒ td	ƒ td
ƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ d S )Nr/   r0   Úmkpresr1   r   r2   z)     seleniumbase mkpres [FILE.py] [LANG]z)     OR:    sbase mkpres [FILE.py] [LANG]r@   z*     sbase mkpres new_presentation.py --enrC   rD   rE   rF   rG   rH   r5   z6     Creates a new presentation with 3 example slides.rI   ú3     By default, the slides are written in English,z3     and use "serif" theme with "slide" transition.z3     The slides can be used as a basic boilerplate.r6   r7   r,   r,   r-   Úshow_mkpres_usagex  s0     r\   c                  C   sì   t jjt jj } t jjt jj }t jj}d|  d | d |  d | }t|ƒ tdƒ tdƒ tdƒ tdƒ td	ƒ td
ƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ d S )Nr/   r0   Úmkchartr1   r   r2   z*     seleniumbase mkchart [FILE.py] [LANG]z*     OR:    sbase mkchart [FILE.py] [LANG]r@   z$     sbase mkchart new_chart.py --enrC   rD   rE   rF   rG   rH   r5   z3     Creates a new SeleniumBase chart presentation.rI   r[   z3     and use a "sky" theme with "slide" transition.z2     The chart can be used as a basic boilerplate.r6   r7   r,   r,   r-   Úshow_mkchart_usage“  s0     r^   c                  C   s¤   t jjt jj } t jjt jj }t jj}d|  d | d |  d | }t|ƒ tdƒ tdƒ tdƒ tdƒ td	ƒ td
ƒ tdƒ tdƒ tdƒ tdƒ d S )Nr/   r0   Úconvertr1   r   r2   z6     seleniumbase convert [WEBDRIVER_UNITTEST_FILE.py]z6     OR:    sbase convert [WEBDRIVER_UNITTEST_FILE.py]r5   z8     Converts a Selenium IDE exported WebDriver unittestz7     file into a SeleniumBase file. Adds _SB to the newz6     file name while keeping the original file intact.z4     (Works with Katalon Recorder Selenium scripts.)r6   r7   r,   r,   r-   Úshow_convert_usage®  s     r`   c                  C   s¤   t jjt jj } t jjt jj }t jj}d|  d | d |  d | }t|ƒ tdƒ tdƒ tdƒ tdƒ td	ƒ td
ƒ tdƒ tdƒ tdƒ tdƒ d S )Nr/   r0   r   r1   r   r2   z(     seleniumbase print [FILE] [OPTIONS]z(     OR:    sbase print [FILE] [OPTIONS]r3   z(     -n   (Add line Numbers to the rows)r5   z%     Prints the code/text of any filez     with syntax-highlighting.r6   r7   r,   r,   r-   Úshow_print_usageÀ  s     ra   c                  C   s,  t jjt jj } t jjt jj }t jj}d|  d | d |  d | }t|ƒ tdƒ tdƒ tdƒ tdƒ td	ƒ td
ƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ d S )Nr/   r0   Ú	translater1   r   r2   z8     seleniumbase translate [SB_FILE.py] [LANG] [ACTION]z8     OR:    sbase translate [SB_FILE.py] [LANG] [ACTION]z  Languages:rD   rE   rF   rG   rH   z
  Actions:z;     -p / --print  (Print translation output to the screen)z<     -o / --overwrite  (Overwrite the file being translated)z:     -c / --copy  (Copy the translation to a new .py file)r3   z;     -n  (include line Numbers when using the Print action)r5   z<     Translates a SeleniumBase Python file into the languagez<     specified. Method calls and "import" lines get swapped.z5     Both a language and an action must be specified.z9     The "-p" action can be paired with one other action.z<     When running with "-c" (or "--copy"), the new file namez:     will be the original name appended with an underscorez9     plus the 2-letter language code of the new language.z9     (Example: Translating "test_1.py" into Japanese withz9      "-c" will create a new file called "test_1_ja.py".)r6   r7   r,   r,   r-   Úshow_translate_usageÒ  s@     rc   c                  C   sœ   t jjt jj } t jjt jj }t jj}d|  d | d |  d | }t|ƒ tdƒ tdƒ tdƒ tdƒ td	ƒ td
ƒ tdƒ tdƒ tdƒ d S )Nr/   r0   úextract-objectsr1   r   r2   z.     seleniumbase extract-objects [SB_FILE.py]z.     OR:    sbase extract-objects [SB_FILE.py]r5   z7     Creates page objects based on selectors found in az<     seleniumbase Python file and saves those objects to thez<     "page_objects.py" file in the same folder as the tests.r6   r7   r,   r,   r-   Úshow_extract_objects_usageõ  s     re   c                  C   s´   t jjt jj } t jjt jj }t jj}d|  d | d |  d | }t|ƒ tdƒ tdƒ tdƒ tdƒ td	ƒ td
ƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ d S )Nr/   r0   úinject-objectsr1   r   r2   z7     seleniumbase inject-objects [SB_FILE.py] [OPTIONS]z7     OR:    sbase inject-objects [SB_FILE.py] [OPTIONS]r3   ú<     -c, --comments  (Add object selectors to the comments.)ú2                     (Default: No added comments.)r5   z:     Takes the page objects found in the "page_objects.py"z9     file and uses those to replace matching selectors inz+     the selected seleniumbase Python file.r6   r7   r,   r,   r-   Úshow_inject_objects_usage  s"     ri   c                  C   sÌ   t jjt jj } t jjt jj }t jj}d|  d | d |  d | }t|ƒ tdƒ tdƒ tdƒ tdƒ td	ƒ td
ƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ d S )Nr/   r0   Ú	objectifyr1   r   r2   z2     seleniumbase objectify [SB_FILE.py] [OPTIONS]z2     OR:    sbase objectify [SB_FILE.py] [OPTIONS]r3   rg   rh   r5   z7     A modified version of the file where the selectorsz6     have been replaced with variable names defined inz;     "page_objects.py", supporting the Page Object Pattern.z6     (seleniumbase "objectify" has the same outcome asz8      combining "extract-objects" with "inject-objects")r6   r7   r,   r,   r-   Úshow_objectify_usage  s(     rk   c                  C   s¼   t jjt jj } t jjt jj }t jj}d|  d | d |  d | }t|ƒ tdƒ tdƒ tdƒ tdƒ td	ƒ td
ƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ d S )Nr/   r0   úrevert-objectsr1   r   r2   z7     seleniumbase revert-objects [SB_FILE.py] [OPTIONS]z7     OR:    sbase revert-objects [SB_FILE.py] [OPTIONS]r3   z<     -c, --comments  (Keep existing comments for the lines.)z5                     (Default: No comments are kept.)r5   z<     Reverts the changes made by "seleniumbase objectify" orz5     "seleniumbase inject-objects" when run against az;     seleniumbase Python file. Objects will get replaced byz4     selectors stored in the "page_objects.py" file.r6   r7   r,   r,   r-   Úshow_revert_objects_usage1  s$     rm   c                  C   sœ   t jjt jj } t jjt jj }t jj}d|  d | d |  d | }t|ƒ tdƒ tdƒ tdƒ tdƒ td	ƒ td
ƒ tdƒ tdƒ tdƒ d S )Nr/   r0   zencrypt OR obfuscater1   r   r2   z7     seleniumbase encrypt   ||   seleniumbase obfuscateú                           --OR--z7            sbase encrypt   ||          sbase obfuscater5   z3     Runs the password encryption/obfuscation tool.z;     (Where you can enter a password to encrypt/obfuscate.)r6   r7   r,   r,   r-   Úshow_encrypt_usageF  s     ro   c                  C   sœ   t jjt jj } t jjt jj }t jj}d|  d | d |  d | }t|ƒ tdƒ tdƒ tdƒ tdƒ td	ƒ td
ƒ tdƒ tdƒ tdƒ d S )Nr/   r0   zdecrypt OR unobfuscater1   r   r2   z9     seleniumbase decrypt   ||   seleniumbase unobfuscatern   z9            sbase decrypt   ||          sbase unobfuscater5   z5     Runs the password decryption/unobfuscation tool.z<     (Where you can enter an encrypted password to decrypt.)r6   r7   r,   r,   r-   Úshow_decrypt_usageW  s     rp   c                  C   s”   t jjt jj } t jjt jj }t jj}d|  d | d |  d | }t|ƒ tdƒ tdƒ tdƒ tdƒ td	ƒ td
ƒ tdƒ tdƒ d S )Nr/   r0   Údownloadr1   r   r2   z!     seleniumbase download serverz!     OR:    sbase download serverr5   z.     Downloads the Selenium Standalone Server.z;     (Server is required for using your own Selenium Grid.)r6   r7   r,   r,   r-   Úshow_download_usageh  s     rr   c                  C   sì   t jjt jj } t jjt jj }t jj}d|  d | d |  d | }t|ƒ tdƒ tdƒ tdƒ tdƒ td	ƒ td
ƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ d S )Nr/   r0   úgrid-hubr1   r   r2   z9     seleniumbase grid-hub {start|stop|restart} [OPTIONS]z9     OR:    sbase grid-hub {start|stop|restart} [OPTIONS]r3   ú;     -v, --verbose  (Increase verbosity of logging output.)z;                    (Default: Quiet logging / not verbose.)z;     --timeout=TIMEOUT  (Close idle browser after TIMEOUT.)z;                        (The default TIMEOUT: 230 seconds.)z;                        (Use --timeout=0 to skip timeouts.)r@   z      seleniumbase grid-hub startr5   z8     Controls the Selenium Grid Hub Server, which allowsz7     for running tests on multiple machines in parallelz4     to speed up test runs and reduce the total timez     of test suite execution.z3     You can "start" or "stop" the Grid Hub server.r6   r7   r,   r,   r-   Úshow_grid_hub_usagex  s0     ru   c                  C   sÔ   t jjt jj } t jjt jj }t jj}d|  d | d |  d | }t|ƒ tdƒ tdƒ tdƒ tdƒ td	ƒ td
ƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ tdƒ d S )Nr/   r0   ú	grid-noder1   r   r2   z:     seleniumbase grid-node {start|stop|restart} [OPTIONS]z:     OR:    sbase grid-node {start|stop|restart} [OPTIONS]r3   z;     --hub=[HOST/IP]  (The Grid Hub Hostname / IP Address.)z;                           (Default: 127.0.0.1 if not set.)rt   z;                    (Default: Quiet logging / Not verbose.)r@   z1     seleniumbase grid-node start --hub=127.0.0.1r5   z7     Controls the Selenium Grid node, which serves as az6     worker machine for your Selenium Grid Hub server.z-     You can "start" or "stop" the Grid node.r6   r7   r,   r,   r-   Úshow_grid_node_usage“  s*     rw   c                  C   sp   ddl m}  d }tjjtjj }tjjtjj }tjjtjj }tj	j
}|d | d | }d||| |f }|S )Nr   )Ú__version__r   r   z	%s %s%s%s)r
   rx   r   r   r   r   r   r   r   r!   r"   )rx   Úversion_infor'   r(   r)   r+   Zsb_textr,   r,   r-   Úget_version_info«  s    rz   c                  C   s   t ƒ } td|  ƒ d S ©Nz%s)rz   r   )ry   r,   r,   r-   r   º  s    r   c                  C   sF   dd l } dd l}| j | j |j¡¡}| d¡rB|dtdƒ … }|S )Nr   r
   )Úosr
   ÚpathÚdirnameÚrealpathÚ__file__ÚendswithÚlen)r|   r
   Úlocationr,   r,   r-   Úget_package_location¿  s    
r„   c                  C   s   t ƒ } td|  ƒ d S r{   )r„   r   )rƒ   r,   r,   r-   r   Ë  s    r   c            	      C   s|  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| d | d | d | }t|ƒ tdƒ d}| | | }t|ƒ d}t|ƒ tdƒ d}|d7 }|d7 }|d	7 }|d
7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d 7 }|d!7 }|d"7 }|d#7 }|d$7 }|d%7 }|d&7 }|d'7 }|d(7 }|d)7 }|d*7 }|d+7 }|d,7 }|d-7 }|d.7 }|d/7 }|d07 }|d17 }| d2d3|  ¡ d4|d4 ¡}| d3|d5 | d6 | ¡}| d4|d4 | ¡}| d7|d7 | ¡}t|ƒ d S )8Nú
 ú ** z SeleniumBase Python Methods r   z9Here are some common methods that come with SeleniumBase:z'(Some optional args are not shown here)z7*.open(url) => Navigate the browser window to the URL.
z:*.type(selector, text) => Update the field with the text.
z:*.click(selector) => Click the element with the selector.
z;*.click_link(link_text) => Click the link containing text.
z?*.check_if_unchecked(selector) => Check checkbox if unchecked.
z?*.uncheck_if_checked(selector) => Uncheck checkbox if checked.
z3*.select_option_by_text(dropdown_selector, option)
z2*.hover_and_click(hover_selector, click_selector)
z.*.drag_and_drop(drag_selector, drop_selector)
z?*.choose_file(selector, file_path) => Choose a file to upload.
z7*.get_text(selector) => Get the text from the element.
z8*.get_current_url() => Get the URL of the current page.
z9*.get_page_source() => Get the HTML of the current page.
z?*.get_attribute(selector, attribute) => Get element attribute.
z4*.get_title() => Get the title of the current page.
z9*.go_back() => Navigate to the previous page in history.
z>*.switch_to_frame(frame) => Switch into the iframe container.
z=*.switch_to_default_content() => Exit all iframe containers.
z<*.switch_to_parent_frame() => Exit from the current iframe.
z>*.open_new_window() => Open a new window in the same browser.
z<*.switch_to_window(window) => Switch to the browser window.
z?*.switch_to_default_window() => Switch to the original window.
z=*.get_new_driver(OPTIONS) => Open a new driver with OPTIONS.
z<*.switch_to_driver(driver) => Switch to the browser driver.
z?*.switch_to_default_driver() => Switch to the original driver.
z?*.wait_for_element(selector) => Wait until element is visible.
z?*.wait_for_element_present(selector) => Until element in HTML.
z=*.is_element_visible(selector) => Return element visibility.
z=*.is_element_present(selector) => Return element is in HTML.
z=*.is_text_visible(text, selector) => Return text visibility.
z=*.is_checked(selector) => Return whether the box is checked.
z=*.sleep(seconds) => Do nothing for the given amount of time.
z=*.save_screenshot(name) => Save a screenshot in .png format.
z=*.assert_element(selector) => Verify the element is visible.
z=*.assert_text(text, selector) => Verify text in the element.
z=*.assert_exact_text(text, selector) => Verify text is exact.
z=*.assert_url(url) => Verify that the current URL is the URL.
z=*.assert_url_contains(substring) => Verify substring in URL.
z;*.assert_title(title) => Verify the title of the web page.
z;*.assert_title_contains(substring) => Verify STR in title.
z>*.assert_downloaded_file(file) => Verify file was downloaded.
z>*.assert_no_404_errors() => Verify there are no broken links.
z:*.assert_no_js_errors() => Verify there are no JS errors.
z*.zself.ú(ÚselfÚ.ú))r   r   r   r   r   r   r   r    ZLIGHTRED_EXr!   r"   r   r#   )	r'   r(   r)   r*   Úc5r+   r&   ÚlineZsbmr,   r,   r-   Úshow_methodsÐ  sŽ    ÿÿÿÿr�   c            	      C   s\  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| d | d | d | }t|ƒ tdƒ d}| | | }t|ƒ d}t|ƒ d}|d7 }|d	7 }|d
7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d 7 }|d!7 }|d"7 }|d#7 }|d$7 }|d%7 }|d&7 }|d'7 }|d(7 }|d)7 }|d*7 }|d+7 }|d,7 }|d-7 }|d.7 }|d/7 }|d07 }|d17 }|d27 }|d37 }|d47 }|d57 }|d67 }|d77 }|d87 }|d97 }||7 }| d:d|  d; ¡ d<|d< ¡}| d=|d> |  d; ¡}| d?|d? | ¡}| d@dA| dB ¡ dC|dC ¡}| dD|dE | dB ¡}| dF|dF | ¡}| dG|dG | ¡}t|ƒ dH| dI | }|dB| dJ | 7 }|dK| dI | dB |  dL | dM 7 }t|ƒ tdƒ d S )NNr…   r†   z pytest CLI Options r   z=Here are some common pytest options to use with SeleniumBase:z=(Some options are Chromium-specific, e.g. "--guest --mobile")Ú
z@--browser=BROWSER  (Choice of web browser. Default is "chrome")
z@--edge / --firefox / --safari  (Shortcut for browser selection)
z@--headless  (Run tests headlessly. Default setting on Linux OS)
z@--demo  (Slow down and visually see test actions as they occur)
z@--slow  (Slow down the automation. Faster than using Demo Mode)
z?--rs / --reuse-session  (Reuse browser session between tests.)
z?--reuse-class-session / --rcs  (RS, but for class tests only.)
z?--crumbs  (Clear all cookies between tests reusing a session.)
z<--maximize  (Start tests with the browser window maximized)
z?--dashboard  (Enable SeleniumBase Dashboard at dashboard.html)
z1--incognito  (Enable Chromium's Incognito Mode.)
z)--guest  (Enable Chromium's Guest Mode.)
z'--dark  (Enable Chromium's Dark Mode.)
z8--uc  (Use undetected-chromedriver to evade detection.)
z9-m=MARKER  (Run tests with the specified pytest marker.)
z9-n=NUM  (Multithread the tests using that many threads.)
z;-v  (Verbose mode. Print the full names of each test run.)
z<--html=report.html  (Create a detailed pytest-html report.)
z=--collect-only / --co  (Only show discovered tests. No run.)
z=--co -q  (Only show full names of discovered tests. No run.)
z=-x  (Stop running tests after the first failure is reached.)
z<--pdb  (Enter Post Mortem Debug Mode after any test fails.)
z>--trace  (Enter Debug Mode immediately after starting tests.)
z? | Debug Mode Commands >>>      help / h: List all commands. |
z? | n: Next line of method.      s: Step into.   c: Continue. |
z? | where / w: Show stack spot.  u: Up stack.  d: Down stack. |
z? | return / r: Run until method returns.    j: Jump to line. |
z? | longlist / ll: See code.   dir(): List namespace objects. |
z=--help / -h  (Display list of all available pytest options.)
z>--ftrace / --final-trace  (Enter Debug Mode after tests end.)
z>--recorder / --rec  (Save browser actions as Python scripts.)
z>--rec-behave / --rec-gherkin  (Save actions as Gherkin code.)
z?--rec-print  (Display recorded scripts when they are created.)
z@--save-screenshot  (Save a screenshot at the end of each test.)
z@--archive-logs  (Archive logs after tests to prevent deletion.)
z<--check-js  (Check for JavaScript errors after page loads.)
z=--start-page=URL  (The browser start page when tests begin.)
z>--agent=STRING  (Modify the web browser's User-Agent string.)
z@--mobile  (Use Chromium's mobile device emulator during tests.)
z@--metrics=STRING  (Set mobile "CSSWidth,CSSHeight,PixelRatio".)
z@--ad-block  (Block certain types of iframe ads from appearing.)
z@--settings-file=FILE  (Override default SeleniumBase settings.)
z9--env=ENV  (Set the test env. Use "self.env" to access.)
z;--data=DATA  (Extra test data. Use "self.data" to access.)
z?--disable-csp  (Disable the Content Security Policy of sites.)
z@--remote-debug  (Sync to Ch_Debugger chrome://inspect/#devices)
z?--server=SERVER  (The Selenium Grid server/IP used for tests.)
z?--port=PORT  (The Selenium Grid port used by the test server.)
z@--proxy=SERVER:PORT  (Connect to a proxy server:port for tests)
z@--proxy=USER:PASS@SERVER:PORT  (Use authenticated proxy server)
ú
-ú-ú  (ú / -ú / ú=ú | ú |ú ú|
ú: ú:úDebug Mode Commandsú>>>zTo view all Úpytestúcommand-line optionsú	, type: "r   ú".©r   r   r   r   r   r   r   r    ÚREDr!   r"   r   r#   ©	r'   r(   r)   r*   r‹   r+   r&   rŒ   Úopr,   r,   r-   Úshow_options  sž       (r¥   c            	      C   sø  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| d | d | d | }t|ƒ tdƒ d}| | | }t|ƒ d}t|ƒ d}|d7 }|d	7 }|d
7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }|d 7 }|d!7 }|d"7 }|d#7 }|d$7 }|d%7 }|d&7 }|d'7 }|d(7 }|d)7 }|d*7 }|d+7 }|d,7 }|d-7 }|d.7 }|d/7 }||7 }| d0d|  d1 ¡ d2|d2 ¡}| d3|d4 |  d1 ¡}| d5|d5 | ¡}| d6d7| d8 ¡ d9|d9 ¡}| d:|d; | d8 ¡}| d<|d< | ¡}| d=|d= | ¡}t|ƒ d>| d? | }|d@| dA | d8 |  dB | dC 7 }t|ƒ tdƒ d S )DNr…   r†   z Behave CLI Options r   z?Here are some common "behave" options to use with SeleniumBase:z?(Some options are Chromium-specific, e.g. "-D guest -D mobile")rŽ   zA-D browser=BROWSER  (Choice of web browser. Default is "chrome")
z?-D headless  (Run tests headlessly. Default mode on Linux OS.)
zA-D demo  (Slow down and visually see test actions as they occur)
zA-D slow  (Slow down the automation. Faster than using Demo Mode)
zA-D reuse-session / -D rs  (Reuse browser session between tests.)
z@-D crumbs  (Clear all cookies between tests reusing a session.)
zA-D maximize  (Start tests with the web browser window maximized)
z@-D dashboard  (Enable SeleniumBase Dashboard at dashboard.html)
z2-D incognito  (Enable Chromium's Incognito Mode.)
z*-D guest  (Enable Chromium's Guest Mode.)
z(-D dark  (Enable Chromium's Dark Mode.)
z9-D uc  (Use undetected-chromedriver to evade detection.)
z8--no-snippets / -q  (Quiet mode. Don't print snippets.)
z7--dry-run / -d  (Dry run. Only show discovered tests.)
zA--stop  (Stop running tests after the first failure is reached.)
zA-D pdb  (Enter the Post Mortem Debug Mode after any test fails.)
zA     | Debug Mode Commands  >>>   help / h: List all commands. |
zA     |   n: Next line of method. s: Step through. c: Continue. |
zA     |  return / r: Run until method returns. j: Jump to line. |
zA     | where / w: Show stack spot. u: Up stack. d: Down stack. |
zA     | longlist / ll: See code. dir(): List namespace objects. |
z@-D recorder  (Record browser actions to generate test scripts.)
z@-D rec-print  (Display recorded scripts when they are created.)
zA-D save-screenshot  (Save a screenshot at the end of each test.)
z?-D archive-logs  (Archive log files instead of deleting them.)
z=-D check-js  (Check for JavaScript errors after page loads.)
z>-D start-page=URL  (The browser start page when tests begin.)
z?-D agent=STRING  (Modify the web browser's User-Agent string.)
zA-D mobile  (Use Chromium's mobile device emulator during tests.)
zA-D metrics=STRING  (Set mobile "CSSWidth,CSSHeight,PixelRatio".)
zA-D ad-block  (Block some types of display ads after page loads.)
zA-D settings-file=FILE  (Override default SeleniumBase settings.)
zA-D env=ENV  (Set the test env. Access using "self.env" in tests)
z;-D data=DATA  (Extra test data. Access using "self.data".)
z@-D disable-csp  (Disable the Content Security Policy of sites.)
z@-D remote-debug  (Sync Ch-R-Debugger chrome://inspect/#devices)
z@-D server=SERVER  (The Selenium Grid server/IP used for tests.)
z@-D port=PORT  (The Selenium Grid port used by the test server.)
zA-D proxy=SERVER:PORT  (Connect to a proxy server:port for tests)
zA-D proxy=USER:PASS@SERVER:PORT  (Use authenticated proxy server)
r�   r�   r‘   r’   r“   r”   r•   r–   r—   r˜   r™   rš   r›   rœ   zFor the full list of rž   rŸ   Zbehaver   r    r¡   r£   r,   r,   r-   Úshow_behave_optionsh  sˆ       (r¦   c                  C   s  t jjt jj } t jjt jj }t jj}t jj}t	ƒ  t
|d |  d | d ƒ t
|ƒ tƒ  tƒ  tƒ  tƒ  tƒ  tƒ  tƒ  tƒ  tƒ  tƒ  tƒ  tƒ  tƒ  tƒ  tƒ  tƒ  tƒ  tƒ  tƒ  tƒ  tƒ  t ƒ  t!ƒ  t
d| d | d | d d | d ƒ d S )	Nz              z  Commands:  z* (Use "r�   z" or "r   Úpythonz" for running tests) *
)"r   r   r   r   r   r   ZCYANr!   r"   r.   r   r8   r:   r<   r>   rA   rJ   rU   rW   rY   r\   r^   r`   ra   rc   re   ri   rk   rm   ro   rp   rr   ru   rw   )r(   r)   Zc6r+   r,   r,   r-   Úshow_detailed_help¯  sN    ÿÿÿÿr¨   c            *   
   C   s˜  d } d }t tjƒ}|dkr$tƒ  d S |dkr<tjd } g }n |dkr\tjd } tjdd … }|  ¡ } | dksv| dk�ràt |ƒdk�rÐddlm} d}d}d}d	}d
d tj¡v �rddlm	} tjD ]B}	|	 
d¡rÄ|	 d¡d }
d|
v rö|
 d¡d }
| |
¡  �qqÄzdt_| ¡  W n` t�yz } zFtjj}|t|ƒv �rD‚ tƒ  t|ƒ t d¡ tƒ  d}W Y d }~n
d }~0 0 |�rÀz| ¡  W n0 t�y¾   t|ƒ t d¡ tƒ  d}Y n0 |�rÜ| ¡  ntƒ  tƒ  �n´| dk�sô| dk�rddlm} | ¡  �nˆ| dk�s | dk�r8ddlm} | ¡  �n\| dk�sV| dk�sV| dk�rnddlm} | ¡  �n&| dk�s�| dk�r¨t |ƒdk�r¨ddlm} | ¡  �
nì| dk�sÔ| d k�sÔ| dk�rt |ƒdk�rt |ƒdk�rødd!lm} | ¡  ntƒ  | d k�rtƒ  ntƒ  �
nz| d"k�rXt |ƒdk�rHdd#lm } | ¡  ntƒ  t!ƒ  �
n<| d$k�r–t |ƒdk�r†dd%lm"} | ¡  ntƒ  t#ƒ  �	nþ| d&k�rÔt |ƒdk�rÄdd'lm$} | ¡  ntƒ  t%ƒ  �	nÀ| d(k�rt |ƒdk�rdd)lm&} | ¡  ntƒ  t'ƒ  �	n‚| d*k�rPt |ƒdk�r@dd+l(m)} | ¡  ntƒ  t*ƒ  �	nD| d,k�rŽt |ƒdk�r~dd-lm+} | ¡  ntƒ  t,ƒ  �	n| d.k�rÌt |ƒdk�r¼dd/l-m.} | ¡  ntƒ  t/ƒ  �nÈ| d0k�sà| d1k�rt |ƒdk�rdd2lm0} | 1¡  ntƒ  t2ƒ  �n€| d3k�s(| d4k�r\t |ƒdk�rLdd2lm0} | 3¡  ntƒ  t4ƒ  �n8| d5k�ršt |ƒdk�rŠdd2lm0} | 5¡  ntƒ  t6ƒ  �nú| d6k�s®| d7k�rât |ƒdk�rÒdd2lm0} | 7¡  ntƒ  t8ƒ  �n²| d8k�sö| d9k�r*t |ƒdk�rdd:l9m:} | ¡  ntƒ  t;ƒ  �nj| d;k�s>| d<k�rrt |ƒdk�rbdd=l9m<} | ¡  ntƒ  t=ƒ  �n"| d>k�rÆt |ƒdk�r¶|d  ¡ d?k�r¶dd@l>m?} |jddA� ntƒ  t@ƒ  �nÎ| dBk�sÚ| dCk�rt |ƒdk�rþddDl>mA} | ¡  ntƒ  tBƒ  �n†| dEk�s"| dFk�rVt |ƒdk�rFddGl>mC} | ¡  ntƒ  tDƒ  �n>| dHk�st| dIk�st| dJk�rÆt |ƒdk�r¼ddKlmE} | F¡ } t| ƒ tdLƒ tGƒ  tHƒ  tdLƒ ntƒ  �nÎ| dMk�sÚ| dNk�rätIƒ  �n°| dOk�sø| dPk�rtJƒ  �n’| dQk�s| dRk�r tKƒ  �nt| dSk�s4| dTk�	rdd lL}!dd lM}"dd lN}#|# O¡ �¨ |#jPdUtQdV� |! RtjSjT¡}$|$�H zddWlUmU}% W n& t�y®   tVjWdXtjXjYdY� Y n0 W d   ƒ n1 �sÆ0    Y  |" ZdZd tjdd … ¡ ¡ W d   ƒ n1 �	s0    Y  �n‚| d[k�	s0| d\k�	s0| d]k�rt |ƒdk�rþ|d dk�	r^tdLƒ tƒ  d S |d dk�	r~tdLƒ tƒ  d S |d dk�	ržtdLƒ t[ƒ  d S |d dk�	r¾tdLƒ t[ƒ  d S |d dk�	rÞtdLƒ t\ƒ  d S |d dk�	rþtdLƒ t\ƒ  d S |d dk�
rtdLƒ t]ƒ  d S |d dk�
r>tdLƒ t]ƒ  d S |d dk�
r^tdLƒ t]ƒ  d S |d d"k�
r~tdLƒ t!ƒ  d S |d d$k�
ržtdLƒ t#ƒ  d S |d dk�
r¾tdLƒ tƒ  d S |d d k�
rÞtdLƒ tƒ  d S |d dk�
rþtdLƒ t^ƒ  d S |d d&k�rtdLƒ t%ƒ  d S |d d(k�r>tdLƒ t'ƒ  d S |d d*k�r^tdLƒ t*ƒ  d S |d d,k�r~tdLƒ t,ƒ  d S |d d.k�ržtdLƒ t/ƒ  d S |d d0k�r¾tdLƒ t2ƒ  d S |d d3k�rÞtdLƒ t4ƒ  d S |d d5k�rþtdLƒ t6ƒ  d S |d d6k�rtdLƒ t8ƒ  d S |d d8k�r>tdLƒ t;ƒ  d S |d d9k�r^tdLƒ t;ƒ  d S |d d;k�r~tdLƒ t=ƒ  d S |d d<k�ržtdLƒ t=ƒ  d S |d d>k�r¾tdLƒ t@ƒ  d S |d dBk�rÞtdLƒ tBƒ  d S |d dEk�rþtdLƒ tDƒ  d S t_ƒ  nŽtƒ  t`jajbt`jcjd }&t`jajet`jcjf }'t`jgjh}(d^|  })|) id_d`|& d ¡})|) idad|( db ¡})|) id`|'d` |( ¡})|) idb|'db |( ¡})t|)ƒ d S )cNé   é   ÚgetÚinstallr   )Ú
sb_installFz.* Unable to download driver! Retrying in 3s...z/** Unable to download driver! Retrying in 5s...z	 --proxy=r—   )Úproxy_helperz--proxy=ú@é   Té   r9   Úgui)Úsb_commanderr;   z
gui-behave)Úsb_behave_guir=   z
case-plansZ
case_plans)Úsb_caseplansrX   Úrecord)Úsb_recorderrK   rV   )Úsb_mkrecr?   )Úsb_mkdirrB   )Ú	sb_mkfilerZ   )Ú	sb_mkpresr]   )Ú
sb_mkchartr_   )Úconvert_ider   )Úsb_printrb   )Ú
translatorrd   Úextract_objects)Úsb_objectifyrf   Úinject_objectsrj   rl   Úrevert_objectsZencryptÚ	obfuscate)rÄ   ZdecryptÚunobfuscate)rÅ   rq   Úserver)Údownload_selenium_server)Zforce_downloadrs   Úgrid_hub)rÈ   rv   Ú	grid_node)rÉ   Úversionz	--versionz-vr   r   Úmethodsz	--methodsÚoptionsz	--optionszbehave-optionsz--behave-optionsÚproxyz--proxyÚignore)Úcategory)rÍ   zproxy.py)rÊ   zproxy %sr   r   z-hz===> INVALID COMMAND: >> %s <<
z>> z>>z <<z<<)jr‚   r   Úargvr.   Úlowerr   r­   ÚjoinZseleniumbase.corer®   Ú
startswithÚsplitZvalidate_proxy_stringr   ZHIDE_DRIVER_DOWNLOADSÚmainr$   r   ZWarningsZINVALID_RUN_COMMANDÚstrr   r   r   r8   r³   r´   rµ   r·   r¸   rW   rU   r¹   rA   rº   rJ   r»   r\   r¼   r^   Z#seleniumbase.utilities.selenium_ider½   r`   r¾   ra   Zseleniumbase.translater¿   rc   rÁ   rÀ   re   rÂ   ri   rj   rk   rÃ   rm   Zseleniumbase.commonrÄ   ro   rÅ   rp   Z$seleniumbase.utilities.selenium_gridrÇ   rr   rÈ   ru   rÉ   rw   r   r   r   r   r�   r¥   r¦   Ú	fastenersr|   ÚwarningsÚcatch_warningsÚsimplefilterÚUserWarningZInterProcessLockZ
PipInstallZFINDLOCKrÍ   r   Zpip_installZProxyPyZVERÚsystemr:   r<   r>   rY   r¨   r   r   r¢   r   r   ZBLACKr    r!   r"   r#   )*ÚcommandÚcommand_argsÚnum_argsr­   Z
need_retryZneed_another_retryZretry_msg_1Zretry_msg_2r®   ÚargZproxy_stringÚeZinvalid_run_cmdr³   r´   rµ   r·   r¸   r¹   rº   r»   r¼   r½   r¾   r¿   rÁ   rÄ   rÅ   rÇ   rÈ   rÉ   r   r%   r×   r|   rØ   Zpip_find_lockrÍ   r‹   Zc7r+   Zinvalid_cmdr,   r,   r-   rÕ   Ô  sÀ   










ÿþýÿþ
þÿþý
ý





































 










ÿÿ,BrÕ   Ú__main__)-Ú__doc__r   r   r   Ú
contextlibr   Zseleniumbase.configr   Zseleniumbase.fixturesr   r   r.   r8   r:   r<   r>   rA   rJ   rU   rW   rY   r\   r^   r`   ra   rc   re   ri   rk   rm   ro   rp   rr   ru   rw   rz   r   r„   r   r�   r¥   r¦   r¨   rÕ   Ú__name__r,   r,   r,   r-   Ú<module>   sX   (P*+#FRG%  y
