Skip to content

Commit 42ad7e7

Browse files
committed
Add shortcuts for selecting the browser type
1 parent c9fbe4a commit 42ad7e7

File tree

1 file changed

+106
-4
lines changed

1 file changed

+106
-4
lines changed

seleniumbase/plugins/pytest_plugin.py

Lines changed: 106 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@ def pytest_addoption(parser):
1818
"""
1919
This plugin adds the following command-line options to pytest:
2020
--browser=BROWSER (The web browser to use. Default: "chrome".)
21+
--chrome (Shortcut for "--browser=chrome". On by default.)
22+
--edge (Shortcut for "--browser=edge".)
23+
--firefox (Shortcut for "--browser=firefox".)
24+
--opera (Shortcut for "--browser=opera".)
25+
--safari (Shortcut for "--browser=safari".)
2126
--settings-file=FILE (Override default SeleniumBase settings.)
2227
--env=ENV (Set the test env. Access with "self.env" in tests.)
2328
--data=DATA (Extra test data. Access with "self.data" in tests.)
@@ -93,6 +98,31 @@ def pytest_addoption(parser):
9398
help="""Specifies the web browser to use. Default: Chrome.
9499
If you want to use Firefox, explicitly indicate that.
95100
Example: (--browser=firefox)""")
101+
parser.addoption('--chrome',
102+
action="store_true",
103+
dest='use_chrome',
104+
default=False,
105+
help="""Shortcut for --browser=chrome. On by default.)""")
106+
parser.addoption('--edge',
107+
action="store_true",
108+
dest='use_edge',
109+
default=False,
110+
help="""Shortcut for --browser=edge.)""")
111+
parser.addoption('--firefox',
112+
action="store_true",
113+
dest='use_firefox',
114+
default=False,
115+
help="""Shortcut for --browser=firefox.)""")
116+
parser.addoption('--opera',
117+
action="store_true",
118+
dest='use_opera',
119+
default=False,
120+
help="""Shortcut for --browser=opera.)""")
121+
parser.addoption('--safari',
122+
action="store_true",
123+
dest='use_safari',
124+
default=False,
125+
help="""Shortcut for --browser=safari.)""")
96126
parser.addoption('--with-selenium',
97127
action="store_true",
98128
dest='with_selenium',
@@ -503,20 +533,90 @@ def pytest_addoption(parser):
503533
help="""Setting this overrides the default timeout
504534
by the multiplier when waiting for page elements.
505535
Unused when tests override the default value.""")
506-
for arg in sys.argv:
536+
537+
sys_argv = sys.argv
538+
sb_config._browser_shortcut = None
539+
540+
# SeleniumBase does not support pytest-timeout due to hanging browsers.
541+
for arg in sys_argv:
507542
if "--timeout=" in arg:
508543
raise Exception(
509544
"\n\n Don't use --timeout=s from pytest-timeout! "
510545
"\n It's not thread-safe for WebDriver processes! "
511546
"\n Use --time-limit=s from SeleniumBase instead!\n")
512547

513-
if "--dashboard" in sys.argv:
514-
arg_join = " ".join(sys.argv)
515-
if ("-n" in sys.argv) or ("-n=" in arg_join):
548+
# The SeleniumBase Dashboard does not yet support multi-threadeded tests.
549+
if "--dashboard" in sys_argv:
550+
arg_join = " ".join(sys_argv)
551+
if ("-n" in sys_argv) or ("-n=" in arg_join):
516552
raise Exception(
517553
"\n\n Multi-threading is not yet supported using --dashboard"
518554
"\n (You can speed up tests using --reuse-session / --rs)\n")
519555

556+
# As a shortcut, you can use "--edge" instead of "--browser=edge", etc,
557+
# but you can only specify one default browser for tests. (Default: chrome)
558+
browser_changes = 0
559+
browser_set = None
560+
browser_list = []
561+
if "--browser=chrome" in sys_argv or "--browser chrome" in sys_argv:
562+
browser_changes += 1
563+
browser_set = "chrome"
564+
browser_list.append("--browser=chrome")
565+
if "--browser=edge" in sys_argv or "--browser edge" in sys_argv:
566+
browser_changes += 1
567+
browser_set = "edge"
568+
browser_list.append("--browser=edge")
569+
if "--browser=firefox" in sys_argv or "--browser firefox" in sys_argv:
570+
browser_changes += 1
571+
browser_set = "firefox"
572+
browser_list.append("--browser=firefox")
573+
if "--browser=opera" in sys_argv or "--browser opera" in sys_argv:
574+
browser_changes += 1
575+
browser_set = "opera"
576+
browser_list.append("--browser=opera")
577+
if "--browser=safari" in sys_argv or "--browser safari" in sys_argv:
578+
browser_changes += 1
579+
browser_set = "safari"
580+
browser_list.append("--browser=safari")
581+
if "--browser=ie" in sys_argv or "--browser ie" in sys_argv:
582+
browser_changes += 1
583+
browser_set = "ie"
584+
browser_list.append("--browser=ie")
585+
if "--browser=phantomjs" in sys_argv or "--browser phantomjs" in sys_argv:
586+
browser_changes += 1
587+
browser_set = "phantomjs"
588+
browser_list.append("--browser=phantomjs")
589+
if "--browser=remote" in sys_argv or "--browser remote" in sys_argv:
590+
browser_changes += 1
591+
browser_set = "remote"
592+
browser_list.append("--browser=remote")
593+
if "--chrome" in sys_argv and not browser_set == "chrome":
594+
browser_changes += 1
595+
sb_config._browser_shortcut = "chrome"
596+
browser_list.append("--chrome")
597+
if "--edge" in sys_argv and not browser_set == "edge":
598+
browser_changes += 1
599+
sb_config._browser_shortcut = "edge"
600+
browser_list.append("--edge")
601+
if "--firefox" in sys_argv and not browser_set == "firefox":
602+
browser_changes += 1
603+
sb_config._browser_shortcut = "firefox"
604+
browser_list.append("--firefox")
605+
if "--opera" in sys_argv and not browser_set == "opera":
606+
browser_changes += 1
607+
sb_config._browser_shortcut = "opera"
608+
browser_list.append("--opera")
609+
if "--safari" in sys_argv and not browser_set == "safari":
610+
browser_changes += 1
611+
sb_config._browser_shortcut = "safari"
612+
browser_list.append("--safari")
613+
if browser_changes > 1:
614+
message = "\n\n Too many browser types were entered!"
615+
message += "\n There were %s found: %s" % (
616+
browser_changes, ", ".join(browser_list))
617+
message += "\n Please enter ONLY ONE and try again!\n"
618+
raise Exception(message)
619+
520620

521621
def pytest_configure(config):
522622
""" This runs after command-line options have been parsed. """
@@ -527,6 +627,8 @@ def pytest_configure(config):
527627
sb_config.item_count_untested = 0
528628
sb_config.is_pytest = True
529629
sb_config.browser = config.getoption('browser')
630+
if sb_config._browser_shortcut:
631+
sb_config.browser = sb_config._browser_shortcut
530632
sb_config.data = config.getoption('data')
531633
sb_config.var1 = config.getoption('var1')
532634
sb_config.var2 = config.getoption('var2')

0 commit comments

Comments
 (0)