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