diff --git a/pages/base_page.py b/pages/base_page.py index f25424f..6b8c701 100644 --- a/pages/base_page.py +++ b/pages/base_page.py @@ -1,9 +1,7 @@ -"""Базовый класс страницы для работы с Playwright. - -Содержит общие методы для взаимодействия со страницей и API. -""" +"""Базовый класс страницы для работы с Playwright.""" from playwright.sync_api import Page, Response, APIRequestContext, expect +from typing import Any, Dict, List, Optional from data.environment import host from tools.logger import get_logger import json @@ -12,69 +10,28 @@ logger = get_logger("BASE_PAGE") class BasePage: - """Базовый класс для работы со страницами через Playwright. + """Базовый класс для работы со страницами через Playwright.""" - Атрибуты: - page (Page): Экземпляр страницы Playwright. - """ - - def __init__(self, page: Page): - """Инициализирует базовую страницу. - - Args: - page (Page): Экземпляр страницы Playwright. - """ + def __init__(self, page: Page) -> None: self.page = page # Действия: def current_url(self) -> str: - """Возвращает текущий URL страницы. - - Returns: - str: Текущий URL страницы. - """ return self.page.url - def open(self, uri) -> Response | None: - """Открывает указанный URI в браузере. - - Args: - uri (str): URI для открытия (без базового URL). - - Returns: - Response | None: Ответ сервера или None в случае ошибки. - """ + def open(self, uri: str) -> Optional[Response]: return self.page.goto(f"{host.get_base_url()}{uri}", wait_until='domcontentloaded') def page_reload(self) -> None: - """Перезагружает текущую страницу.""" self.page.reload() - def wait_for_timeout(self, timeout): - """Ожидает указанное количество миллисекунд. - - Args: - timeout (int): Время ожидания в миллисекундах. - """ + def wait_for_timeout(self, timeout: int) -> None: self.page.wait_for_timeout(timeout) def get_api_request_context(self) -> APIRequestContext: - """Возвращает контекст API-запросов. - - Returns: - APIRequestContext: Контекст для выполнения API-запросов. - """ return self.page.context.request - def send_get_api_request(self, uri) -> Response: - """Отправляет GET-запрос к API. - - Args: - uri (str): URI API-эндпоинта (без базового URL). - - Returns: - Response: Ответ сервера. - """ + def send_get_api_request(self, uri: str) -> Response: api_request_context = self.get_api_request_context() token = host.get_access_token() headers = {"Accept": "application/json", "Authorization": f"Bearer {token}"} @@ -84,16 +41,7 @@ class BasePage: ) return response - def send_post_api_request(self, uri, payload) -> Response: - """Отправляет POST-запрос к API. - - Args: - uri (str): URI API-эндпоинта (без базового URL). - payload: Данные для отправки в теле запроса. - - Returns: - Response: Ответ сервера. - """ + def send_post_api_request(self, uri: str, payload: Dict[str, Any]) -> Response: api_request_context = self.get_api_request_context() token = host.get_access_token() headers = {"Accept": "application/json", "Authorization": f"Bearer {token}"} @@ -104,15 +52,7 @@ class BasePage: ) return response - def get_response_body(self, response) -> dict | None: - """Извлекает тело ответа в формате JSON. - - Args: - response (Response): Ответ сервера. - - Returns: - dict | None: Распарсенное тело ответа или None в случае ошибки. - """ + def get_response_body(self, response: Response) -> Optional[Dict[str, Any]]: try: response_body = response.json() except json.JSONDecodeError: @@ -122,54 +62,16 @@ class BasePage: # Проверки: def check_URL(self, uri: str, msg: str) -> None: - """Проверяет, что текущий URL соответствует ожидаемому. - - Args: - uri (str): Ожидаемый URI (без базового URL). - msg (str): Сообщение об ошибке при несоответствии. - - Raises: - AssertionError: Если URL не соответствует ожидаемому. - """ expect(self.page).to_have_url( f"{host.get_base_url()}{uri}", timeout=60000 ), msg - def check_equals(self, actual, expected, msg: str) -> None: - """Проверяет равенство фактического и ожидаемого значений. - - Args: - actual: Фактическое значение. - expected: Ожидаемое значение. - msg (str): Сообщение об ошибке при несоответствии. - - Raises: - AssertionError: Если значения не равны. - """ + def check_equals(self, actual: Any, expected: Any, msg: str) -> None: assert actual == expected, msg - def check_lists_equals(self, actual: list, expected: list, msg: str) -> None: - """Рекурсивно проверяет равенство двух списков. - - Args: - actual (list): Фактический список. - expected (list): Ожидаемый список. - msg (str): Сообщение об ошибке при несоответствии. - - Raises: - AssertionError: Если списки не равны. - """ - def compare_lists(list1: list, list2: list) -> bool: - """Вспомогательная функция для рекурсивного сравнения списков. - - Args: - list1 (list): Первый список для сравнения. - list2 (list): Второй список для сравнения. - - Returns: - bool: True если списки идентичны, иначе False. - """ + def check_lists_equals(self, actual: List[Any], expected: List[Any], msg: str) -> None: + def compare_lists(list1: List[Any], list2: List[Any]) -> bool: if len(list1) != len(list2): return False for item1, item2 in zip(list1, list2):