"""Модуль text_input_element содержит класс для работы с текстовыми полями ввода.
Класс TextInput наследует базовый функционал BaseElement и предоставляет
методы для взаимодействия с текстовыми полями ввода на странице.
"""
from playwright.sync_api import expect
from tools.logger import get_logger
from elements.base_element import BaseElement
logger = get_logger("TEXT_INPUT")
[документация]
class TextInput(BaseElement):
"""Класс для работы с текстовыми полями ввода.
Наследует функциональность BaseElement и добавляет методы
для ввода, очистки и проверки текстовых полей.
"""
@property
def type_of(self) -> str:
"""Возвращает тип элемента ('текстовое поле ввода').
Returns:
str: Тип элемента - 'текстовое поле ввода'.
"""
return "text input"
# Действия:
[документация]
def get_input_value(self) -> str:
"""Возвращает текущее значение поля ввода.
Returns:
str: Текущее значение в поле.
"""
logger.info(f'Getting value from text input "{self.name}"')
return self.locator.input_value()
[документация]
def get_input_type(self) -> str:
"""Возвращает значение аттрибута type поля ввода.
Returns:
str: Значение аттрибута type.
"""
return self.locator.get_attribute("type")
[документация]
def decrease_value(self) -> None:
"""Уменьшение на единицу значения поля настройки с помощью стрелочки вниз."""
logger.info(f'Decrease input value for "{self.name}"')
attr = self.locator.get_attribute("type")
assert attr=="number", "Field type should be number to increase value"
self.locator.hover()
self.locator.wait_for(timeout=500)
self.locator.press('ArrowDown')
self.locator.wait_for(timeout=500)
[документация]
def increase_value(self) -> None:
"""Увеличение на единицу значения поля настройки с помощью стрелочки вверх."""
logger.info(f'Increase input value for "{self.name}"')
attr = self.locator.get_attribute("type")
assert attr=="number", "Field type should be number to increase value"
self.locator.hover()
self.locator.wait_for(timeout=500)
self.locator.press('ArrowUp')
self.locator.wait_for(timeout=500)
[документация]
def input_value(self, value: str) -> None:
"""Вводит указанное значение в поле.
Args:
value (str): Значение для ввода.
"""
logger.info(f'Inputting value "{value}" to text input "{self.name}"')
self.locator.fill(value)
[документация]
def clear(self) -> None:
"""Очищает содержимое текстового поля."""
logger.info(f'Clearing text input "{self.name}"')
self.locator.press('Control+A')
self.locator.press('Backspace')
# Проверки:
[документация]
def check_empty_input(self, msg: str) -> None:
"""Проверяет, что поле ввода пустое.
Args:
msg (str): Сообщение об ошибке при неудачной проверке.
Raises:
AssertionError: Если поле не пустое.
"""
logger.info(f'Checking that text input "{self.name}" is empty')
expect(self.locator).to_be_empty(), msg
[документация]
def check_editable_input(self, msg: str) -> None:
"""Проверяет, что поле ввода редактируемое.
Args:
msg (str): Сообщение об ошибке при неудачной проверке.
Raises:
AssertionError: Если поле не пустое.
"""
logger.info(f'Checking that text input "{self.name}" is editable')
expect(self.locator).to_be_editable(), msg