diff --git a/mkdocs_build/requirements.txt b/mkdocs_build/requirements.txt index a5badc03..38b338f3 100644 --- a/mkdocs_build/requirements.txt +++ b/mkdocs_build/requirements.txt @@ -3,7 +3,7 @@ regex>=2023.8.8 PyYAML>=6.0.1 -pymdown-extensions>=10.2 +pymdown-extensions>=10.2.1 pipdeptree>=2.13.0 python-dateutil>=2.8.2 Markdown==3.4.4 diff --git a/seleniumbase/__version__.py b/seleniumbase/__version__.py index 379cb173..4b67dc49 100755 --- a/seleniumbase/__version__.py +++ b/seleniumbase/__version__.py @@ -1,2 +1,2 @@ # seleniumbase package -__version__ = "4.17.13" +__version__ = "4.17.14" diff --git a/seleniumbase/console_scripts/ReadMe.md b/seleniumbase/console_scripts/ReadMe.md index 0592ba8b..5b8d1f8f 100644 --- a/seleniumbase/console_scripts/ReadMe.md +++ b/seleniumbase/console_scripts/ReadMe.md @@ -349,8 +349,9 @@ sbase mkfile new_test.py * Options: -``-b`` / ``--basic`` (Basic boilerplate / single-line test) -``-r`` / ``--rec`` (adds Pdb+ breakpoint for Recorder Mode) +`-b` / `--basic` (Basic boilerplate / single-line test) +`-r` / `--rec` (adds Pdb+ breakpoint for Recorder Mode) +``--url=URL`` (makes the test start on a specific page) * Language Options: @@ -362,12 +363,12 @@ sbase mkfile new_test.py * Syntax Formats: -``--bc`` / ``--basecase`` (BaseCase class inheritance) -``--pf`` / ``--pytest-fixture`` (sb pytest fixture) +``--bc`` / ``--basecase`` (BaseCase class inheritance) +``--pf`` / ``--pytest-fixture`` (sb pytest fixture) ``--cf`` / ``--class-fixture`` (class + sb pytest fixture) -``--cm`` / ``--context-manager`` (SB context manager) -``--dc`` / ``--driver-context`` (DriverContext manager) -``--dm`` / ``--driver-manager`` (Driver manager) +``--cm`` / ``--context-manager`` (SB context manager) +``--dc`` / ``--driver-context`` (DriverContext manager) +``--dm`` / ``--driver-manager`` (Driver manager) * Output: diff --git a/seleniumbase/console_scripts/run.py b/seleniumbase/console_scripts/run.py index 314c608e..2a22c666 100644 --- a/seleniumbase/console_scripts/run.py +++ b/seleniumbase/console_scripts/run.py @@ -258,6 +258,7 @@ def show_mkfile_usage(): print(" Options:") 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") @@ -265,12 +266,12 @@ def show_mkfile_usage(): 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(" --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.") diff --git a/seleniumbase/console_scripts/sb_mkfile.py b/seleniumbase/console_scripts/sb_mkfile.py index 08b8ab07..cc47ab4d 100644 --- a/seleniumbase/console_scripts/sb_mkfile.py +++ b/seleniumbase/console_scripts/sb_mkfile.py @@ -11,6 +11,7 @@ Example: Options: -b / --basic (Basic boilerplate / single-line test) -r / --rec (adds Pdb+ breakpoint for Recorder Mode) + --url=URL (makes the test start on a specific page) Language Options: --en / --English | --zh / --Chinese @@ -20,12 +21,12 @@ Language Options: --ru / --Russian | --es / --Spanish Syntax Formats: - --bc / --basecase (BaseCase class inheritance) - --pf / --pytest-fixture (sb pytest fixture) - --cf / --class-fixture (class + sb pytest fixture) - --cm / --context-manager (SB context manager) - --dc / --driver-context (DriverContext manager) - --dm / --driver-manager (Driver manager) + --bc / --basecase (BaseCase class inheritance) + --pf / --pytest-fixture (sb pytest fixture) + --cf / --class-fixture (class + sb pytest fixture) + --cm / --context-manager (SB context manager) + --dc / --driver-context (DriverContext manager) + --dm / --driver-manager (Driver manager) Output: Creates a new SBase test file with boilerplate code. @@ -53,6 +54,7 @@ def invalid_run_command(msg=None): exp += " Options:\n" exp += " -b / --basic (Basic boilerplate / single-line test)\n" exp += " -r / --rec (adds Pdb+ breakpoint for Recorder Mode)\n" + exp += " --url=URL (makes the test start on a specific page)\n" exp += " Language Options:\n" exp += " --en / --English | --zh / --Chinese\n" exp += " --nl / --Dutch | --fr / --French\n" @@ -60,12 +62,12 @@ def invalid_run_command(msg=None): exp += " --ko / --Korean | --pt / --Portuguese\n" exp += " --ru / --Russian | --es / --Spanish\n" exp += " Syntax Formats:\n" - exp += " --bc / --basecase (BaseCase class inheritance)\n" - exp += " --pf / --pytest-fixture (sb pytest fixture)\n" - exp += " --cf / --class-fixture (class + sb pytest fixture)\n" - exp += " --cm / --context-manager (SB context manager)\n" - exp += " --dc / --driver-context (DriverContext manager)\n" - exp += " --dm / --driver-manager (Driver manager)\n" + exp += " --bc / --basecase (BaseCase class inheritance)\n" + exp += " --pf / --pytest-fixture (sb pytest fixture)\n" + exp += " --cf / --class-fixture (class + sb pytest fixture)\n" + exp += " --cm / --context-manager (SB context manager)\n" + exp += " --dc / --driver-context (DriverContext manager)\n" + exp += " --dm / --driver-manager (Driver manager)\n" exp += " Output:\n" exp += " Creates a new SBase test file with boilerplate code.\n" exp += " If the file already exists, an error is raised.\n" @@ -100,6 +102,7 @@ def main(): help_me = False recorder = False error_msg = None + start_page = None invalid_cmd = None syntax = "BaseCase" language = "English" @@ -128,6 +131,15 @@ def main(): option = option.lower() if option == "-h" or option == "--help": help_me = True + elif option.startswith("--url=") and len(option) > 6: + from seleniumbase.fixtures import page_utils + start_page = option.split("--url=")[1] + if not page_utils.is_valid_url(start_page): + if page_utils.is_valid_url("https://" + start_page): + start_page = "https://" + start_page + else: + raise Exception("Invalid URL: %s" % start_page) + basic = True elif option == "-b" or option == "--basic": basic = True elif option == "-r" or option == "--rec": @@ -223,7 +235,9 @@ def main(): goodbye = "AdiĆ³s" class_name = "MiClaseDePrueba" url = "" - if basic: + if start_page: + url = start_page + elif basic: url = "about:blank" elif language not in ["English", "Dutch", "French", "Italian"]: url = "data:text/html,

%s
" % hello diff --git a/seleniumbase/core/browser_launcher.py b/seleniumbase/core/browser_launcher.py index 3145a9cb..c8c84b99 100644 --- a/seleniumbase/core/browser_launcher.py +++ b/seleniumbase/core/browser_launcher.py @@ -247,7 +247,7 @@ def uc_special_open_if_cf(driver, url, proxy_string=None): or has_cf(req_get.text) ): special = True - if status_str == "403": + if status_str == "403" or status_str == "429": time.sleep(0.06) # Forbidden / Blocked! (Wait first!) except Exception: pass @@ -259,9 +259,9 @@ def uc_special_open_if_cf(driver, url, proxy_string=None): driver.switch_to.window(driver.window_handles[-1]) time.sleep(0.02) else: - driver.open(url) # The original one + driver.default_get(url) # The original one else: - driver.open(url) # The original one + driver.default_get(url) # The original one return None @@ -269,10 +269,10 @@ def uc_open(driver, url): if (url.startswith("http:") or url.startswith("https:")): with driver: time.sleep(0.18) - driver.open(url) + driver.default_get(url) time.sleep(0.02) else: - driver.open(url) # The original one + driver.default_get(url) # The original one return None @@ -285,7 +285,7 @@ def uc_open_with_tab(driver, url): driver.switch_to.window(driver.window_handles[-1]) time.sleep(0.02) else: - driver.open(url) # The original one + driver.default_get(url) # The original one return None @@ -297,7 +297,7 @@ def uc_open_with_reconnect(driver, url): driver.close() driver.switch_to.window(driver.window_handles[-1]) else: - driver.open(url) # The original one + driver.default_get(url) # The original one return None @@ -3538,7 +3538,7 @@ def get_local_driver( service_args=["--disable-build-check"], options=chrome_options, ) - driver.open = driver.get # Save copy of original + driver.default_get = driver.get # Save copy of original if uc_activated: driver.get = lambda url: uc_special_open_if_cf( driver, url, proxy_string @@ -3550,6 +3550,7 @@ def get_local_driver( driver.uc_open_with_reconnect = ( lambda url: uc_open_with_reconnect(driver, url) ) + driver.open = driver.get # Shortcut return driver else: # Running headless on Linux (and not using --uc) try: