how to pass firefox/chrome headless mode via command line to pytest

4.1k Views Asked by At

I need to run my selenium test cases remotely in headless mode.

Currently, I am running below py.test command

py.test --driver remote --host selenium.host --port 4444 --capability browserName firefox --capability platform LINUX

And for headless mode, I need to handle that in conftest.py file

But I need that option in command line, instead of handling that in conftest.py file

@pytest.fixture
def chrome_options(chrome_options):
    chrome_options.add_argument('--headless')
    return chrome_options


@pytest.fixture
def firefox_options(firefox_options):
    firefox_options.add_argument('-headless')
    return firefox_options
1

There are 1 best solutions below

0
On

See if this helps. An example app

def pytest_addoption(parser):
    parser.addoption("--browser", action="store", default="firefox", help="Type in browser type")
    parser.addoption("--executor", action="store", default="standalone", help="For selenium grid.")
    parser.addoption("--url", action="store", default="http://the-internet.herokuapp.com", help="url")




@pytest.fixture(scope="function")
def open_browser(request):
    browser = request.config.getoption("--browser")
    executor = request.config.getoption("--executor")

    if executor == "local" or executor == "" or executor == "standalone":
        if browser == 'chrome':
            driver = webdriver.Chrome()
        else:
            driver = webdriver.Firefox()
    else:
        if executor == "remote":
            command_executor = 'http://localhost:4444/wd/hub'
        else:
            command_executor = 'http://' + executor + '/wd/hub'  ## Expecting IP and Port. Eg. 1.1.1.1:4444

        caps = {'browserName': os.getenv('BROWSER', browser)}
        driver = webdriver.Remote(
            command_executor=command_executor,
            desired_capabilities=caps)

    driver.implicitly_wait(10)
    driver.maximize_window()

    yield driver # Teardown
    driver.close()
    driver.quit()