@@ -18,6 +18,11 @@ def pytest_addoption(parser):
18
18
"""
19
19
This plugin adds the following command-line options to pytest:
20
20
--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".)
21
26
--settings-file=FILE (Override default SeleniumBase settings.)
22
27
--env=ENV (Set the test env. Access with "self.env" in tests.)
23
28
--data=DATA (Extra test data. Access with "self.data" in tests.)
@@ -93,6 +98,31 @@ def pytest_addoption(parser):
93
98
help = """Specifies the web browser to use. Default: Chrome.
94
99
If you want to use Firefox, explicitly indicate that.
95
100
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.)""" )
96
126
parser .addoption ('--with-selenium' ,
97
127
action = "store_true" ,
98
128
dest = 'with_selenium' ,
@@ -503,20 +533,90 @@ def pytest_addoption(parser):
503
533
help = """Setting this overrides the default timeout
504
534
by the multiplier when waiting for page elements.
505
535
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 :
507
542
if "--timeout=" in arg :
508
543
raise Exception (
509
544
"\n \n Don't use --timeout=s from pytest-timeout! "
510
545
"\n It's not thread-safe for WebDriver processes! "
511
546
"\n Use --time-limit=s from SeleniumBase instead!\n " )
512
547
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 ):
516
552
raise Exception (
517
553
"\n \n Multi-threading is not yet supported using --dashboard"
518
554
"\n (You can speed up tests using --reuse-session / --rs)\n " )
519
555
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
+
520
620
521
621
def pytest_configure (config ):
522
622
""" This runs after command-line options have been parsed. """
@@ -527,6 +627,8 @@ def pytest_configure(config):
527
627
sb_config .item_count_untested = 0
528
628
sb_config .is_pytest = True
529
629
sb_config .browser = config .getoption ('browser' )
630
+ if sb_config ._browser_shortcut :
631
+ sb_config .browser = sb_config ._browser_shortcut
530
632
sb_config .data = config .getoption ('data' )
531
633
sb_config .var1 = config .getoption ('var1' )
532
634
sb_config .var2 = config .getoption ('var2' )
0 commit comments