SeleniumBase/seleniumbase/console_scripts/run.py

1386 lines
58 KiB
Python

"""
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
"""
import colorama
import sys
import time
from contextlib import suppress
from seleniumbase.config import settings
from seleniumbase.fixtures import constants
from seleniumbase.fixtures import shared_utils
def show_basic_usage():
from seleniumbase.console_scripts import logo_helper
seleniumbase_logo = logo_helper.get_seleniumbase_logo()
print(seleniumbase_logo)
time.sleep(0.035)
print("")
time.sleep(0.031)
show_package_location()
time.sleep(0.031)
show_version_info()
time.sleep(0.031)
print("")
time.sleep(0.555) # Enough time to see the logo & version
sc = ""
sc += "╭──────────────────────────────────────────────────╮\n"
sc += '│ * USAGE: "seleniumbase [COMMAND] [PARAMETERS]"\n'
sc += '│ * OR: "sbase [COMMAND] [PARAMETERS]"\n'
sc += "│ │\n"
sc += "│ COMMANDS: PARAMETERS / DESCRIPTIONS: │\n"
sc += "│ get / install [DRIVER_NAME] [OPTIONS] │\n"
sc += "│ methods (List common Python methods) │\n"
sc += "│ options (List common pytest options) │\n"
sc += "│ behave-options (List common behave options) │\n"
sc += "│ gui / commander [OPTIONAL PATH or TEST FILE] │\n"
sc += "│ behave-gui (SBase Commander for Behave) │\n"
sc += "│ caseplans [OPTIONAL PATH or TEST FILE] │\n"
sc += "│ mkdir [DIRECTORY] [OPTIONS] │\n"
sc += "│ mkfile [FILE.py] [OPTIONS] │\n"
sc += "│ mkrec / codegen [FILE.py] [OPTIONS] │\n"
sc += "│ recorder (Open Recorder Desktop App.) │\n"
sc += "│ record (If args: mkrec. Else: App.) │\n"
sc += "│ mkpres [FILE.py] [LANG] │\n"
sc += "│ mkchart [FILE.py] [LANG] │\n"
sc += "│ print [FILE] [OPTIONS] │\n"
sc += "│ translate [SB_FILE.py] [LANG] [ACTION] │\n"
sc += "│ convert [WEBDRIVER_UNITTEST_FILE.py] │\n"
sc += "│ extract-objects [SB_FILE.py] │\n"
sc += "│ inject-objects [SB_FILE.py] [OPTIONS] │\n"
sc += "│ objectify [SB_FILE.py] [OPTIONS] │\n"
sc += "│ revert-objects [SB_FILE.py] [OPTIONS] │\n"
sc += "│ encrypt / obfuscate │\n"
sc += "│ decrypt / unobfuscate │\n"
sc += "│ proxy (Start a basic proxy server) │\n"
sc += "│ download server (Get Selenium Grid JAR file) │\n"
sc += "│ grid-hub [start|stop] [OPTIONS] │\n"
sc += "│ grid-node [start|stop] --hub=[HOST/IP] │\n"
sc += "│ │\n"
sc += '│ * EXAMPLE => "sbase get chromedriver stable"\n'
sc += '│ * For command info => "sbase help [COMMAND]"\n'
sc += '│ * For info on all commands => "sbase --help"\n'
sc += "╰──────────────────────────────────────────────────╯"
sc += ""
bordered_sc = sc
if "linux" not in sys.platform:
c1 = colorama.Fore.BLUE + colorama.Back.LIGHTCYAN_EX
c2 = colorama.Fore.BLUE + colorama.Back.LIGHTGREEN_EX
c3 = colorama.Fore.BLUE + colorama.Back.LIGHTYELLOW_EX
c4 = colorama.Fore.MAGENTA + colorama.Back.LIGHTYELLOW_EX
cr = colorama.Style.RESET_ALL
sc = sc.replace("seleniumbase", c1 + "selenium" + c2 + "base" + cr)
sc = sc.replace("sbase", c1 + "s" + c2 + "base" + cr)
sc = sc.replace("[COMMAND]", c3 + "[COMMAND]" + cr)
sc = sc.replace("--help", c4 + "--help" + cr)
sc = sc.replace("help", c4 + "help" + cr)
with suppress(Exception):
print(sc)
return
sc = bordered_sc.replace("\n", "")
sc = sc.replace("", "").replace("", "").replace("", "")
sc = sc.replace("", "").replace("", "").replace("", "")
if "linux" not in sys.platform:
sc = sc.replace("seleniumbase", c1 + "selenium" + c2 + "base" + cr)
sc = sc.replace("sbase", c1 + "s" + c2 + "base" + cr)
sc = sc.replace("[COMMAND]", c3 + "[COMMAND]" + cr)
sc = sc.replace("--help", c4 + "--help" + cr)
sc = sc.replace("help", c4 + "help" + cr)
print(sc)
def show_install_usage():
c2 = colorama.Fore.BLUE + colorama.Back.LIGHTGREEN_EX
c3 = colorama.Fore.BLUE + colorama.Back.LIGHTYELLOW_EX
cr = colorama.Style.RESET_ALL
sc = " " + c2 + "** " + c3 + "get / install" + c2 + " **" + cr
print(sc)
print("")
print(" Usage:")
print(" seleniumbase install [DRIVER_NAME] [OPTIONS]")
print(" OR: seleniumbase get [DRIVER_NAME] [OPTIONS]")
print(" OR: sbase install [DRIVER_NAME] [OPTIONS]")
print(" OR: sbase get [DRIVER_NAME] [OPTIONS]")
print(" (Drivers: chromedriver, cft, uc_driver,")
print(" edgedriver, chs, geckodriver)")
print(" Options:")
print(" VERSION Specify the version to download.")
print(" Tries to detect the needed version.")
print(" If using chromedriver or edgedriver,")
print(" you can use the major version integer.")
print()
print(" -p / --path Also copy driver to /usr/local/bin")
print(" Examples:")
print(" sbase get chromedriver")
print(" sbase get geckodriver")
print(" sbase get edgedriver")
print(" sbase get chromedriver 114")
print(" sbase get chromedriver 114.0.5735.90")
print(" sbase get chromedriver stable")
print(" sbase get chromedriver beta")
print(" sbase get chromedriver -p")
print(" sbase get cft 131")
print(" sbase get chs")
print(" Output:")
print(" Downloads the webdriver to seleniumbase/drivers/")
print(" (chromedriver is required for Chrome automation)")
print(" (geckodriver is required for Firefox automation)")
print(" (edgedriver is required for MS__Edge automation)")
print(" (cft is for the `Chrome for Testing` binary exe)")
print(" (chs is for the `Chrome-Headless-Shell` binary.)")
print("")
def show_commander_usage():
c2 = colorama.Fore.BLUE + colorama.Back.LIGHTGREEN_EX
c3 = colorama.Fore.BLUE + colorama.Back.LIGHTYELLOW_EX
cr = colorama.Style.RESET_ALL
sc = " " + c2 + "** " + c3 + "commander" + c2 + " **" + cr
print(sc)
print("")
print(" Usage:")
print(" seleniumbase commander [OPTIONAL PATH or TEST FILE]")
print(" OR: sbase commander [OPTIONAL PATH or TEST FILE]")
print(" OR: seleniumbase gui [OPTIONAL PATH or TEST FILE]")
print(" OR: sbase gui [OPTIONAL PATH or TEST FILE]")
print(" Examples:")
print(" sbase gui")
print(" sbase gui -k agent")
print(" sbase gui -m marker2")
print(" sbase gui test_suite.py")
print(" sbase gui offline_examples/")
print(" Output:")
print(" Launches SeleniumBase Commander | GUI for pytest.")
print("")
def show_behave_gui_usage():
c2 = colorama.Fore.BLUE + colorama.Back.LIGHTGREEN_EX
c3 = colorama.Fore.BLUE + colorama.Back.LIGHTYELLOW_EX
cr = colorama.Style.RESET_ALL
sc = " " + c2 + "** " + c3 + "behave-gui" + c2 + " **" + cr
print(sc)
print("")
print(" Usage:")
print(" seleniumbase behave-gui [OPTIONAL PATH or TEST FILE]")
print(" seleniumbase gui-behave [OPTIONAL PATH or TEST FILE]")
print(" OR: sbase behave-gui [OPTIONAL PATH or TEST FILE]")
print(" OR: sbase gui-behave [OPTIONAL PATH or TEST FILE]")
print(" Examples:")
print(" sbase behave-gui")
print(" sbase behave-gui features/")
print(" sbase behave-gui features/calculator.feature")
print(" Output:")
print(" Launches SeleniumBase Commander | GUI for Behave.")
print("")
def show_caseplans_usage():
c2 = colorama.Fore.BLUE + colorama.Back.LIGHTGREEN_EX
c3 = colorama.Fore.BLUE + colorama.Back.LIGHTYELLOW_EX
cr = colorama.Style.RESET_ALL
sc = " " + c2 + "** " + c3 + "caseplans" + c2 + " **" + cr
print(sc)
print("")
print(" Usage:")
print(" seleniumbase caseplans [OPTIONAL PATH or TEST FILE]")
print(" OR: sbase caseplans [OPTIONAL PATH or TEST FILE]")
print(" Examples:")
print(" sbase caseplans")
print(" sbase caseplans -k agent")
print(" sbase caseplans -m marker2")
print(" sbase caseplans test_suite.py")
print(" sbase caseplans offline_examples/")
print(" Output:")
print(" Launches the SeleniumBase Case Plans Generator.")
print("")
def show_mkdir_usage():
c2 = colorama.Fore.BLUE + colorama.Back.LIGHTGREEN_EX
c3 = colorama.Fore.BLUE + colorama.Back.LIGHTYELLOW_EX
cr = colorama.Style.RESET_ALL
sc = " " + c2 + "** " + c3 + "mkdir" + c2 + " **" + cr
print(sc)
print("")
print(" Usage:")
print(" seleniumbase mkdir [DIRECTORY] [OPTIONS]")
print(" OR: sbase mkdir [DIRECTORY] [OPTIONS]")
print(" Example:")
print(" sbase mkdir ui_tests")
print(" Options:")
print(" -b / --basic (Only config files. No tests added.)")
print(" Output:")
print(" Creates a new folder for running SBase scripts.")
print(" The new folder contains default config files,")
print(" sample tests for helping new users get started,")
print(" and Python boilerplates for setting up customized")
print(" test frameworks.")
print("")
def show_mkfile_usage():
c2 = colorama.Fore.BLUE + colorama.Back.LIGHTGREEN_EX
c3 = colorama.Fore.BLUE + colorama.Back.LIGHTYELLOW_EX
cr = colorama.Style.RESET_ALL
sc = " " + c2 + "** " + c3 + "mkfile" + c2 + " **" + cr
print(sc)
print("")
print(" Usage:")
print(" seleniumbase mkfile [FILE.py] [OPTIONS]")
print(" OR: sbase mkfile [FILE.py] [OPTIONS]")
print(" Example:")
print(" sbase mkfile new_test.py")
print(" Options:")
print(" --uc (UC Mode boilerplate using SB context manager)")
print(" -b / --basic (Basic boilerplate / single-line test)")
print(" -r / --rec (Adds Pdb+ breakpoint for Recorder Mode)")
print(" --url=URL (Makes the test start on a specific page)")
print(" Language Options:")
print(" --en / --English | --zh / --Chinese")
print(" --nl / --Dutch | --fr / --French")
print(" --it / --Italian | --ja / --Japanese")
print(" --ko / --Korean | --pt / --Portuguese")
print(" --ru / --Russian | --es / --Spanish")
print(" Syntax Formats:")
print(" --bc / --basecase (BaseCase class inheritance)")
print(" --pf / --pytest-fixture (sb pytest fixture)")
print(" --cf / --class-fixture (class + sb pytest fixture)")
print(" --cm / --context-manager (SB context manager)")
print(" --dc / --driver-context (DriverContext manager)")
print(" --dm / --driver-manager (Driver manager)")
print(" Output:")
print(" Creates a new SBase test file with boilerplate code.")
print(" If the file already exists, an error is raised.")
print(" By default, uses English with BaseCase inheritance,")
print(" and creates a boilerplate with common SeleniumBase")
print(' methods: "open", "type", "click", "assert_element",')
print(' and "assert_text". If using the basic boilerplate')
print(' option, only the "open" method is included. Only the')
print(" BaseCase format supports Languages or Recorder Mode.")
print(" UC Mode automatically uses English with SB() format.")
print("")
def show_mkrec_usage():
c2 = colorama.Fore.BLUE + colorama.Back.LIGHTGREEN_EX
c3 = colorama.Fore.BLUE + colorama.Back.LIGHTYELLOW_EX
cr = colorama.Style.RESET_ALL
sc = " " + c2 + "** " + c3 + "mkrec" + c2 + " **" + cr
print(sc)
print("")
print(" Usage:")
print(" seleniumbase mkrec [FILE.py] [OPTIONS]")
print(" OR: sbase mkrec [FILE.py] [OPTIONS]")
print(" Examples:")
print(" sbase mkrec new_test.py")
print(" sbase mkrec new_test.py --url=wikipedia.org")
print(" Options:")
print(" --url=URL (Sets the initial start page URL.)")
print(" --edge (Use Edge browser instead of Chrome.)")
print(" --gui / --headed (Use headed mode on Linux.)")
print(" --uc / --undetected (Use undetectable mode.)")
print(" --ee (Use SHIFT + ESC to end the recording.)")
print(" --overwrite (Overwrite file when it exists.)")
print(" --behave (Also output Behave/Gherkin files.)")
print(" Output:")
print(" Creates a new SeleniumBase test using the Recorder.")
print(" If the filename already exists, an error is raised.")
print("")
def show_codegen_usage():
c2 = colorama.Fore.BLUE + colorama.Back.LIGHTGREEN_EX
c3 = colorama.Fore.BLUE + colorama.Back.LIGHTYELLOW_EX
cr = colorama.Style.RESET_ALL
sc = " " + c2 + "** " + c3 + "codegen" + c2 + " **" + cr
print(sc)
print("")
print(" Usage:")
print(" seleniumbase codegen [FILE.py] [OPTIONS]")
print(" OR: sbase codegen [FILE.py] [OPTIONS]")
print(" Examples:")
print(" sbase codegen new_test.py")
print(" sbase codegen new_test.py --url=wikipedia.org")
print(" Options:")
print(" --url=URL (Sets the initial start page URL.)")
print(" --edge (Use Edge browser instead of Chrome.)")
print(" --gui / --headed (Use headed mode on Linux.)")
print(" --uc / --undetected (Use undetectable mode.)")
print(" --ee (Use SHIFT + ESC to end the recording.)")
print(" --overwrite (Overwrite file when it exists.)")
print(" --behave (Also output Behave/Gherkin files.)")
print(" Output:")
print(" Creates a new SeleniumBase test using the Recorder.")
print(" If the filename already exists, an error is raised.")
print("")
def show_recorder_usage():
c2 = colorama.Fore.BLUE + colorama.Back.LIGHTGREEN_EX
c3 = colorama.Fore.BLUE + colorama.Back.LIGHTYELLOW_EX
cr = colorama.Style.RESET_ALL
sc = " " + c2 + "** " + c3 + "recorder" + c2 + " **" + cr
print(sc)
print("")
print(" Usage:")
print(" seleniumbase recorder [OPTIONS]")
print(" OR: sbase recorder [OPTIONS]")
print(" Options:")
print(" --uc / --undetected (Use undetectable mode.)")
print(" --behave (Also output Behave/Gherkin files.)")
print(" Output:")
print(" Launches the SeleniumBase Recorder Desktop App.")
print("")
def show_mkpres_usage():
c2 = colorama.Fore.BLUE + colorama.Back.LIGHTGREEN_EX
c3 = colorama.Fore.BLUE + colorama.Back.LIGHTYELLOW_EX
cr = colorama.Style.RESET_ALL
sc = " " + c2 + "** " + c3 + "mkpres" + c2 + " **" + cr
print(sc)
print("")
print(" Usage:")
print(" seleniumbase mkpres [FILE.py] [LANG]")
print(" OR: sbase mkpres [FILE.py] [LANG]")
print(" Example:")
print(" sbase mkpres new_presentation.py --en")
print(" Language Options:")
print(" --en / --English | --zh / --Chinese")
print(" --nl / --Dutch | --fr / --French")
print(" --it / --Italian | --ja / --Japanese")
print(" --ko / --Korean | --pt / --Portuguese")
print(" --ru / --Russian | --es / --Spanish")
print(" Output:")
print(" Creates a new presentation with 3 example slides.")
print(" If the file already exists, an error is raised.")
print(" By default, the slides are written in English,")
print(' and use "serif" theme with "slide" transition.')
print(" The slides can be used as a basic boilerplate.")
print("")
def show_mkchart_usage():
c2 = colorama.Fore.BLUE + colorama.Back.LIGHTGREEN_EX
c3 = colorama.Fore.BLUE + colorama.Back.LIGHTYELLOW_EX
cr = colorama.Style.RESET_ALL
sc = " " + c2 + "** " + c3 + "mkchart" + c2 + " **" + cr
print(sc)
print("")
print(" Usage:")
print(" seleniumbase mkchart [FILE.py] [LANG]")
print(" OR: sbase mkchart [FILE.py] [LANG]")
print(" Example:")
print(" sbase mkchart new_chart.py --en")
print(" Language Options:")
print(" --en / --English | --zh / --Chinese")
print(" --nl / --Dutch | --fr / --French")
print(" --it / --Italian | --ja / --Japanese")
print(" --ko / --Korean | --pt / --Portuguese")
print(" --ru / --Russian | --es / --Spanish")
print(" Output:")
print(" Creates a new SeleniumBase chart presentation.")
print(" If the file already exists, an error is raised.")
print(" By default, the slides are written in English,")
print(' and use a "sky" theme with "slide" transition.')
print(" The chart can be used as a basic boilerplate.")
print("")
def show_convert_usage():
c2 = colorama.Fore.BLUE + colorama.Back.LIGHTGREEN_EX
c3 = colorama.Fore.BLUE + colorama.Back.LIGHTYELLOW_EX
cr = colorama.Style.RESET_ALL
sc = " " + c2 + "** " + c3 + "convert" + c2 + " **" + cr
print(sc)
print("")
print(" Usage:")
print(" seleniumbase convert [WEBDRIVER_UNITTEST_FILE.py]")
print(" OR: sbase convert [WEBDRIVER_UNITTEST_FILE.py]")
print(" Output:")
print(" Converts a Selenium IDE exported WebDriver unittest")
print(" file into a SeleniumBase file. Adds _SB to the new")
print(" file name while keeping the original file intact.")
print(" (Works with Katalon Recorder Selenium scripts.)")
print("")
def show_print_usage():
c2 = colorama.Fore.BLUE + colorama.Back.LIGHTGREEN_EX
c3 = colorama.Fore.BLUE + colorama.Back.LIGHTYELLOW_EX
cr = colorama.Style.RESET_ALL
sc = " " + c2 + "** " + c3 + "print" + c2 + " **" + cr
print(sc)
print("")
print(" Usage:")
print(" seleniumbase print [FILE] [OPTIONS]")
print(" OR: sbase print [FILE] [OPTIONS]")
print(" Options:")
print(" -n (Add line Numbers to the rows)")
print(" Output:")
print(" Prints the code/text of any file")
print(" with syntax-highlighting.")
print("")
def show_translate_usage():
c2 = colorama.Fore.BLUE + colorama.Back.LIGHTGREEN_EX
c3 = colorama.Fore.BLUE + colorama.Back.LIGHTYELLOW_EX
cr = colorama.Style.RESET_ALL
sc = " " + c2 + "** " + c3 + "translate" + c2 + " **" + cr
print(sc)
print("")
print(" Usage:")
print(" seleniumbase translate [SB_FILE.py] [LANG] [ACTION]")
print(" OR: sbase translate [SB_FILE.py] [LANG] [ACTION]")
print(" Languages:")
print(" --en / --English | --zh / --Chinese")
print(" --nl / --Dutch | --fr / --French")
print(" --it / --Italian | --ja / --Japanese")
print(" --ko / --Korean | --pt / --Portuguese")
print(" --ru / --Russian | --es / --Spanish")
print(" Actions:")
print(" -p / --print (Print translation output to the screen)")
print(" -o / --overwrite (Overwrite the file being translated)")
print(" -c / --copy (Copy the translation to a new .py file)")
print(" Options:")
print(" -n (include line Numbers when using the Print action)")
print(" Output:")
print(" Translates a SeleniumBase Python file into the language")
print(' specified. Method calls and "import" lines get swapped.')
print(" Both a language and an action must be specified.")
print(' The "-p" action can be paired with one other action.')
print(' When running with "-c" (or "--copy"), the new file name')
print(" will be the original name appended with an underscore")
print(" plus the 2-letter language code of the new language.")
print(' (Example: Translating "test_1.py" into Japanese with')
print(' "-c" will create a new file called "test_1_ja.py".)')
print("")
def show_extract_objects_usage():
c2 = colorama.Fore.BLUE + colorama.Back.LIGHTGREEN_EX
c3 = colorama.Fore.BLUE + colorama.Back.LIGHTYELLOW_EX
cr = colorama.Style.RESET_ALL
sc = " " + c2 + "** " + c3 + "extract-objects" + c2 + " **" + cr
print(sc)
print("")
print(" Usage:")
print(" seleniumbase extract-objects [SB_FILE.py]")
print(" OR: sbase extract-objects [SB_FILE.py]")
print(" Output:")
print(" Creates page objects based on selectors found in a")
print(" seleniumbase Python file and saves those objects to the")
print(' "page_objects.py" file in the same folder as the tests.')
print("")
def show_inject_objects_usage():
c2 = colorama.Fore.BLUE + colorama.Back.LIGHTGREEN_EX
c3 = colorama.Fore.BLUE + colorama.Back.LIGHTYELLOW_EX
cr = colorama.Style.RESET_ALL
sc = " " + c2 + "** " + c3 + "inject-objects" + c2 + " **" + cr
print(sc)
print("")
print(" Usage:")
print(" seleniumbase inject-objects [SB_FILE.py] [OPTIONS]")
print(" OR: sbase inject-objects [SB_FILE.py] [OPTIONS]")
print(" Options:")
print(" -c, --comments (Add object selectors to the comments.)")
print(" (Default: No added comments.)")
print(" Output:")
print(' Takes the page objects found in the "page_objects.py"')
print(" file and uses those to replace matching selectors in")
print(" the selected seleniumbase Python file.")
print("")
def show_objectify_usage():
c2 = colorama.Fore.BLUE + colorama.Back.LIGHTGREEN_EX
c3 = colorama.Fore.BLUE + colorama.Back.LIGHTYELLOW_EX
cr = colorama.Style.RESET_ALL
sc = " " + c2 + "** " + c3 + "objectify" + c2 + " **" + cr
print(sc)
print("")
print(" Usage:")
print(" seleniumbase objectify [SB_FILE.py] [OPTIONS]")
print(" OR: sbase objectify [SB_FILE.py] [OPTIONS]")
print(" Options:")
print(" -c, --comments (Add object selectors to the comments.)")
print(" (Default: No added comments.)")
print(" Output:")
print(" A modified version of the file where the selectors")
print(" have been replaced with variable names defined in")
print(' "page_objects.py", supporting the Page Object Pattern.')
print("")
print(' (seleniumbase "objectify" has the same outcome as')
print(' combining "extract-objects" with "inject-objects")')
print("")
def show_revert_objects_usage():
c2 = colorama.Fore.BLUE + colorama.Back.LIGHTGREEN_EX
c3 = colorama.Fore.BLUE + colorama.Back.LIGHTYELLOW_EX
cr = colorama.Style.RESET_ALL
sc = " " + c2 + "** " + c3 + "revert-objects" + c2 + " **" + cr
print(sc)
print("")
print(" Usage:")
print(" seleniumbase revert-objects [SB_FILE.py] [OPTIONS]")
print(" OR: sbase revert-objects [SB_FILE.py] [OPTIONS]")
print(" Options:")
print(" -c, --comments (Keep existing comments for the lines.)")
print(" (Default: No comments are kept.)")
print(" Output:")
print(' Reverts the changes made by "seleniumbase objectify" or')
print(' "seleniumbase inject-objects" when run against a')
print(" seleniumbase Python file. Objects will get replaced by")
print(' selectors stored in the "page_objects.py" file.')
print("")
def show_encrypt_usage():
c2 = colorama.Fore.BLUE + colorama.Back.LIGHTGREEN_EX
c3 = colorama.Fore.BLUE + colorama.Back.LIGHTYELLOW_EX
cr = colorama.Style.RESET_ALL
sc = " " + c2 + "** " + c3 + "encrypt OR obfuscate" + c2 + " **" + cr
print(sc)
print("")
print(" Usage:")
print(" seleniumbase encrypt || seleniumbase obfuscate")
print(" --OR--")
print(" sbase encrypt || sbase obfuscate")
print(" Output:")
print(" Runs the password encryption/obfuscation tool.")
print(" (Where you can enter a password to encrypt/obfuscate.)")
print("")
def show_decrypt_usage():
c2 = colorama.Fore.BLUE + colorama.Back.LIGHTGREEN_EX
c3 = colorama.Fore.BLUE + colorama.Back.LIGHTYELLOW_EX
cr = colorama.Style.RESET_ALL
sc = " " + c2 + "** " + c3 + "decrypt OR unobfuscate" + c2 + " **" + cr
print(sc)
print("")
print(" Usage:")
print(" seleniumbase decrypt || seleniumbase unobfuscate")
print(" --OR--")
print(" sbase decrypt || sbase unobfuscate")
print(" Output:")
print(" Runs the password decryption/unobfuscation tool.")
print(" (Where you can enter an encrypted password to decrypt.)")
print("")
def show_download_usage():
c2 = colorama.Fore.BLUE + colorama.Back.LIGHTGREEN_EX
c3 = colorama.Fore.BLUE + colorama.Back.LIGHTYELLOW_EX
cr = colorama.Style.RESET_ALL
sc = " " + c2 + "** " + c3 + "download" + c2 + " **" + cr
print(sc)
print("")
print(" Usage:")
print(" seleniumbase download server")
print(" OR: sbase download server")
print(" Output:")
print(" Downloads the Selenium Standalone Server.")
print(" (Server is required for using your own Selenium Grid.)")
print("")
def show_grid_hub_usage():
c2 = colorama.Fore.BLUE + colorama.Back.LIGHTGREEN_EX
c3 = colorama.Fore.BLUE + colorama.Back.LIGHTYELLOW_EX
cr = colorama.Style.RESET_ALL
sc = " " + c2 + "** " + c3 + "grid-hub" + c2 + " **" + cr
print(sc)
print("")
print(" Usage:")
print(" seleniumbase grid-hub {start|stop|restart} [OPTIONS]")
print(" OR: sbase grid-hub {start|stop|restart} [OPTIONS]")
print(" Options:")
print(" -v, --verbose (Increase verbosity of logging output.)")
print(" (Default: Quiet logging / not verbose.)")
print(" --timeout=TIMEOUT (Close idle browser after TIMEOUT.)")
print(" (The default TIMEOUT: 230 seconds.)")
print(" (Use --timeout=0 to skip timeouts.)")
print(" Example:")
print(" seleniumbase grid-hub start")
print(" Output:")
print(" Controls the Selenium Grid Hub Server, which allows")
print(" for running tests on multiple machines in parallel")
print(" to speed up test runs and reduce the total time")
print(" of test suite execution.")
print(' You can "start" or "stop" the Grid Hub server.')
print("")
def show_grid_node_usage():
c2 = colorama.Fore.BLUE + colorama.Back.LIGHTGREEN_EX
c3 = colorama.Fore.BLUE + colorama.Back.LIGHTYELLOW_EX
cr = colorama.Style.RESET_ALL
sc = " " + c2 + "** " + c3 + "grid-node" + c2 + " **" + cr
print(sc)
print("")
print(" Usage:")
print(" seleniumbase grid-node {start|stop|restart} [OPTIONS]")
print(" OR: sbase grid-node {start|stop|restart} [OPTIONS]")
print(" Options:")
print(" --hub=[HOST/IP] (The Grid Hub Hostname / IP Address.)")
print(" (Default: 127.0.0.1 if not set.)")
print(" -v, --verbose (Increase verbosity of logging output.)")
print(" (Default: Quiet logging / Not verbose.)")
print(" Example:")
print(" seleniumbase grid-node start --hub=127.0.0.1")
print(" Output:")
print(" Controls the Selenium Grid node, which serves as a")
print(" worker machine for your Selenium Grid Hub server.")
print(' You can "start" or "stop" the Grid node.')
print("")
def get_version_info():
# from pkg_resources import get_distribution
# version = get_distribution("seleniumbase").version
from seleniumbase import __version__
version_info = None
c1 = colorama.Fore.BLUE + colorama.Back.LIGHTCYAN_EX
c2 = colorama.Fore.BLUE + colorama.Back.LIGHTGREEN_EX
c3 = colorama.Fore.BLUE + colorama.Back.LIGHTYELLOW_EX
cr = colorama.Style.RESET_ALL
sb_text = c1 + "selenium" + c2 + "base" + cr
version_info = "%s %s%s%s" % (sb_text, c3, __version__, cr)
return version_info
def show_version_info():
version_info = get_version_info()
print("%s" % version_info)
def get_package_location():
# from pkg_resources import get_distribution
# location = get_distribution("seleniumbase").location
import os
import seleniumbase
location = os.path.dirname(os.path.realpath(seleniumbase.__file__))
if location.endswith("seleniumbase"):
location = location[0 : -len("seleniumbase")] # noqa: E203
return location
def show_package_location():
location = get_package_location()
print("%s" % location)
def show_methods():
c1 = colorama.Fore.BLUE + colorama.Back.LIGHTCYAN_EX
c2 = colorama.Fore.BLUE + colorama.Back.LIGHTGREEN_EX
c3 = colorama.Fore.BLUE + colorama.Back.LIGHTYELLOW_EX
c4 = colorama.Fore.MAGENTA + colorama.Back.LIGHTYELLOW_EX
c5 = colorama.Fore.LIGHTRED_EX + colorama.Back.LIGHTGREEN_EX
cr = colorama.Style.RESET_ALL
sc = (
"\n " + c2 + " ** " + c3 + " SeleniumBase Python Methods "
"" + c2 + " ** " + cr
)
print(sc)
print("")
line = "Here are some common methods that come with SeleniumBase:"
line = c1 + line + cr
print(line)
line = "(Some optional args are not shown here)"
print(line)
print("")
sbm = ""
sbm += "*.open(url) => Navigate the browser window to the URL.\n"
sbm += "*.type(selector, text) => Update the field with the text.\n"
sbm += "*.click(selector) => Click the element with the selector.\n"
sbm += "*.click_link(link_text) => Click the link containing text.\n"
sbm += "*.check_if_unchecked(selector) => Check checkbox if unchecked.\n"
sbm += "*.uncheck_if_checked(selector) => Uncheck checkbox if checked.\n"
sbm += "*.select_option_by_text(dropdown_selector, option)\n"
sbm += "*.hover_and_click(hover_selector, click_selector)\n"
sbm += "*.drag_and_drop(drag_selector, drop_selector)\n"
sbm += "*.choose_file(selector, file_path) => Choose a file to upload.\n"
sbm += "*.get_text(selector) => Get the text from the element.\n"
sbm += "*.get_current_url() => Get the URL of the current page.\n"
sbm += "*.get_page_source() => Get the HTML of the current page.\n"
sbm += "*.get_attribute(selector, attribute) => Get element attribute.\n"
sbm += "*.get_title() => Get the title of the current page.\n"
sbm += "*.go_back() => Navigate to the previous page in history.\n"
sbm += "*.switch_to_frame(frame) => Switch into the iframe container.\n"
sbm += "*.switch_to_default_content() => Exit all iframe containers.\n"
sbm += "*.switch_to_parent_frame() => Exit from the current iframe.\n"
sbm += "*.open_new_window() => Open a new window in the same browser.\n"
sbm += "*.switch_to_window(window) => Switch to the browser window.\n"
sbm += "*.switch_to_default_window() => Switch to the original window.\n"
sbm += "*.get_new_driver(OPTIONS) => Open a new driver with OPTIONS.\n"
sbm += "*.switch_to_driver(driver) => Switch to the browser driver.\n"
sbm += "*.switch_to_default_driver() => Switch to the original driver.\n"
sbm += "*.wait_for_element(selector) => Wait until element is visible.\n"
sbm += "*.wait_for_element_present(selector) => Until element in HTML.\n"
sbm += "*.is_element_visible(selector) => Return element visibility.\n"
sbm += "*.is_element_present(selector) => Return element is in HTML.\n"
sbm += "*.is_text_visible(text, selector) => Return text visibility.\n"
sbm += "*.is_checked(selector) => Return whether the box is checked.\n"
sbm += "*.sleep(seconds) => Do nothing for the given amount of time.\n"
sbm += "*.save_screenshot(name) => Save a screenshot in .png format.\n"
sbm += "*.assert_element(selector) => Verify the element is visible.\n"
sbm += "*.assert_text(text, selector) => Verify text in the element.\n"
sbm += "*.assert_exact_text(text, selector) => Verify text is exact.\n"
sbm += "*.assert_url(url) => Verify that the current URL is the URL.\n"
sbm += "*.assert_url_contains(substring) => Verify substring in URL.\n"
sbm += "*.assert_title(title) => Verify the title of the web page.\n"
sbm += "*.assert_title_contains(substring) => Verify STR in title.\n"
sbm += "*.assert_downloaded_file(file) => Verify file was downloaded.\n"
sbm += "*.assert_no_404_errors() => Verify there are no broken links.\n"
sbm += "*.assert_no_js_errors() => Verify there are no JS errors.\n"
sbm = sbm.replace("*.", "self." + c1).replace("(", cr + "(")
sbm = sbm.replace("self.", c2 + "self" + c5 + "." + cr)
sbm = sbm.replace("(", c3 + "(" + c4)
sbm = sbm.replace(")", c3 + ")" + cr)
print(sbm)
def show_options():
c1 = colorama.Fore.BLUE + colorama.Back.LIGHTCYAN_EX
c2 = colorama.Fore.BLUE + colorama.Back.LIGHTGREEN_EX
c3 = colorama.Fore.BLUE + colorama.Back.LIGHTYELLOW_EX
c4 = colorama.Fore.MAGENTA + colorama.Back.LIGHTYELLOW_EX
c5 = colorama.Fore.RED + colorama.Back.LIGHTYELLOW_EX
cr = colorama.Style.RESET_ALL
sc = "\n " + c2 + " ** " + c3 + " pytest CLI Options " + c2 + " ** " + cr
print(sc)
print("")
line = "Here are some common pytest options to use with SeleniumBase:"
line = c1 + line + cr
print(line)
line = '(Some options are Chromium-specific, e.g. "--guest --mobile")'
print(line)
op = "\n"
op += '--browser=BROWSER (Choice of web browser. Default is "chrome")\n'
op += "--edge / --firefox / --safari (Shortcut for browser selection)\n"
op += "--headless (Run tests headlessly. Default setting on Linux OS)\n"
op += "--demo (Slow down and visually see test actions as they occur)\n"
op += "--slow (Slow down the automation. Faster than using Demo Mode)\n"
op += "--rs / --reuse-session (Reuse browser session between tests.)\n"
op += "--reuse-class-session / --rcs (RS, but for class tests only.)\n"
op += "--crumbs (Clear all cookies between tests reusing a session.)\n"
op += "--maximize (Start tests with the browser window maximized)\n"
op += "--dashboard (Enable SeleniumBase Dashboard at dashboard.html)\n"
op += "--incognito (Enable Chromium's Incognito Mode.)\n"
op += "--guest (Enable Chromium's Guest Mode.)\n"
op += "--dark (Enable Chromium's Dark Mode.)\n"
op += "--uc (Use undetected-chromedriver to evade detection.)\n"
op += "-m=MARKER (Run tests with the specified pytest marker.)\n"
op += "-n=NUM (Multithread the tests using that many threads.)\n"
op += "-v (Verbose mode. Print the full names of each test run.)\n"
op += "--html=report.html (Create a detailed pytest-html report.)\n"
op += "--collect-only / --co (Only show discovered tests. No run.)\n"
op += "--co -q (Only show full names of discovered tests. No run.)\n"
op += "-x (Stop running tests after the first failure is reached.)\n"
op += "--pdb (Enter Post Mortem Debug Mode after any test fails.)\n"
op += "--trace (Enter Debug Mode immediately after starting tests.)\n"
op += " | Debug Mode Commands >>> help / h: List all commands. |\n"
op += " | n: Next line of method. s: Step into. c: Continue. |\n"
op += " | where / w: Show stack spot. u: Up stack. d: Down stack. |\n"
op += " | return / r: Run until method returns. j: Jump to line. |\n"
op += " | longlist / ll: See code. dir(): List namespace objects. |\n"
op += "--help / -h (Display list of all available pytest options.)\n"
op += "--ftrace / --final-trace (Enter Debug Mode after tests end.)\n"
op += "--recorder / --rec (Save browser actions as Python scripts.)\n"
op += "--rec-behave / --rec-gherkin (Save actions as Gherkin code.)\n"
op += "--rec-print (Display recorded scripts when they are created.)\n"
op += "--save-screenshot (Save a screenshot at the end of each test.)\n"
op += "--archive-logs (Archive logs after tests to prevent deletion.)\n"
op += "--check-js (Check for JavaScript errors after page loads.)\n"
op += "--start-page=URL (The browser start page when tests begin.)\n"
op += "--agent=STRING (Modify the web browser's User-Agent string.)\n"
op += "--mobile (Use Chromium's mobile device emulator during tests.)\n"
op += '--metrics=STRING (Set mobile "CSSWidth,CSSHeight,PixelRatio".)\n'
op += "--ad-block (Block certain types of iframe ads from appearing.)\n"
op += "--settings-file=FILE (Override default SeleniumBase settings.)\n"
op += '--env=ENV (Set the test env. Use "self.env" to access.)\n'
op += '--data=DATA (Extra test data. Use "self.data" to access.)\n'
op += "--disable-csp (Disable the Content Security Policy of sites.)\n"
op += "--remote-debug (Sync to Ch_Debugger chrome://inspect/#devices)\n"
op += "--server=SERVER (The Selenium Grid server/IP used for tests.)\n"
op += "--port=PORT (The Selenium Grid port used by the test server.)\n"
op += "--proxy=SERVER:PORT (Connect to a proxy server:port for tests)\n"
op += "--proxy=USER:PASS@SERVER:PORT (Use authenticated proxy server)\n"
op += cr
op = op.replace("\n-", "\n" + c1 + "-").replace(" (", cr + " (")
op = op.replace(" / -", cr + " / " + c1 + "-")
op = op.replace("=", c2 + "=" + c3)
op = op.replace(" | ", " |" + c3 + " ").replace("|\n", cr + "|\n")
op = op.replace(": ", c5 + ":" + c3 + " ")
op = op.replace("Debug Mode Commands", c5 + "Debug Mode Commands" + c3)
op = op.replace(">>>", c4 + ">>>" + c3)
print(op)
line = "To view all " + c3 + "pytest" + cr
line += " " + c2 + "command-line options" + cr
line += ', type: "' + c3 + "pytest" + cr + " " + c1 + "--help" + cr + '".'
print(line)
print("")
def show_behave_options():
c1 = colorama.Fore.BLUE + colorama.Back.LIGHTCYAN_EX
c2 = colorama.Fore.BLUE + colorama.Back.LIGHTGREEN_EX
c3 = colorama.Fore.BLUE + colorama.Back.LIGHTYELLOW_EX
c4 = colorama.Fore.MAGENTA + colorama.Back.LIGHTYELLOW_EX
c5 = colorama.Fore.RED + colorama.Back.LIGHTYELLOW_EX
cr = colorama.Style.RESET_ALL
sc = "\n " + c2 + " ** " + c3 + " Behave CLI Options " + c2 + " ** " + cr
print(sc)
print("")
line = 'Here are some common "behave" options to use with SeleniumBase:'
line = c1 + line + cr
print(line)
line = '(Some options are Chromium-specific, e.g. "-D guest -D mobile")'
print(line)
op = "\n"
op += '-D browser=BROWSER (Choice of web browser. Default is "chrome")\n'
op += "-D headless (Run tests headlessly. Default mode on Linux OS.)\n"
op += "-D demo (Slow down and visually see test actions as they occur)\n"
op += "-D slow (Slow down the automation. Faster than using Demo Mode)\n"
op += "-D reuse-session / -D rs (Reuse browser session between tests.)\n"
op += "-D crumbs (Clear all cookies between tests reusing a session.)\n"
op += "-D maximize (Start tests with the web browser window maximized)\n"
op += "-D dashboard (Enable SeleniumBase Dashboard at dashboard.html)\n"
op += "-D incognito (Enable Chromium's Incognito Mode.)\n"
op += "-D guest (Enable Chromium's Guest Mode.)\n"
op += "-D dark (Enable Chromium's Dark Mode.)\n"
op += "-D uc (Use undetected-chromedriver to evade detection.)\n"
op += "--no-snippets / -q (Quiet mode. Don't print snippets.)\n"
op += "--dry-run / -d (Dry run. Only show discovered tests.)\n"
op += "--stop (Stop running tests after the first failure is reached.)\n"
op += "-D pdb (Enter the Post Mortem Debug Mode after any test fails.)\n"
op += " | Debug Mode Commands >>> help / h: List all commands. |\n"
op += " | n: Next line of method. s: Step through. c: Continue. |\n"
op += " | return / r: Run until method returns. j: Jump to line. |\n"
op += " | where / w: Show stack spot. u: Up stack. d: Down stack. |\n"
op += " | longlist / ll: See code. dir(): List namespace objects. |\n"
op += "-D recorder (Record browser actions to generate test scripts.)\n"
op += "-D rec-print (Display recorded scripts when they are created.)\n"
op += "-D save-screenshot (Save a screenshot at the end of each test.)\n"
op += "-D archive-logs (Archive log files instead of deleting them.)\n"
op += "-D check-js (Check for JavaScript errors after page loads.)\n"
op += "-D start-page=URL (The browser start page when tests begin.)\n"
op += "-D agent=STRING (Modify the web browser's User-Agent string.)\n"
op += "-D mobile (Use Chromium's mobile device emulator during tests.)\n"
op += '-D metrics=STRING (Set mobile "CSSWidth,CSSHeight,PixelRatio".)\n'
op += "-D ad-block (Block some types of display ads after page loads.)\n"
op += "-D settings-file=FILE (Override default SeleniumBase settings.)\n"
op += '-D env=ENV (Set the test env. Access using "self.env" in tests)\n'
op += '-D data=DATA (Extra test data. Access using "self.data".)\n'
op += "-D disable-csp (Disable the Content Security Policy of sites.)\n"
op += "-D remote-debug (Sync Ch-R-Debugger chrome://inspect/#devices)\n"
op += "-D server=SERVER (The Selenium Grid server/IP used for tests.)\n"
op += "-D port=PORT (The Selenium Grid port used by the test server.)\n"
op += "-D proxy=SERVER:PORT (Connect to a proxy server:port for tests)\n"
op += "-D proxy=USER:PASS@SERVER:PORT (Use authenticated proxy server)\n"
op += cr
op = op.replace("\n-", "\n" + c1 + "-").replace(" (", cr + " (")
op = op.replace(" / -", cr + " / " + c1 + "-")
op = op.replace("=", c2 + "=" + c3)
op = op.replace(" | ", " |" + c3 + " ").replace("|\n", cr + "|\n")
op = op.replace(": ", c5 + ":" + c3 + " ")
op = op.replace("Debug Mode Commands", c5 + "Debug Mode Commands" + c3)
op = op.replace(">>>", c4 + ">>>" + c3)
print(op)
line = "For the full list of " + c2 + "command-line options" + cr
line += ', type: "' + c3 + "behave" + cr + " " + c1 + "--help" + cr + '".'
print(line)
print("")
def show_detailed_help():
c2 = colorama.Fore.BLUE + colorama.Back.LIGHTGREEN_EX
c3 = colorama.Fore.BLUE + colorama.Back.LIGHTYELLOW_EX
c6 = colorama.Back.CYAN
cr = colorama.Style.RESET_ALL
show_basic_usage()
print(c6 + " " + c2 + " Commands: " + c6 + " ")
print(cr)
show_install_usage()
show_commander_usage()
show_behave_gui_usage()
show_caseplans_usage()
show_mkdir_usage()
show_mkfile_usage()
show_mkrec_usage()
show_codegen_usage()
show_recorder_usage()
show_mkpres_usage()
show_mkchart_usage()
show_convert_usage()
show_print_usage()
show_translate_usage()
show_extract_objects_usage()
show_inject_objects_usage()
show_objectify_usage()
show_revert_objects_usage()
show_encrypt_usage()
show_decrypt_usage()
show_download_usage()
show_grid_hub_usage()
show_grid_node_usage()
print(
'* (Use "' + c3 + "pytest" + cr + '" or "' + c3 + ''
'' + "python" + cr + '" for running tests) *\n'
)
def main():
command = None
command_args = None
num_args = len(sys.argv)
if num_args == 1:
show_basic_usage()
return
elif num_args == 2:
command = sys.argv[1]
command_args = []
elif num_args > 2:
command = sys.argv[1]
command_args = sys.argv[2:]
command = command.lower()
if command == "get" or command == "install":
if len(command_args) >= 1:
from seleniumbase.console_scripts import sb_install
need_retry = False
need_another_retry = False
retry_msg_1 = "* Unable to download driver! Retrying in 3s..."
retry_msg_2 = "** Unable to download driver! Retrying in 5s..."
if " --proxy=" in " ".join(sys.argv):
from seleniumbase.core import proxy_helper
for arg in sys.argv:
if arg.startswith("--proxy="):
proxy_string = arg.split("--proxy=")[1]
if "@" in proxy_string:
proxy_string = proxy_string.split("@")[1]
proxy_helper.validate_proxy_string(proxy_string)
break
try:
settings.HIDE_DRIVER_DOWNLOADS = False
sb_install.main()
except Exception as e:
invalid_run_cmd = constants.Warnings.INVALID_RUN_COMMAND
if invalid_run_cmd in str(e):
raise
print()
print(retry_msg_1)
time.sleep(3)
print()
need_retry = True
if need_retry:
try:
sb_install.main()
except Exception:
print(retry_msg_2)
time.sleep(5)
print()
need_another_retry = True
if need_another_retry:
sb_install.main()
else:
show_basic_usage()
show_install_usage()
elif command == "commander" or command == "gui":
from seleniumbase.console_scripts import sb_commander
sb_commander.main()
elif command == "behave-gui" or command == "gui-behave":
from seleniumbase.console_scripts import sb_behave_gui
sb_behave_gui.main()
elif (
command == "caseplans"
or command == "case-plans"
or command == "case_plans"
):
from seleniumbase.console_scripts import sb_caseplans
sb_caseplans.main()
elif (
command == "recorder"
or (command == "record" and len(command_args) == 0)
):
from seleniumbase.console_scripts import sb_recorder
sb_recorder.main()
elif (
command == "mkrec"
or command == "codegen"
or (command == "record" and len(command_args) >= 1)
):
if len(command_args) >= 1:
from seleniumbase.console_scripts import sb_mkrec
sb_mkrec.main()
else:
show_basic_usage()
if command == "codegen":
show_codegen_usage()
else:
show_mkrec_usage()
elif command == "mkdir":
if len(command_args) >= 1:
from seleniumbase.console_scripts import sb_mkdir
sb_mkdir.main()
else:
show_basic_usage()
show_mkdir_usage()
elif command == "mkfile":
if len(command_args) >= 1:
from seleniumbase.console_scripts import sb_mkfile
sb_mkfile.main()
else:
show_basic_usage()
show_mkfile_usage()
elif command == "mkpres":
if len(command_args) >= 1:
from seleniumbase.console_scripts import sb_mkpres
sb_mkpres.main()
else:
show_basic_usage()
show_mkpres_usage()
elif command == "mkchart":
if len(command_args) >= 1:
from seleniumbase.console_scripts import sb_mkchart
sb_mkchart.main()
else:
show_basic_usage()
show_mkchart_usage()
elif command == "convert":
if len(command_args) == 1:
from seleniumbase.utilities.selenium_ide import convert_ide
convert_ide.main()
else:
show_basic_usage()
show_convert_usage()
elif command == "print":
if len(command_args) >= 1:
from seleniumbase.console_scripts import sb_print
sb_print.main()
else:
show_basic_usage()
show_print_usage()
elif command == "translate":
if len(command_args) >= 1:
if sys.version_info[0] == 2:
c5 = colorama.Fore.RED + colorama.Back.LIGHTYELLOW_EX
cr = colorama.Style.RESET_ALL
msg = "The SeleniumBase Translator does NOT support Python 2!"
message = "\n" + c5 + msg + cr + "\n"
print("")
raise Exception(message)
from seleniumbase.translate import translator
translator.main()
else:
show_basic_usage()
show_translate_usage()
elif command == "extract-objects" or command == "extract_objects":
if len(command_args) >= 1:
from seleniumbase.console_scripts import sb_objectify
sb_objectify.extract_objects()
else:
show_basic_usage()
show_extract_objects_usage()
elif command == "inject-objects" or command == "inject_objects":
if len(command_args) >= 1:
from seleniumbase.console_scripts import sb_objectify
sb_objectify.inject_objects()
else:
show_basic_usage()
show_inject_objects_usage()
elif command == "objectify":
if len(command_args) >= 1:
from seleniumbase.console_scripts import sb_objectify
sb_objectify.objectify()
else:
show_basic_usage()
show_objectify_usage()
elif command == "revert-objects" or command == "revert_objects":
if len(command_args) >= 1:
from seleniumbase.console_scripts import sb_objectify
sb_objectify.revert_objects()
else:
show_basic_usage()
show_revert_objects_usage()
elif command == "encrypt" or command == "obfuscate":
if len(command_args) >= 0:
from seleniumbase.common import obfuscate
obfuscate.main()
else:
show_basic_usage()
show_encrypt_usage()
elif command == "decrypt" or command == "unobfuscate":
if len(command_args) >= 0:
from seleniumbase.common import unobfuscate
unobfuscate.main()
else:
show_basic_usage()
show_decrypt_usage()
elif command == "download":
if len(command_args) >= 1 and command_args[0].lower() == "server":
from seleniumbase.utilities.selenium_grid import (
download_selenium_server,
)
download_selenium_server.main(force_download=True)
else:
show_basic_usage()
show_download_usage()
elif command == "grid-hub" or command == "grid_hub":
if len(command_args) >= 1:
from seleniumbase.utilities.selenium_grid import grid_hub
grid_hub.main()
else:
show_basic_usage()
show_grid_hub_usage()
elif command == "grid-node" or command == "grid_node":
if len(command_args) >= 1:
from seleniumbase.utilities.selenium_grid import grid_node
grid_node.main()
else:
show_basic_usage()
show_grid_node_usage()
elif command == "version" or command == "--version" or command == "-v":
if len(command_args) == 0:
from seleniumbase.console_scripts import logo_helper
seleniumbase_logo = logo_helper.get_seleniumbase_logo()
print(seleniumbase_logo)
print("")
show_package_location()
show_version_info()
print("")
else:
show_basic_usage()
elif command == "methods" or command == "--methods":
show_methods()
elif command == "options" or command == "--options":
show_options()
elif command == "behave-options" or command == "--behave-options":
show_behave_options()
elif command == "proxy" or command == "--proxy":
import fasteners
import os
import warnings
with warnings.catch_warnings():
warnings.simplefilter("ignore", category=UserWarning)
pip_find_lock = fasteners.InterProcessLock(
constants.PipInstall.FINDLOCK
)
with pip_find_lock:
try:
from proxy import proxy # noqa: F401
except Exception:
shared_utils.pip_install(
"proxy.py", version=constants.ProxyPy.VER
)
os.system("proxy %s" % " ".join(sys.argv[2:]))
elif command == "help" or command == "--help" or command == "-h":
if len(command_args) >= 1:
if command_args[0] == "get":
print("")
show_install_usage()
return
elif command_args[0] == "install":
print("")
show_install_usage()
return
elif command_args[0] == "commander":
print("")
show_commander_usage()
return
elif command_args[0] == "gui":
print("")
show_commander_usage()
return
elif command_args[0] == "behave-gui":
print("")
show_behave_gui_usage()
return
elif command_args[0] == "gui-behave":
print("")
show_behave_gui_usage()
return
elif command_args[0] == "caseplans":
print("")
show_caseplans_usage()
return
elif command_args[0] == "case-plans":
print("")
show_caseplans_usage()
return
elif command_args[0] == "case_plans":
print("")
show_caseplans_usage()
return
elif command_args[0] == "mkdir":
print("")
show_mkdir_usage()
return
elif command_args[0] == "mkfile":
print("")
show_mkfile_usage()
return
elif command_args[0] == "mkrec":
print("")
show_mkrec_usage()
return
elif command_args[0] == "codegen":
print("")
show_codegen_usage()
return
elif command_args[0] == "recorder":
print("")
show_recorder_usage()
return
elif command_args[0] == "mkpres":
print("")
show_mkpres_usage()
return
elif command_args[0] == "mkchart":
print("")
show_mkchart_usage()
return
elif command_args[0] == "convert":
print("")
show_convert_usage()
return
elif command_args[0] == "print":
print("")
show_print_usage()
return
elif command_args[0] == "translate":
print("")
show_translate_usage()
return
elif command_args[0] == "extract-objects":
print("")
show_extract_objects_usage()
return
elif command_args[0] == "inject-objects":
print("")
show_inject_objects_usage()
return
elif command_args[0] == "objectify":
print("")
show_objectify_usage()
return
elif command_args[0] == "revert-objects":
print("")
show_revert_objects_usage()
return
elif command_args[0] == "encrypt":
print("")
show_encrypt_usage()
return
elif command_args[0] == "obfuscate":
print("")
show_encrypt_usage()
return
elif command_args[0] == "decrypt":
print("")
show_decrypt_usage()
return
elif command_args[0] == "unobfuscate":
print("")
show_decrypt_usage()
return
elif command_args[0] == "download":
print("")
show_download_usage()
return
elif command_args[0] == "grid-hub":
print("")
show_grid_hub_usage()
return
elif command_args[0] == "grid-node":
print("")
show_grid_node_usage()
return
show_detailed_help()
else:
show_basic_usage()
c5 = colorama.Fore.RED + colorama.Back.LIGHTYELLOW_EX
c7 = colorama.Fore.BLACK + colorama.Back.MAGENTA
cr = colorama.Style.RESET_ALL
invalid_cmd = "===> INVALID COMMAND: >> %s <<\n" % command
invalid_cmd = invalid_cmd.replace(">> ", ">>" + c5 + " ")
invalid_cmd = invalid_cmd.replace(" <<", " " + cr + "<<")
invalid_cmd = invalid_cmd.replace(">>", c7 + ">>" + cr)
invalid_cmd = invalid_cmd.replace("<<", c7 + "<<" + cr)
print(invalid_cmd)
if __name__ == "__main__":
main()