Привет, друзья!Поделитесь пожалуйста бест практиками, касаемо аргументов запуска тестов, ведь при запуске нужно указать название браузера, от этого будет зависеть подключаемый драйвер,
по моему у селениума есть какая-то опция для этого( ```
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 лайк