Skip to content

Commit c09098e

Browse files
committed
Update plugins
1 parent d22abd7 commit c09098e

File tree

3 files changed

+154
-12
lines changed

3 files changed

+154
-12
lines changed

seleniumbase/behave/behave_sb.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,9 +88,10 @@
8888
-D window-size=WIDTH,HEIGHT (Set the browser's starting window size.)
8989
-D maximize (Start tests with the browser window maximized.)
9090
-D screenshot (Save a screenshot at the end of each test.)
91+
-D no-screenshot (No screenshots saved unless tests directly ask it.)
9192
-D visual-baseline (Set the visual baseline for Visual/Layout tests.)
9293
-D wire (Use selenium-wire's webdriver for replacing selenium webdriver.)
93-
-D external-pdf (Set Chromium "plugins.always_open_pdf_externally": True.)
94+
-D external-pdf (Set Chromium "plugins.always_open_pdf_externally":True.)
9495
-D timeout-multiplier=MULTIPLIER (Multiplies the default timeout values.)
9596
"""
9697

@@ -185,6 +186,7 @@ def get_configured_sb(context):
185186
sb.maximize_option = False
186187
sb.is_context_manager = False
187188
sb.save_screenshot_after_test = False
189+
sb.no_screenshot_after_test = False
188190
sb.timeout_multiplier = None
189191
sb.pytest_html_report = None
190192
sb.with_db_reporting = False
@@ -565,6 +567,10 @@ def get_configured_sb(context):
565567
]:
566568
sb.save_screenshot_after_test = True
567569
continue
570+
# Handle: -D no-screenshot / no_screenshot / ns
571+
if low_key in ["no-screenshot", "no_screenshot", "ns"]:
572+
sb.no_screenshot_after_test = True
573+
continue
568574
# Handle: -D timeout-multiplier=FLOAT / timeout_multiplier=FLOAT
569575
if low_key in ["timeout-multiplier", "timeout_multiplier"]:
570576
timeout_multiplier = userdata[key]
@@ -848,6 +854,7 @@ def get_configured_sb(context):
848854
sb_config.maximize_option = sb.maximize_option
849855
sb_config.xvfb = sb.xvfb
850856
sb_config.save_screenshot = sb.save_screenshot_after_test
857+
sb_config.no_screenshot = sb.no_screenshot_after_test
851858
sb_config._has_logs = False
852859
sb_config.variables = sb.variables
853860
sb_config.dashboard = sb.dashboard

seleniumbase/plugins/sb_manager.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ def SB(
9292
pls=None, # Shortcut / Duplicate of "page_load_strategy".
9393
sjw=None, # Shortcut / Duplicate of "skip_js_waits".
9494
save_screenshot=None, # Save a screenshot at the end of each test.
95+
no_screenshot=None, # No screenshots saved unless tests directly ask it.
9596
timeout_multiplier=None, # Multiplies the default timeout values.
9697
js_checking_on=None, # Check for JavaScript errors after page loads.
9798
slow=None, # Slow down the automation. Faster than using Demo Mode.
@@ -136,7 +137,7 @@ def SB(
136137
'\n (Prevent that by using: `if __name__ == "__main__":`)'
137138
)
138139
elif hasattr(sb_config, "is_nosetest") and sb_config.is_nosetest:
139-
print(
140+
raise Exception(
140141
"\n SB Manager script was triggered by nosetest collection!"
141142
'\n (Prevent that by using: ``if __name__ == "__main__":``)'
142143
)
@@ -470,10 +471,21 @@ def SB(
470471
elif skip_js_waits:
471472
settings.SKIP_JS_WAITS = skip_js_waits
472473
if save_screenshot is None:
473-
if "--screenshot" in sys_argv or "--save-screenshot" in sys_argv:
474+
if (
475+
"--screenshot" in sys_argv
476+
or "--save-screenshot" in sys_argv
477+
or "--ss" in sys_argv
478+
):
474479
save_screenshot = True
475480
else:
476481
save_screenshot = False
482+
if no_screenshot is None:
483+
if "--no-screenshot" in sys_argv or "--ns" in sys_argv:
484+
no_screenshot = True
485+
else:
486+
no_screenshot = False
487+
if save_screenshot and no_screenshot:
488+
save_screenshot = False # "no_screenshot" has priority
477489
if js_checking_on is None:
478490
if "--check-js" in sys_argv:
479491
js_checking_on = True
@@ -605,6 +617,7 @@ def SB(
605617
sb_config.maximize_option = maximize_option
606618
sb_config._disable_beforeunload = _disable_beforeunload
607619
sb_config.save_screenshot = save_screenshot
620+
sb_config.no_screenshot = no_screenshot
608621
sb_config.page_load_strategy = page_load_strategy
609622
sb_config.timeout_multiplier = timeout_multiplier
610623
sb_config.pytest_html_report = None
@@ -699,6 +712,7 @@ def SB(
699712
sb.maximize_option = sb_config.maximize_option
700713
sb._disable_beforeunload = sb_config._disable_beforeunload
701714
sb.save_screenshot_after_test = sb_config.save_screenshot
715+
sb.no_screenshot_after_test = sb_config.no_screenshot
702716
sb.page_load_strategy = sb_config.page_load_strategy
703717
sb.timeout_multiplier = sb_config.timeout_multiplier
704718
sb.pytest_html_report = sb_config.pytest_html_report

seleniumbase/plugins/selenium_plugin.py

Lines changed: 130 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ class SeleniumBrowser(Plugin):
1919
"""
2020
This plugin adds the following command-line options to nosetests:
2121
--browser=BROWSER (The web browser to use. Default: "chrome".)
22+
--chrome (Shortcut for "--browser=chrome". On by default.)
23+
--edge (Shortcut for "--browser=edge".)
24+
--firefox (Shortcut for "--browser=firefox".)
25+
--safari (Shortcut for "--browser=safari".)
2226
--user-data-dir=DIR (Set the Chrome user data directory to use.)
2327
--protocol=PROTOCOL (The Selenium Grid protocol: http|https.)
2428
--server=SERVER (The Selenium Grid server/IP used for tests.)
@@ -103,13 +107,46 @@ def options(self, parser, env):
103107
Example: (--browser=firefox)""",
104108
)
105109
parser.add_option(
106-
"--browser_version",
107-
"--browser-version",
108-
action="store",
109-
dest="browser_version",
110-
default="latest",
111-
help="""The browser version to use. Explicitly select
112-
a version number or use "latest".""",
110+
"--chrome",
111+
action="store_true",
112+
dest="use_chrome",
113+
default=False,
114+
help="""Shortcut for --browser=chrome. On by default.)""",
115+
)
116+
parser.add_option(
117+
"--edge",
118+
action="store_true",
119+
dest="use_edge",
120+
default=False,
121+
help="""Shortcut for --browser=edge.)""",
122+
)
123+
parser.add_option(
124+
"--firefox",
125+
action="store_true",
126+
dest="use_firefox",
127+
default=False,
128+
help="""Shortcut for --browser=firefox.)""",
129+
)
130+
parser.add_option(
131+
"--ie",
132+
action="store_true",
133+
dest="use_ie",
134+
default=False,
135+
help="""Shortcut for --browser=ie.)""",
136+
)
137+
parser.add_option(
138+
"--opera",
139+
action="store_true",
140+
dest="use_opera",
141+
default=False,
142+
help="""Shortcut for --browser=opera.)""",
143+
)
144+
parser.add_option(
145+
"--safari",
146+
action="store_true",
147+
dest="use_safari",
148+
default=False,
149+
help="""Shortcut for --browser=safari.)""",
113150
)
114151
parser.add_option(
115152
"--cap_file",
@@ -622,7 +659,7 @@ def options(self, parser, env):
622659
action="store_true",
623660
dest="use_auto_ext",
624661
default=False,
625-
help="""Using this enables Chrome's Automation Extension.
662+
help="""(DEPRECATED) - Enable the automation extension.
626663
It's not required, but some commands & advanced
627664
features may need it.""",
628665
)
@@ -835,8 +872,88 @@ def configure(self, options, conf):
835872
proxy_helper.remove_proxy_zip_if_present()
836873

837874
def beforeTest(self, test):
838-
sb_config._context_of_runner = False # Context Manager Compatibility
839875
browser = self.options.browser
876+
test.test.browser = browser
877+
test.test.headless = None
878+
test.test.headless2 = None
879+
# As a shortcut, you can use "--edge" instead of "--browser=edge", etc,
880+
# but you can only specify one default browser. (Default: chrome)
881+
sb_config._browser_shortcut = None
882+
sys_argv = sys.argv
883+
browser_changes = 0
884+
browser_set = None
885+
browser_text = None
886+
browser_list = []
887+
if "--browser=chrome" in sys_argv or "--browser chrome" in sys_argv:
888+
browser_changes += 1
889+
browser_set = "chrome"
890+
browser_list.append("--browser=chrome")
891+
if "--browser=edge" in sys_argv or "--browser edge" in sys_argv:
892+
browser_changes += 1
893+
browser_set = "edge"
894+
browser_list.append("--browser=edge")
895+
if "--browser=firefox" in sys_argv or "--browser firefox" in sys_argv:
896+
browser_changes += 1
897+
browser_set = "firefox"
898+
browser_list.append("--browser=firefox")
899+
if "--browser=opera" in sys_argv or "--browser opera" in sys_argv:
900+
browser_changes += 1
901+
browser_set = "opera"
902+
browser_list.append("--browser=opera")
903+
if "--browser=safari" in sys_argv or "--browser safari" in sys_argv:
904+
browser_changes += 1
905+
browser_set = "safari"
906+
browser_list.append("--browser=safari")
907+
if "--browser=ie" in sys_argv or "--browser ie" in sys_argv:
908+
browser_changes += 1
909+
browser_set = "ie"
910+
browser_list.append("--browser=ie")
911+
if "--browser=remote" in sys_argv or "--browser remote" in sys_argv:
912+
browser_changes += 1
913+
browser_set = "remote"
914+
browser_list.append("--browser=remote")
915+
browser_text = browser_set
916+
if "--chrome" in sys_argv and not browser_set == "chrome":
917+
browser_changes += 1
918+
browser_text = "chrome"
919+
sb_config._browser_shortcut = "chrome"
920+
browser_list.append("--chrome")
921+
if "--edge" in sys_argv and not browser_set == "edge":
922+
browser_changes += 1
923+
browser_text = "edge"
924+
sb_config._browser_shortcut = "edge"
925+
browser_list.append("--edge")
926+
if "--firefox" in sys_argv and not browser_set == "firefox":
927+
browser_changes += 1
928+
browser_text = "firefox"
929+
sb_config._browser_shortcut = "firefox"
930+
browser_list.append("--firefox")
931+
if "--ie" in sys_argv and not browser_set == "ie":
932+
browser_changes += 1
933+
browser_text = "ie"
934+
sb_config._browser_shortcut = "ie"
935+
browser_list.append("--ie")
936+
if "--opera" in sys_argv and not browser_set == "opera":
937+
browser_changes += 1
938+
browser_text = "opera"
939+
sb_config._browser_shortcut = "opera"
940+
browser_list.append("--opera")
941+
if "--safari" in sys_argv and not browser_set == "safari":
942+
browser_changes += 1
943+
browser_text = "safari"
944+
sb_config._browser_shortcut = "safari"
945+
browser_list.append("--safari")
946+
if browser_changes > 1:
947+
message = "\n\n TOO MANY browser types were entered!"
948+
message += "\n There were %s found:\n > %s" % (
949+
browser_changes,
950+
", ".join(browser_list),
951+
)
952+
message += "\n ONLY ONE default browser is allowed!"
953+
message += "\n Select a single browser & try again!\n"
954+
raise Exception(message)
955+
if browser_text:
956+
browser = browser_text
840957
if self.options.recorder_mode and browser not in ["chrome", "edge"]:
841958
message = (
842959
"\n\n Recorder Mode ONLY supports Chrome and Edge!"
@@ -876,6 +993,9 @@ def beforeTest(self, test):
876993
sb_config.is_pytest = False
877994
sb_config.is_context_manager = False
878995
test.test.browser = self.options.browser
996+
if sb_config._browser_shortcut:
997+
self.options.browser = sb_config._browser_shortcut
998+
test.test.browser = sb_config._browser_shortcut
879999
test.test.cap_file = self.options.cap_file
8801000
test.test.cap_string = self.options.cap_string
8811001
test.test.headless = self.options.headless
@@ -1045,6 +1165,7 @@ def beforeTest(self, test):
10451165
sb_config._is_timeout_changed = False
10461166
sb_config._SMALL_TIMEOUT = settings.SMALL_TIMEOUT
10471167
sb_config._LARGE_TIMEOUT = settings.LARGE_TIMEOUT
1168+
sb_config._context_of_runner = False # Context Manager Compatibility
10481169
# The driver will be received later
10491170
self.driver = None
10501171
test.test.driver = self.driver

0 commit comments

Comments
 (0)