@@ -77,7 +77,8 @@ def __init__(self, *args, **kwargs):
77
77
self ._page_check_count = 0
78
78
self ._page_check_failures = []
79
79
self ._html_report_extra = []
80
- self ._extra_drivers = []
80
+ self ._default_driver = None
81
+ self ._drivers_list = []
81
82
82
83
def open (self , url ):
83
84
self .driver .get (url )
@@ -1424,54 +1425,90 @@ def wait_for_and_switch_to_alert(self, timeout=settings.LARGE_TIMEOUT):
1424
1425
return page_actions .wait_for_and_switch_to_alert (self .driver , timeout )
1425
1426
1426
1427
def switch_to_frame (self , frame , timeout = settings .SMALL_TIMEOUT ):
1428
+ """ Sets driver control to the specified browser frame. """
1427
1429
if self .timeout_multiplier and timeout == settings .SMALL_TIMEOUT :
1428
1430
timeout = self ._get_new_timeout (timeout )
1429
1431
page_actions .switch_to_frame (self .driver , frame , timeout )
1430
1432
1433
+ def switch_to_default_content (self ):
1434
+ """ Brings driver control outside the current iframe.
1435
+ (If driver control is inside an iframe, the driver control
1436
+ will be set to one level above the current frame. If the driver
1437
+ control is not currenly in an iframe, nothing will happen.) """
1438
+ self .driver .switch_to .default_content ()
1439
+
1440
+ def open_new_window (self , switch_to = True ):
1441
+ """ Opens a new browser tab/window and switches to it by default. """
1442
+ self .driver .execute_script ("window.open('');" )
1443
+ time .sleep (0.01 )
1444
+ if switch_to :
1445
+ self .switch_to_window (len (self .driver .window_handles ) - 1 )
1446
+
1431
1447
def switch_to_window (self , window , timeout = settings .SMALL_TIMEOUT ):
1432
1448
if self .timeout_multiplier and timeout == settings .SMALL_TIMEOUT :
1433
1449
timeout = self ._get_new_timeout (timeout )
1434
1450
page_actions .switch_to_window (self .driver , window , timeout )
1435
1451
1436
- def switch_to_default_content (self ):
1437
- self .driver . switch_to . default_content ( )
1452
+ def switch_to_default_window (self ):
1453
+ self .switch_to_window ( 0 )
1438
1454
1439
1455
def save_screenshot (self , name , folder = None ):
1440
1456
return page_actions .save_screenshot (self .driver , name , folder )
1441
1457
1442
1458
def get_new_driver (self , browser = None , headless = None ,
1443
- servername = None , port = None ,
1444
- proxy_string = None ):
1459
+ servername = None , port = None , proxy = None , switch_to = True ):
1445
1460
""" This method spins up an extra browser for tests that require
1446
1461
more than one. The first browser is already provided by tests
1447
- that import base_case.BaseCase from seleniumbase. """
1462
+ that import base_case.BaseCase from seleniumbase. If parameters
1463
+ aren't specified, the method uses the same as the default driver.
1464
+ @Params
1465
+ browser - the browser to use. (Ex: "chrome", "firefox")
1466
+ headless - the option to run webdriver in headless mode
1467
+ servername - if using a Selenium Grid, set the host address here
1468
+ port - if using a Selenium Grid, set the host port here
1469
+ proxy - if using a proxy server, specify the "host:port" combo here
1470
+ switch_to - the option to switch to the new driver (default = True)
1471
+ """
1448
1472
if browser is None :
1449
1473
browser = self .browser
1474
+ browser_name = browser
1450
1475
if headless is None :
1451
1476
headless = self .headless
1452
1477
if servername is None :
1453
1478
servername = self .servername
1454
1479
if port is None :
1455
1480
port = self .port
1456
- if proxy_string is None :
1457
- proxy_string = self .proxy_string
1458
1481
use_grid = False
1459
1482
if servername != "localhost" :
1460
- # Use Selenium Grid (Use --server= 127.0.0.1 for localhost Grid)
1483
+ # Use Selenium Grid (Use " 127.0.0.1" for localhost Grid)
1461
1484
use_grid = True
1485
+ proxy_string = proxy
1486
+ if proxy_string is None :
1487
+ proxy_string = self .proxy_string
1462
1488
valid_browsers = constants .ValidBrowsers .valid_browsers
1463
- if browser not in valid_browsers :
1489
+ if browser_name not in valid_browsers :
1464
1490
raise Exception ("Browser: {%s} is not a valid browser option. "
1465
1491
"Valid options = {%s}" % (browser , valid_browsers ))
1466
- new_driver = browser_launcher .get_driver (browser ,
1467
- headless ,
1468
- use_grid ,
1469
- servername ,
1470
- port ,
1471
- proxy_string )
1472
- self ._extra_drivers .append (new_driver )
1492
+ new_driver = browser_launcher .get_driver (browser_name = browser_name ,
1493
+ headless = headless ,
1494
+ use_grid = use_grid ,
1495
+ servername = servername ,
1496
+ port = port ,
1497
+ proxy_string = proxy_string )
1498
+ self ._drivers_list .append (new_driver )
1499
+ if switch_to :
1500
+ self .driver = new_driver
1473
1501
return new_driver
1474
1502
1503
+ def switch_to_driver (self , driver ):
1504
+ """ Sets self.driver to the specified driver.
1505
+ You may need this if using self.get_new_driver() in your code. """
1506
+ self .driver = driver
1507
+
1508
+ def switch_to_default_driver (self ):
1509
+ """ Sets self.driver to the default/original driver. """
1510
+ self .driver = self ._default_driver
1511
+
1475
1512
############
1476
1513
1477
1514
def _get_new_timeout (self , timeout ):
@@ -1850,6 +1887,16 @@ def setUp(self):
1850
1887
self .servername ,
1851
1888
self .port ,
1852
1889
self .proxy_string )
1890
+ self ._default_driver = self .driver
1891
+ self ._drivers_list .append (self .driver )
1892
+ if self .headless :
1893
+ # Make sure the invisible browser window is big enough
1894
+ try :
1895
+ self .set_window_size (1920 , 1200 )
1896
+ except Exception :
1897
+ # This shouldn't fail, but in case it does, get safely through
1898
+ # setUp() so that WebDrivers can get closed during tearDown().
1899
+ pass
1853
1900
1854
1901
def __insert_test_result (self , state , err ):
1855
1902
data_payload = TestcaseDataPayload ()
0 commit comments