Merge pull request #2045 from seleniumbase/refactor-mkfile-and-uc-mode

Refactor "sbase mkfile" and UC Mode
This commit is contained in:
Michael Mintz 2023-08-31 01:49:55 -04:00 committed by GitHub
commit 771ff23ed0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 53 additions and 36 deletions

View File

@ -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

View File

@ -1,2 +1,2 @@
# seleniumbase package
__version__ = "4.17.13"
__version__ = "4.17.14"

View File

@ -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:

View File

@ -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.")

View File

@ -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,<meta charset='utf-8'><p>%s<br><input>" % hello

View File

@ -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: