Аргументы при запуске тестов(выбор браузера, стенда окружении)PyTest+Selenium

Привет, друзья!Поделитесь пожалуйста бест практиками, касаемо аргументов запуска тестов, ведь при запуске нужно указать название браузера, от этого будет зависеть подключаемый драйвер,
по моему у селениума есть какая-то опция для этого( ```
parser.addoption("–browser", action=“store”)

Также уточните, как запускаете на разных окружениях? используете os.env? Или же просто дублируете тест, только в адрессе страницы меняете с "dev" на "prod", итого запуская несколько тестов.

Просьба также уточнить, обходитесь ли вы запуском только на хроме, на одном стенде?

conftest.py:
> import pytest
> from selenium import webdriver
> 
> @pytest.fixture(scope="function")
> def browser():
>     print("\nstart browser for test..")
>     browser = webdriver.Chrome(executable_path=r'C:\\Selenium\\chromedriver.exe')
>     browser.implicitly_wait(200)
>     yield browser
>     print("\nquit browser..")
>     browser.quit()

С аргументами запуска для выбора браузера разобрался:

import pytest

from selenium import webdriver

from os import getenv

from selenium.webdriver.chrome.options import Options

def pytest_addoption(parser):

parser.addoption('--browser_name', action='store', default='chrome',

                 help="Choose browser: chrome or firefox")

parser.addoption('--url', action='store', default='http://google.ru',

                 help="Choose lang")

@pytest.fixture(scope=“function”)

def browser(request):

browser_name = request.config.getoption("browser_name")

url = request.config.getoption("url")

if browser_name == "chrome":

    print("\nstart browser for test..")

    browser = webdriver.Chrome(executable_path=r'C:\\Selenium\\chromedriver.exe')

    browser.implicitly_wait(200)

elif browser_name == "firefox":

    browser = webdriver.Firefox(executable_path=r'C:\\Selenium\\geckodriver.exe')

    browser.implicitly_wait(200)



yield browser

print("\nquit browser..")

browser.quit()

Как-только тесты запускать на разных окружениях?


from selenium.webdriver.chrome.options import Options as ChromeOption
from selenium.webdriver.firefox.options import Options as FirefoxOption


def pytest_addoption(parser):
    """Declaring the command-line options for test run"""
    parser.addoption('--host',
                     default='staging',
                     help='host options: "staging", "production", or your own host for local testing')
    parser.addoption('--headless',
                     default='true',
                     help='headless options: "true" or "false"')
    parser.addoption('--browser',
                     default='chrome',
                     help='option to define type of browser')
    parser.addoption('--browser_type',
                     default='mobile',
                     help='option to define web or mobile browser')




@fixture(autouse=True)
def driver(request, driver_type):
    """Return browser
    :param driver_type:
    :param request:
    :return:
    """
    # define browser type
    browser = request.config.getoption('--browser')

    # define web or mobile browser

    # create browser type options
    chrome_option = ChromeOption()
    firefox_option = FirefoxOption()

    # define cli headless mode
    headless = request.config.getoption('--headless')

    if browser == 'firefox':
        if headless == 'true':
            firefox_option.add_argument('--headless')
            firefox_option.add_argument('--ignore-certificate-errors')
        driver_instance = webdriver.Firefox(executable_path=GeckoDriverManager().install(),
                                            firefox_options=firefox_option)
    elif browser == 'chrome':
        if headless == 'true':
            # run headless browser
            chrome_option.add_argument('--headless')

        chrome_option.add_argument('--ignore-certificate-errors')
        chrome_option.add_argument("--window-size=1920,1080")

        if driver_type == 'mobile':
            # run mobile browser
            chrome_option.add_experimental_option('mobileEmulation', MOBILE_EMULATION)
            # version = CHROME_DRIVER_HARD_CODED_VERSION
        driver_instance = webdriver.Chrome(ChromeDriverManager().install(),
                                           chrome_options=chrome_option)
    request.addfinalizer(lambda *args: driver_instance.quit())
    yield driver_instance


@fixture(autouse=True)
def host(request):
    """Return the target host
    :param request:
    :return:
    """
    # get host value
    cli_value = request.config.getoption('--host')

    if cli_value == '' or cli_value == 'staging':
        domain = HOST_PARAM_STAGING
    elif cli_value == 'prod':
        domain = HOST_PARAM_PROD
    else:
        domain = cli_value
    yield domain
1 лайк