90 lines
3.9 KiB
Python
90 lines
3.9 KiB
Python
from typing import Dict, Any
|
||
from config.environment import EnvironmentLoader
|
||
|
||
class UIConfig:
|
||
"""Настройки UI тестов"""
|
||
|
||
# Базовые настройки
|
||
UI_BASE_URL = EnvironmentLoader.get_env_variable('UI_BASE_URL', 'http://localhost:5173')
|
||
UI_TIMEOUT = EnvironmentLoader.get_env_variable('UI_TIMEOUT', 30) # секунды
|
||
|
||
# Настройки браузера
|
||
BROWSER_NAME = EnvironmentLoader.get_env_variable('BROWSER_NAME', 'firefox').lower()
|
||
BROWSER_HEADLESS = EnvironmentLoader.get_env_variable('BROWSER_HEADLESS', True)
|
||
BROWSER_WIDTH = EnvironmentLoader.get_env_variable('BROWSER_WIDTH', 1920)
|
||
BROWSER_HEIGHT = EnvironmentLoader.get_env_variable('BROWSER_HEIGHT', 1080)
|
||
BROWSER_LANGUAGE = EnvironmentLoader.get_env_variable('BROWSER_LANGUAGE', 'en')
|
||
BROWSER_FULLSCREEN = EnvironmentLoader.get_env_variable('BROWSER_FULLSCREEN', False)
|
||
|
||
# Настройки Chrome
|
||
CHROME_HEADLESS_NEW = EnvironmentLoader.get_env_variable('CHROME_HEADLESS_NEW', True)
|
||
CHROME_DISABLE_GPU = EnvironmentLoader.get_env_variable('CHROME_DISABLE_GPU', True)
|
||
CHROME_NO_SANDBOX = EnvironmentLoader.get_env_variable('CHROME_NO_SANDBOX', True)
|
||
CHROME_DISABLE_DEV_SHM = EnvironmentLoader.get_env_variable('CHROME_DISABLE_DEV_SHM', True)
|
||
|
||
# Настройки Firefox
|
||
FIREFOX_HEADLESS = EnvironmentLoader.get_env_variable('FIREFOX_HEADLESS', True)
|
||
|
||
# Настройки ожиданий
|
||
IMPLICIT_WAIT = EnvironmentLoader.get_env_variable('IMPLICIT_WAIT', 10) # секунды
|
||
EXPLICIT_WAIT = EnvironmentLoader.get_env_variable('EXPLICIT_WAIT', 30) # секунды
|
||
PAGE_LOAD_TIMEOUT = EnvironmentLoader.get_env_variable('PAGE_LOAD_TIMEOUT', 60) # секунды
|
||
SCRIPT_TIMEOUT = EnvironmentLoader.get_env_variable('SCRIPT_TIMEOUT', 30) # секунды
|
||
|
||
# Настройки скриншотов
|
||
SCREENSHOTS_ON_FAILURE = EnvironmentLoader.get_env_variable('SCREENSHOTS_ON_FAILURE', True)
|
||
SCREENSHOTS_DIR = EnvironmentLoader.get_env_variable('SCREENSHOTS_DIR', 'screenshots')
|
||
SCREENSHOTS_FORMAT = EnvironmentLoader.get_env_variable('SCREENSHOTS_FORMAT', 'png')
|
||
|
||
# Пути
|
||
URLS = {
|
||
"team": EnvironmentLoader.get_env_variable('UI_URL_TEAM', '/team'),
|
||
"blog": EnvironmentLoader.get_env_variable('UI_URL_BLOG', '/blog')
|
||
}
|
||
|
||
@classmethod
|
||
def get_url(cls, url_name: str, **kwargs) -> str:
|
||
"""Получение endpoint с подстановкой параметров"""
|
||
url_template = cls.URLS.get(url_name)
|
||
if not url_template:
|
||
raise ValueError(f"URL '{url_name}' not found in configuration")
|
||
|
||
return cls.UI_BASE_URL + url_template.format(**kwargs)
|
||
|
||
|
||
@classmethod
|
||
def get_browser_options(cls) -> Dict[str, Any]:
|
||
"""Получение опций браузера"""
|
||
options = {
|
||
'headless': cls.BROWSER_HEADLESS,
|
||
'width': cls.BROWSER_WIDTH,
|
||
'height': cls.BROWSER_HEIGHT,
|
||
'language': cls.BROWSER_LANGUAGE,
|
||
}
|
||
|
||
if cls.BROWSER_NAME == 'chrome':
|
||
options.update({
|
||
'headless_new': cls.CHROME_HEADLESS_NEW,
|
||
'disable_gpu': cls.CHROME_DISABLE_GPU,
|
||
'no_sandbox': cls.CHROME_NO_SANDBOX,
|
||
'disable_dev_shm': cls.CHROME_DISABLE_DEV_SHM,
|
||
})
|
||
elif cls.BROWSER_NAME == 'firefox':
|
||
options.update({
|
||
'headless': cls.FIREFOX_HEADLESS,
|
||
})
|
||
|
||
return options
|
||
|
||
@classmethod
|
||
def get_wait_config(cls) -> Dict[str, Any]:
|
||
"""Получение конфигурации ожиданий"""
|
||
return {
|
||
'implicit': cls.IMPLICIT_WAIT,
|
||
'explicit': cls.EXPLICIT_WAIT,
|
||
'page_load': cls.PAGE_LOAD_TIMEOUT,
|
||
'script': cls.SCRIPT_TIMEOUT,
|
||
}
|
||
|
||
# Экспорт конфигурации
|
||
ui_config = UIConfig
|