Skip to content

Commit e3ecdb6

Browse files
committed
Headless Selenium with pytest when using --headless
1 parent acfa70b commit e3ecdb6

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

conftest.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,11 @@ def pytest_addoption(parser):
3434
parser.addoption('--log_path', dest='log_path',
3535
default='logs/',
3636
help='Where the log files are saved.')
37+
parser.addoption('--headless', action="store_true",
38+
dest='headless',
39+
default=False,
40+
help="""Using this makes Webdriver run headlessly,
41+
which is useful inside a Linux Docker.""")
3742
parser.addoption('--demo_mode', action="store_true",
3843
dest='demo_mode',
3944
default=False,
@@ -50,6 +55,7 @@ def pytest_configure(config):
5055
with_testing_base = config.getoption('with_testing_base')
5156
browser = config.getoption('browser')
5257
log_path = config.getoption('log_path')
58+
headless = config.getoption('headless')
5359
demo_mode = config.getoption('demo_mode')
5460
demo_sleep = ''
5561
data = ''
@@ -65,6 +71,7 @@ def pytest_configure(config):
6571
config_file.write("data:::%s\n" % data)
6672
config_file.write("with_testing_base:::%s\n" % with_testing_base)
6773
config_file.write("log_path:::%s\n" % log_path)
74+
config_file.write("headless:::%s\n" % headless)
6875
config_file.write("demo_mode:::%s\n" % demo_mode)
6976
config_file.write("demo_sleep:::%s\n" % demo_sleep)
7077
config_file.close()

seleniumbase/fixtures/base_case.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import sys
1212
import time
1313
import unittest
14+
from pyvirtualdisplay import Display
1415
from seleniumbase.config import settings
1516
from seleniumbase.core import browser_launcher
1617
from seleniumbase.core import log_helper
@@ -303,12 +304,18 @@ def setUp(self):
303304
self.is_pytest = False
304305
if self.is_pytest:
305306
self.with_selenium = pytest.config.option.with_selenium
307+
self.headless = pytest.config.option.headless
308+
self.headless_active = False
306309
self.with_testing_base = pytest.config.option.with_testing_base
307310
self.log_path = pytest.config.option.log_path
308311
self.browser = pytest.config.option.browser
309312
self.data = pytest.config.option.data
310313
self.demo_mode = pytest.config.option.demo_mode
311314
self.demo_sleep = pytest.config.option.demo_sleep
315+
if self.headless:
316+
self.display = Display(visible=0, size=(1200, 800))
317+
self.display.start()
318+
self.headless_active = True
312319
if self.with_selenium:
313320
self.driver = browser_launcher.get_driver(self.browser)
314321

@@ -336,6 +343,8 @@ def tearDown(self):
336343
test_logpath, self.driver, self.browser)
337344
# Handle page source logging
338345
log_helper.log_page_source(test_logpath, self.driver)
339-
340346
# Finally close the browser
341347
self.driver.quit()
348+
if self.headless:
349+
if self.headless_active:
350+
self.display.stop()

0 commit comments

Comments
 (0)