95 lines
3.6 KiB
Python
95 lines
3.6 KiB
Python
import pytest
|
|
from playwright.sync_api import Browser, BrowserContext, Page, sync_playwright
|
|
import os
|
|
|
|
|
|
|
|
def pytest_addoption(parser):
|
|
"""Пользовательские опции командной строки"""
|
|
parser.addoption('--bn', action='store', default="chrome", help="Choose browser: chrome, remote_chrome or firefox")
|
|
parser.addoption('--h', action='store', default=False, help='Choose headless: True or False')
|
|
parser.addoption('--s', action='store', default={'width': 1520, 'height': 380}, help='Size window: width,height')
|
|
# parser.addoption('--s', action='store', default={'width': 1920, 'height': 300}, help='Size window: width,height')
|
|
parser.addoption('--slow', action='store', default=200, help='Choose slow_mo for robot action')
|
|
parser.addoption('--t', action='store', default=60000, help='Choose timeout')
|
|
parser.addoption('--l', action='store', default='ru-RU', help='Choose locale')
|
|
# parser.addini('qs_to_api_token', default=os.getenv("QASE_TOKEN"), help='Qase app token')
|
|
|
|
|
|
|
|
@pytest.fixture(scope='class')
|
|
def browser(request) -> Page:
|
|
playwright = sync_playwright().start()
|
|
if request.config.getoption("bn") == 'remote_chrome':
|
|
browser = get_remote_chrome(playwright, request)
|
|
context = get_context(browser, request, 'remote')
|
|
page_data = context.new_page()
|
|
elif request.config.getoption("bn") == 'firefox':
|
|
browser = get_firefox_browser(playwright, request)
|
|
context = get_context(browser, request, 'local')
|
|
page_data = context.new_page()
|
|
elif request.config.getoption("bn") == 'chrome':
|
|
browser = get_chrome_browser(playwright, request)
|
|
context = get_context(browser, request, 'local')
|
|
page_data = context.new_page()
|
|
else:
|
|
browser = get_chrome_browser(playwright, request)
|
|
context = get_context(browser, request, 'local')
|
|
page_data = context.new_page()
|
|
yield page_data
|
|
for context in browser.contexts:
|
|
context.close()
|
|
browser.close()
|
|
playwright.stop()
|
|
|
|
|
|
def get_firefox_browser(playwright, request) -> Browser:
|
|
return playwright.firefox.launch(
|
|
headless=request.config.getoption("h"),
|
|
slow_mo=request.config.getoption("slow"),
|
|
)
|
|
|
|
|
|
def get_chrome_browser(playwright, request) -> Browser:
|
|
return playwright.chromium.launch(
|
|
headless=request.config.getoption("h"),
|
|
slow_mo=request.config.getoption("slow"),
|
|
args=['--s']
|
|
)
|
|
|
|
def get_remote_chrome(playwright, request) -> Browser:
|
|
return playwright.chromium.launch(
|
|
headless=True,
|
|
slow_mo=request.config.getoption("slow")
|
|
)
|
|
|
|
|
|
def get_context(browser, request, start) -> BrowserContext:
|
|
if start == 'local':
|
|
context = browser.new_context(
|
|
# no_viewport=True,
|
|
viewport=request.config.getoption('s'),
|
|
locale=request.config.getoption('l')
|
|
)
|
|
context.set_default_timeout(
|
|
timeout=request.config.getoption('t')
|
|
)
|
|
# context.add_cookies([{'url': 'https://example.ru', 'name': 'ab_test', 'value': 'd'}]) добавляем куки, если нужны
|
|
return context
|
|
|
|
elif start == 'remote':
|
|
context = browser.new_context(
|
|
viewport=request.config.getoption('s'),
|
|
locale=request.config.getoption('l')
|
|
)
|
|
context.set_default_timeout(
|
|
timeout=request.config.getoption('t')
|
|
)
|
|
# context.add_cookies([{'url': 'https://example.ru', 'name': 'ab_test', 'value': 'd'}]) добавляем куки, если нужны
|
|
return context
|
|
|
|
|
|
|
|
@pytest.fixture(scope="function")
|
|
def return_back(browser):
|
|
browser.go_back() |