1- # General imports
21import pytest
2+ import os
33from selenium import webdriver
4-
5- # Imports to get chrome driver working
4+ from selenium .webdriver .chrome .options import Options
65from selenium .webdriver .chrome .service import Service
76from webdriver_manager .chrome import ChromeDriverManager
87
9- # Imports to get firefox driver working
10- from selenium .webdriver .firefox .service import Service as FirefoxService
11- from webdriver_manager .firefox import GeckoDriverManager
12-
13- # Import options for headless mode
14- from selenium .webdriver .chrome .options import Options
15-
16-
17- def pytest_addoption (parser ):
18- parser .addoption (
19- "--browser" , action = "store" , default = "chrome" , help = "Send 'chrome' or 'firefox' as parameter for execution"
8+ @pytest .fixture (scope = "function" )
9+ def driver ():
10+ # Setup Chrome options
11+ chrome_options = Options ()
12+
13+ # Check if running in GitHub Actions
14+ if os .environ .get ('GITHUB_ACTIONS' ) == 'true' :
15+ chrome_options .add_argument ('--headless' )
16+ chrome_options .add_argument ('--no-sandbox' )
17+ chrome_options .add_argument ('--disable-dev-shm-usage' )
18+
19+ chrome_options .add_argument ('--window-size=1920,1080' )
20+
21+ # Initialize Chrome driver
22+ driver = webdriver .Chrome (
23+ service = Service (ChromeDriverManager ().install ()),
24+ options = chrome_options
2025 )
21-
22-
23- @pytest .fixture ()
24- def driver (request ):
25- browser = request .config .getoption ("--browser" )
26- # Default driver value
27- driver = ""
28- # Option setup to run in headless mode (in order to run this in GH Actions)
29- options = Options ()
30- options .add_argument ('--headless' )
31- # Setup
32- print (f"\n Setting up: { browser } driver" )
33- if browser == "chrome" :
34- driver = webdriver .Chrome (service = Service (ChromeDriverManager ().install ()), options = options )
35- elif browser == "firefox" :
36- driver = webdriver .Firefox (service = FirefoxService (GeckoDriverManager ().install ()))
37- # Implicit wait setup for our framework
38- driver .implicitly_wait (10 )
26+
27+ # Create screenshots directory if it doesn't exist
28+ os .makedirs ("screenshots" , exist_ok = True )
29+
3930 yield driver
40- # Tear down
41- print (f"\n Tear down: { browser } driver" )
31+
32+ # Take screenshot on test failure
33+ if pytest .item and hasattr (pytest , '_funcargs' ):
34+ test_name = pytest ._funcargs .get ('request' , pytest ._funcargs .get ('fspath' , pytest )).node .name
35+ driver .save_screenshot (f"screenshots/{ test_name } .png" )
36+
4237 driver .quit ()
0 commit comments