From 855d6810fa91c5492f29dbb9645f5e2b8234f1c4 Mon Sep 17 00:00:00 2001 From: Radislav Date: Tue, 22 Jul 2025 08:30:39 +0300 Subject: [PATCH] =?UTF-8?q?feat(base=5Felement):=20=D0=B4=D0=BE=D0=B1?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D1=8B=20=D0=B0=D0=BD=D0=BD=D0=BE?= =?UTF-8?q?=D1=82=D0=B0=D1=86=D0=B8=D0=B8=20=D1=82=D0=B8=D0=BF=D0=BE=D0=B2?= =?UTF-8?q?=20=D0=B4=D0=BB=D1=8F=20=D0=B1=D0=B0=D0=B7=D0=BE=D0=B2=D0=BE?= =?UTF-8?q?=D0=B3=D0=BE=20=D1=8D=D0=BB=D0=B5=D0=BC=D0=B5=D0=BD=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - обавлены аннотации для параметров методов: * msg: str в check_have_text() и check_presence() * timeout: int в wait_for_element(), is_present(), is_not_present() - обавлены возвращаемые типы: * -> None для методов click(), wait_for_element(), check_have_text(), check_presence() * -> bool для is_present() и is_not_present() - обавлена аннотация типа для атрибута locator: Locator зменения улучшают статическую проверку типов и документирование. --- elements/base_element.py | 72 ++++------------------------------------ 1 file changed, 6 insertions(+), 66 deletions(-) diff --git a/elements/base_element.py b/elements/base_element.py index e36187d..0bf25c1 100644 --- a/elements/base_element.py +++ b/elements/base_element.py @@ -1,4 +1,5 @@ from playwright.sync_api import Page, Locator, expect, TimeoutError +from typing import Optional from tools.logger import get_logger @@ -6,27 +7,12 @@ logger = get_logger("BASE_ELEMENT") class BaseElement: - """Базовый класс для работы с элементами страницы. - - Атрибуты: - page: Экземпляр страницы Playwright. - name: Название элемента (для логирования). - locator: Локатор элемента (строка или объект Locator). - """ + """Базовый класс для работы с элементами страницы.""" def __init__(self, page: Page, locator: str | Locator, name: str) -> None: - """Инициализирует базовый элемент страницы. - - Args: - page: Экземпляр страницы Playwright. - locator: Локатор элемента (строка или объект Locator). - name: Название элемента (для логирования). - - Raises: - TypeError: Если передан некорректный тип локатора. - """ self.page = page self.name = name + self.locator: Locator if isinstance(locator, Locator): self.locator = locator @@ -37,70 +23,32 @@ class BaseElement: @property def type_of(self) -> str: - """Возвращает тип элемента. - - Returns: - Строка с описанием типа элемента. - """ return "base element" # Действия: def click(self) -> None: - """Кликает на элемент.""" logger.info(f'Clicking {self.type_of} "{self.name}"') self.locator.click() def get_text(self, index: int) -> str: - """Получает текст элемента по указанному индексу. - - Args: - index: Индекс элемента (0 для единичного локатора). - - Returns: - Текст элемента. - """ logger.info(f'Get text for {self.type_of} "{self.name}"') return self.locator.nth(index).text_content() - def wait_for_element(self, timeout=12000) -> None: - """Ожидает появления элемента на странице. - - Args: - timeout: Время ожидания в миллисекундах. - """ + def wait_for_element(self, timeout: int = 12000) -> None: logger.info(f'Wait for {self.type_of} "{self.name}"') self.locator.wait_for(timeout=timeout) # Проверки: - def check_have_text(self, text: str, msg): - """Проверяет, что элемент содержит указанный текст. - - Args: - text: Ожидаемый текст. - msg: Сообщение об ошибке при неудачной проверке. - """ + def check_have_text(self, text: str, msg: str) -> None: logger.info(f'Check that {self.type_of} "{self.name}" has text "{text}"') expect(self.locator).to_have_text(text), msg - def check_presence(self, msg): - """Проверяет видимость элемента на странице. - - Args: - msg: Сообщение об ошибке при неудачной проверке. - """ + def check_presence(self, msg: str) -> None: logger.info(f'Check that {self.type_of} "{self.name}" is present') print(self.locator) expect(self.locator).to_be_visible(visible=True, timeout=12000), msg def is_present(self, timeout: int = 5000) -> bool: - """Проверяет наличие элемента на странице. - - Args: - timeout: Время ожидания в миллисекундах. - - Returns: - True, если элемент присутствует, иначе False. - """ logger.info(f'Check that {self.type_of} "{self.name}" is present') try: self.locator.wait_for(timeout=timeout) @@ -109,14 +57,6 @@ class BaseElement: return True def is_not_present(self, timeout: int = 5000) -> bool: - """Проверяет отсутствие элемента на странице. - - Args: - timeout: Время ожидания в миллисекундах. - - Returns: - True, если элемент отсутствует, иначе False. - """ logger.info(f'Check that {self.type_of} "{self.name}" is missing') try: self.locator.wait_for(timeout=timeout)