Skip to content

Commit 771ff23

Browse files
authored
Merge pull request #2045 from seleniumbase/refactor-mkfile-and-uc-mode
Refactor "sbase mkfile" and UC Mode
2 parents 473f329 + e2a545c commit 771ff23

File tree

6 files changed

+53
-36
lines changed

6 files changed

+53
-36
lines changed

mkdocs_build/requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
regex>=2023.8.8
55
PyYAML>=6.0.1
6-
pymdown-extensions>=10.2
6+
pymdown-extensions>=10.2.1
77
pipdeptree>=2.13.0
88
python-dateutil>=2.8.2
99
Markdown==3.4.4

seleniumbase/__version__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
# seleniumbase package
2-
__version__ = "4.17.13"
2+
__version__ = "4.17.14"

seleniumbase/console_scripts/ReadMe.md

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -349,8 +349,9 @@ sbase mkfile new_test.py
349349
350350
* Options:
351351
352-
``-b`` / ``--basic`` (Basic boilerplate / single-line test)
353-
``-r`` / ``--rec`` (adds Pdb+ breakpoint for Recorder Mode)
352+
`-b` / `--basic` (Basic boilerplate / single-line test)
353+
`-r` / `--rec` (adds Pdb+ breakpoint for Recorder Mode)
354+
``--url=URL`` (makes the test start on a specific page)
354355
355356
* Language Options:
356357
@@ -362,12 +363,12 @@ sbase mkfile new_test.py
362363
363364
* Syntax Formats:
364365
365-
``--bc`` / ``--basecase`` (BaseCase class inheritance)
366-
``--pf`` / ``--pytest-fixture`` (sb pytest fixture)
366+
``--bc`` / ``--basecase`` (BaseCase class inheritance)
367+
``--pf`` / ``--pytest-fixture`` (sb pytest fixture)
367368
``--cf`` / ``--class-fixture`` (class + sb pytest fixture)
368-
``--cm`` / ``--context-manager`` (SB context manager)
369-
``--dc`` / ``--driver-context`` (DriverContext manager)
370-
``--dm`` / ``--driver-manager`` (Driver manager)
369+
``--cm`` / ``--context-manager`` (SB context manager)
370+
``--dc`` / ``--driver-context`` (DriverContext manager)
371+
``--dm`` / ``--driver-manager`` (Driver manager)
371372
372373
* Output:
373374

seleniumbase/console_scripts/run.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -258,19 +258,20 @@ def show_mkfile_usage():
258258
print(" Options:")
259259
print(" -b / --basic (Basic boilerplate / single-line test)")
260260
print(" -r / --rec (adds Pdb+ breakpoint for Recorder Mode)")
261+
print(" --url=URL (makes the test start on a specific page)")
261262
print(" Language Options:")
262263
print(" --en / --English | --zh / --Chinese")
263264
print(" --nl / --Dutch | --fr / --French")
264265
print(" --it / --Italian | --ja / --Japanese")
265266
print(" --ko / --Korean | --pt / --Portuguese")
266267
print(" --ru / --Russian | --es / --Spanish")
267268
print(" Syntax Formats:")
268-
print(" --bc / --basecase (BaseCase class inheritance)")
269-
print(" --pf / --pytest-fixture (sb pytest fixture)")
270-
print(" --cf / --class-fixture (class + sb pytest fixture)")
271-
print(" --cm / --context-manager (SB context manager)")
272-
print(" --dc / --driver-context (DriverContext manager)")
273-
print(" --dm / --driver-manager (Driver manager)")
269+
print(" --bc / --basecase (BaseCase class inheritance)")
270+
print(" --pf / --pytest-fixture (sb pytest fixture)")
271+
print(" --cf / --class-fixture (class + sb pytest fixture)")
272+
print(" --cm / --context-manager (SB context manager)")
273+
print(" --dc / --driver-context (DriverContext manager)")
274+
print(" --dm / --driver-manager (Driver manager)")
274275
print(" Output:")
275276
print(" Creates a new SBase test file with boilerplate code.")
276277
print(" If the file already exists, an error is raised.")

seleniumbase/console_scripts/sb_mkfile.py

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
Options:
1212
-b / --basic (Basic boilerplate / single-line test)
1313
-r / --rec (adds Pdb+ breakpoint for Recorder Mode)
14+
--url=URL (makes the test start on a specific page)
1415
1516
Language Options:
1617
--en / --English | --zh / --Chinese
@@ -20,12 +21,12 @@
2021
--ru / --Russian | --es / --Spanish
2122
2223
Syntax Formats:
23-
--bc / --basecase (BaseCase class inheritance)
24-
--pf / --pytest-fixture (sb pytest fixture)
25-
--cf / --class-fixture (class + sb pytest fixture)
26-
--cm / --context-manager (SB context manager)
27-
--dc / --driver-context (DriverContext manager)
28-
--dm / --driver-manager (Driver manager)
24+
--bc / --basecase (BaseCase class inheritance)
25+
--pf / --pytest-fixture (sb pytest fixture)
26+
--cf / --class-fixture (class + sb pytest fixture)
27+
--cm / --context-manager (SB context manager)
28+
--dc / --driver-context (DriverContext manager)
29+
--dm / --driver-manager (Driver manager)
2930
3031
Output:
3132
Creates a new SBase test file with boilerplate code.
@@ -53,19 +54,20 @@ def invalid_run_command(msg=None):
5354
exp += " Options:\n"
5455
exp += " -b / --basic (Basic boilerplate / single-line test)\n"
5556
exp += " -r / --rec (adds Pdb+ breakpoint for Recorder Mode)\n"
57+
exp += " --url=URL (makes the test start on a specific page)\n"
5658
exp += " Language Options:\n"
5759
exp += " --en / --English | --zh / --Chinese\n"
5860
exp += " --nl / --Dutch | --fr / --French\n"
5961
exp += " --it / --Italian | --ja / --Japanese\n"
6062
exp += " --ko / --Korean | --pt / --Portuguese\n"
6163
exp += " --ru / --Russian | --es / --Spanish\n"
6264
exp += " Syntax Formats:\n"
63-
exp += " --bc / --basecase (BaseCase class inheritance)\n"
64-
exp += " --pf / --pytest-fixture (sb pytest fixture)\n"
65-
exp += " --cf / --class-fixture (class + sb pytest fixture)\n"
66-
exp += " --cm / --context-manager (SB context manager)\n"
67-
exp += " --dc / --driver-context (DriverContext manager)\n"
68-
exp += " --dm / --driver-manager (Driver manager)\n"
65+
exp += " --bc / --basecase (BaseCase class inheritance)\n"
66+
exp += " --pf / --pytest-fixture (sb pytest fixture)\n"
67+
exp += " --cf / --class-fixture (class + sb pytest fixture)\n"
68+
exp += " --cm / --context-manager (SB context manager)\n"
69+
exp += " --dc / --driver-context (DriverContext manager)\n"
70+
exp += " --dm / --driver-manager (Driver manager)\n"
6971
exp += " Output:\n"
7072
exp += " Creates a new SBase test file with boilerplate code.\n"
7173
exp += " If the file already exists, an error is raised.\n"
@@ -100,6 +102,7 @@ def main():
100102
help_me = False
101103
recorder = False
102104
error_msg = None
105+
start_page = None
103106
invalid_cmd = None
104107
syntax = "BaseCase"
105108
language = "English"
@@ -128,6 +131,15 @@ def main():
128131
option = option.lower()
129132
if option == "-h" or option == "--help":
130133
help_me = True
134+
elif option.startswith("--url=") and len(option) > 6:
135+
from seleniumbase.fixtures import page_utils
136+
start_page = option.split("--url=")[1]
137+
if not page_utils.is_valid_url(start_page):
138+
if page_utils.is_valid_url("https://" + start_page):
139+
start_page = "https://" + start_page
140+
else:
141+
raise Exception("Invalid URL: %s" % start_page)
142+
basic = True
131143
elif option == "-b" or option == "--basic":
132144
basic = True
133145
elif option == "-r" or option == "--rec":
@@ -223,7 +235,9 @@ def main():
223235
goodbye = "Adiós"
224236
class_name = "MiClaseDePrueba"
225237
url = ""
226-
if basic:
238+
if start_page:
239+
url = start_page
240+
elif basic:
227241
url = "about:blank"
228242
elif language not in ["English", "Dutch", "French", "Italian"]:
229243
url = "data:text/html,<meta charset='utf-8'><p>%s<br><input>" % hello

seleniumbase/core/browser_launcher.py

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ def uc_special_open_if_cf(driver, url, proxy_string=None):
247247
or has_cf(req_get.text)
248248
):
249249
special = True
250-
if status_str == "403":
250+
if status_str == "403" or status_str == "429":
251251
time.sleep(0.06) # Forbidden / Blocked! (Wait first!)
252252
except Exception:
253253
pass
@@ -259,20 +259,20 @@ def uc_special_open_if_cf(driver, url, proxy_string=None):
259259
driver.switch_to.window(driver.window_handles[-1])
260260
time.sleep(0.02)
261261
else:
262-
driver.open(url) # The original one
262+
driver.default_get(url) # The original one
263263
else:
264-
driver.open(url) # The original one
264+
driver.default_get(url) # The original one
265265
return None
266266

267267

268268
def uc_open(driver, url):
269269
if (url.startswith("http:") or url.startswith("https:")):
270270
with driver:
271271
time.sleep(0.18)
272-
driver.open(url)
272+
driver.default_get(url)
273273
time.sleep(0.02)
274274
else:
275-
driver.open(url) # The original one
275+
driver.default_get(url) # The original one
276276
return None
277277

278278

@@ -285,7 +285,7 @@ def uc_open_with_tab(driver, url):
285285
driver.switch_to.window(driver.window_handles[-1])
286286
time.sleep(0.02)
287287
else:
288-
driver.open(url) # The original one
288+
driver.default_get(url) # The original one
289289
return None
290290

291291

@@ -297,7 +297,7 @@ def uc_open_with_reconnect(driver, url):
297297
driver.close()
298298
driver.switch_to.window(driver.window_handles[-1])
299299
else:
300-
driver.open(url) # The original one
300+
driver.default_get(url) # The original one
301301
return None
302302

303303

@@ -3538,7 +3538,7 @@ def get_local_driver(
35383538
service_args=["--disable-build-check"],
35393539
options=chrome_options,
35403540
)
3541-
driver.open = driver.get # Save copy of original
3541+
driver.default_get = driver.get # Save copy of original
35423542
if uc_activated:
35433543
driver.get = lambda url: uc_special_open_if_cf(
35443544
driver, url, proxy_string
@@ -3550,6 +3550,7 @@ def get_local_driver(
35503550
driver.uc_open_with_reconnect = (
35513551
lambda url: uc_open_with_reconnect(driver, url)
35523552
)
3553+
driver.open = driver.get # Shortcut
35533554
return driver
35543555
else: # Running headless on Linux (and not using --uc)
35553556
try:

0 commit comments

Comments
 (0)