diff --git a/mkdocs_build/requirements.txt b/mkdocs_build/requirements.txt index da8f86afc3c..6e18547b9d3 100644 --- a/mkdocs_build/requirements.txt +++ b/mkdocs_build/requirements.txt @@ -17,9 +17,9 @@ pathspec==0.12.1 Babel==2.16.0 paginate==0.5.7 lxml==5.3.0 -pyquery==2.0.0 +pyquery==2.0.1 readtime==3.0.0 -mkdocs==1.6.0 +mkdocs==1.6.1 mkdocs-material==9.5.33 mkdocs-exclude-search==0.6.6 mkdocs-simple-hooks==0.1.5 diff --git a/requirements.txt b/requirements.txt index 9b2cb2f7dc7..a83a65fa9ab 100755 --- a/requirements.txt +++ b/requirements.txt @@ -8,7 +8,7 @@ setuptools>=70.2.0;python_version>="3.10" wheel>=0.42.0;python_version<"3.8" wheel>=0.44.0;python_version>="3.8" attrs>=24.2.0 -certifi>=2024.7.4 +certifi>=2024.8.30 exceptiongroup>=1.2.2 filelock>=3.12.2;python_version<"3.8" filelock>=3.15.4;python_version>="3.8" diff --git a/seleniumbase/__version__.py b/seleniumbase/__version__.py index c4a0cc27fb3..f713d164d44 100755 --- a/seleniumbase/__version__.py +++ b/seleniumbase/__version__.py @@ -1,2 +1,2 @@ # seleniumbase package -__version__ = "4.30.0" +__version__ = "4.30.1" diff --git a/seleniumbase/console_scripts/ReadMe.md b/seleniumbase/console_scripts/ReadMe.md index b12476380c3..04dcc5b5911 100644 --- a/seleniumbase/console_scripts/ReadMe.md +++ b/seleniumbase/console_scripts/ReadMe.md @@ -350,9 +350,10 @@ sbase mkfile new_test.py * Options: +``--uc`` (UC Mode boilerplate using SB context manager) `-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) +`-r` / `--rec` (Adds Pdb+ breakpoint for Recorder Mode) +``--url=URL`` (Makes the test start on a specific page) * Language Options: @@ -381,6 +382,7 @@ methods: "open", "type", "click", "assert_element", and "assert_text". If using the basic boilerplate option, only the "open" method is included. Only the BaseCase format supports Languages or Recorder Mode. +UC Mode automatically uses English with SB() format.

mkrec / record / codegen

diff --git a/seleniumbase/console_scripts/run.py b/seleniumbase/console_scripts/run.py index c0edf695f33..870a30616c5 100644 --- a/seleniumbase/console_scripts/run.py +++ b/seleniumbase/console_scripts/run.py @@ -264,9 +264,10 @@ def show_mkfile_usage(): 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(" -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") @@ -289,6 +290,7 @@ def show_mkfile_usage(): 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("") diff --git a/seleniumbase/console_scripts/sb_mkfile.py b/seleniumbase/console_scripts/sb_mkfile.py index cf89421a9ed..6abe7b3704b 100644 --- a/seleniumbase/console_scripts/sb_mkfile.py +++ b/seleniumbase/console_scripts/sb_mkfile.py @@ -9,9 +9,10 @@ sbase mkfile new_test.py Options: + --uc (UC Mode boilerplate using SB context manager) -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) + -r / --rec (Adds Pdb+ breakpoint for Recorder Mode) + --url=URL (Makes the test start on a specific page) Language Options: --en / --English | --zh / --Chinese @@ -37,6 +38,7 @@ and "assert_text". If using the basic boilerplate option, only the "open" method is included. Only the BaseCase format supports Languages or Recorder Mode. + UC Mode automatically uses English with SB() format. """ import codecs import colorama @@ -52,9 +54,10 @@ def invalid_run_command(msg=None): exp += " Example:\n" exp += " sbase mkfile new_test.py\n" exp += " Options:\n" + exp += " --uc (UC Mode boilerplate using SB context manager)\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 += " -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" @@ -77,6 +80,7 @@ def invalid_run_command(msg=None): exp += ' and "assert_text". If using the basic boilerplate\n' exp += ' option, only the "open" method is included. Only the\n' exp += " BaseCase format supports Languages or Recorder Mode.\n" + exp += " UC Mode automatically uses English with SB() format.\n" if not msg: raise Exception("INVALID RUN COMMAND!\n\n%s" % exp) elif msg == "help": @@ -105,6 +109,7 @@ def main(): cr = colorama.Style.RESET_ALL basic = False + use_uc = False help_me = False recorder = False error_msg = None @@ -152,6 +157,9 @@ def main(): recorder = True elif option == "--record" or option == "--recorder": recorder = True + elif use_uc: + # UC must use English & ContextManager formats + continue elif option == "--en" or option == "--english": language = "English" elif option == "--zh" or option == "--chinese": @@ -184,6 +192,11 @@ def main(): syntax = "DriverContext" elif option == "--dm" or option == "--driver-manager": syntax = "DriverManager" + elif option == "--uc": + basic = True + language = "English" + syntax = "ContextManager" + use_uc = True else: invalid_cmd = "\n===> INVALID OPTION: >> %s <<\n" % option invalid_cmd = invalid_cmd.replace(">> ", ">>" + c5 + " ") @@ -319,16 +332,22 @@ def main(): data = [] data.append("from seleniumbase import SB") data.append("") - data.append('with SB(browser="chrome") as sb:') - data.append( - ' sb.open("data:text/html,
Hello
")' - ) + if use_uc: + data.append('with SB(uc=True) as sb:') + else: + data.append('with SB(browser="chrome") as sb:') + if use_uc: + data.append(' url = "%s"' % url) + data.append(" sb.uc_open_with_reconnect(url, 4)") + data.append(" sb.uc_gui_click_captcha()") + else: + data.append(' sb.open("%s")' % url) if not basic: data.append(' sb.type("input", "Goodbye") # selector, text') - data.append(' sb.click("html body > div") # selector') + data.append(' sb.click("html body > p") # selector') data.append(' sb.assert_element("input") # selector') - data.append(' sb.assert_text("Hello", "div") # text, selector') - data.append(' sb.highlight("div") # selector') + data.append(' sb.assert_text("Hello", "p") # text, selector') + data.append(' sb.highlight("p") # selector') data.append(" sb.sleep(0.5) # seconds") data.append("") new_data = data @@ -337,7 +356,14 @@ def main(): data.append("from seleniumbase import DriverContext") data.append("") data.append('with DriverContext(browser="chrome") as driver:') - data.append(' driver.get("data:text/html,

Hello
")') + data.append(' driver.get("%s")' % url) + if not basic: + data.append(' driver.type("input", "Goodbye") # sel, text') + data.append(' driver.click("html body > p") # selector') + data.append(' driver.assert_element("input") # selector') + data.append(' driver.assert_text("Hello", "p") # text, sel') + data.append(' driver.highlight("p") # selector') + data.append(" driver.sleep(0.5) # seconds") data.append("") new_data = data elif language == "English" and syntax == "DriverManager": @@ -346,7 +372,14 @@ def main(): data.append("") data.append('driver = Driver(browser="chrome")') data.append("try:") - data.append(' driver.get("data:text/html,

Hello
")') + data.append(' driver.get("%s")' % url) + if not basic: + data.append(' driver.type("input", "Goodbye") # sel, text') + data.append(' driver.click("html body > p") # selector') + data.append(' driver.assert_element("input") # selector') + data.append(' driver.assert_text("Hello", "p") # text, sel') + data.append(' driver.highlight("p") # selector') + data.append(" driver.sleep(0.5) # seconds") data.append("finally:") data.append(" driver.quit()") data.append("") diff --git a/seleniumbase/core/browser_launcher.py b/seleniumbase/core/browser_launcher.py index 54fbdd7555a..ded68fb9047 100644 --- a/seleniumbase/core/browser_launcher.py +++ b/seleniumbase/core/browser_launcher.py @@ -863,9 +863,9 @@ def _uc_gui_click_captcha( frame = "%s div[style]" % frame elif ( driver.is_element_present('[name*="cf-turnstile-"]') - and driver.is_element_present("div.spacer div[style]") + and driver.is_element_present("div.spacer div") ): - frame = "div.spacer div[style]" + frame = "div.spacer div" elif ( ( driver.is_element_present('[name*="cf-turnstile-"]') @@ -1099,9 +1099,9 @@ def _uc_gui_handle_captcha( frame = '[data-callback="onCaptchaSuccess"]' elif ( driver.is_element_present('[name*="cf-turnstile-"]') - and driver.is_element_present("div.spacer div[style]") + and driver.is_element_present("div.spacer div") ): - frame = "div.spacer div[style]" + frame = "div.spacer div" elif ( ( driver.is_element_present('[name*="cf-turnstile-"]') diff --git a/setup.py b/setup.py index 3b3e1c09276..dbe1eaa1daf 100755 --- a/setup.py +++ b/setup.py @@ -156,7 +156,7 @@ 'wheel>=0.42.0;python_version<"3.8"', 'wheel>=0.44.0;python_version>="3.8"', 'attrs>=24.2.0', - "certifi>=2024.7.4", + "certifi>=2024.8.30", "exceptiongroup>=1.2.2", 'filelock>=3.12.2;python_version<"3.8"', 'filelock>=3.15.4;python_version>="3.8"',