initialize add option in conftest.py
def pytest_addoption(parser):
parser.addoption(
"--cmdopt", action="store", default="type1", help="my option: type1 or type2"
)
Example: we’re going to add an option --browser
that takes in either Chrome, Firefox, Edge or any other browser and run the test in that particular browser.
project structure looks like this
addOptionDemo/
--conftest.py
--test_demo.py
conftest.py
import pytest
from selenium import webdriver
# pytest addoption function
def pytest_addoption(parser):
parser.addoption(
"--browser", action="store", default="Chrome", help="Choose a browser: Chrome, Firefox"
)
@pytest.fixture(scope="function")
def driver(request):
browser_name = request.config.getoption("browser")
if browser_name == "Chrome":
driver = webdriver.Chrome()
elif browser_name == 'Firefox':
driver = webdriver.Firefox()
driver.maximize_window()
driver.implicitly_wait(3)
yield driver
driver.quit()
test_demo.py
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait
driver = webdriver.Chrome()
driver.implicitly_wait(5)
# a demo function that goes to a site, enters first and last name, waits for 3 seconds and quits.
def test_demo(driver):
driver.get("https://demo.automationtesting.in/Register.html")
first_name = driver.find_element(By.XPATH, '//input[@placeholder="First Name"]')
last_name = driver.find_element(By.XPATH, '//input[@placeholder="Last Name"]')
first_name.send_keys("John")
last_name.send_keys("Doe")
time.sleep(3)
driver.quit()
now we can run the test like this
pytest test_register.py --browser Firefox
and we’ll be able to run the test case on either Firefox or Chrome.