Исходный код components_derived.date_input_component

"""Модуль компонента задания даты и времени.

Содержит класс для работы с компонентом задания даты и времени через Playwright.
"""

from playwright.sync_api import Page, Locator, expect
from tools.logger import get_logger
# from elements.text_element import Text
from elements.text_input_element import TextInput
from elements.button_element import Button
from components.date_picker_component import DatePickerComponent
from components.base_component import BaseComponent

logger = get_logger("DATE_INPUT")


[документация] class DateInput(BaseComponent): """Компонент задания даты и времени. Предоставляет методы для взаимодействия с элементами компонентом задания даты и времени. """
[документация] def __init__(self, page: Page, locator: str | Locator): """Инициализирует компонент задания даты и времени. Args: page: Экземпляр страницы Playwright. locator: Локатор формы ввода даты и времени (строка или объект Locator) """ super().__init__(page) self.date_input_locator = self.get_locator(locator) self.switch_mode_button = Button(page, self.date_input_locator.get_by_role("button"), "switch_mode_button") loc = self.date_input_locator.get_by_placeholder("дд.мм.гггг") self.date_input_field = TextInput(page, loc, "date_input") loc = self.date_input_locator.get_by_placeholder("00:00") self.time_input_field = TextInput(page, loc, "time_input") self.date_picker = DatePickerComponent(self.page)
# Действия:
[документация] def click_switch_mode_button(self) -> None: """ Нажатие на кнопку переключения режимов ввода (текстовый или календарь).""" self.switch_mode_button.click()
[документация] def get_date_picker(self) -> DatePickerComponent: """ Возвращает экземпляр компонента средства выбора даты. """ return self.date_picker
[документация] def get_date_field_value(self) -> str: """ Возвращает текущее значение поля ввода даты. """ return self.date_input_field.get_input_value()
[документация] def get_time_field_value(self) -> str: """ Возвращает текущее значение поля ввода времени. """ return self.time_input_field.get_input_value()
[документация] def input_date(self, date: str) -> None: """ Ввод даты в формате дд.мм.гггг """ day, month, year = date.split('.') assert len(day) == 2, "Incorrect day format: should be 'dd.mm.yyyy'" assert len(month) == 2, "Incorrect month format: should be 'dd.mm.yyyy'" assert len(year) == 4, "Incorrect year format: should be 'dd.mm.yyyy'" try: _ = int(day) except ValueError: assert False, f"Incorrect day value {day} for selection" try: _ = int(month) except ValueError: assert False, f"Incorrect month value {month} for selection" try: _ = int(year) except ValueError: assert False, f"Incorrect year value {year} for selection" if self.is_text_input_mode(): self.date_input_field.check_editable_input("Text field for date input should be editable") self.date_input_field.clear() self.date_input_field.input_value(date) else: self.date_picker.select_year_and_month(year, month) self.date_picker.select_day(day)
[документация] def input_time(self, time: str) -> None: """ Ввод даты в формате чч:мм """ hours, minutes = time.split(':') assert len(hours) == 2, "Incorrect time format: should be 'hh:mm'" assert len(minutes) == 2, "Incorrect time format: should be 'hh:mm'" try: _ = int(hours) except ValueError: assert False, f"Incorrect hours value {hours} for selection" try: _ = int(minutes) except ValueError: assert False, f"Incorrect minutes value {minutes} for selection" self.time_input_field.check_editable_input("Text field for date input should be editable") self.time_input_field.clear() self.time_input_field.input_value(time)
# Проверки:
[документация] def check_content(self, label: str) -> None: """Проверка состава компонента ввода даты.""" self.check_switch_mode_button_visibility() label_locator = self.date_input_locator.get_by_label(label) expect(label_locator).to_be_visible() self.date_input_field.check_visibility("Text field for date input is missing") self.date_input_field.check_empty_input("Text field for date input should be empty") self.click_switch_mode_button() self.page.wait_for_timeout(300) self.click_switch_mode_button() self.page.wait_for_timeout(300) self.date_picker.check_content() self.click_switch_mode_button() self.click_switch_mode_button() self.page.wait_for_timeout(300) self.input_date("11.11.2011") label_locator = self.date_input_locator.get_by_label("Время") expect(label_locator).to_be_visible() self.time_input_field.check_visibility("Text field for time input is missing") current_time_value = self.get_time_field_value() assert current_time_value == "00:00", \ "Should be empty time input field"
[документация] def check_switch_mode_button_visibility(self) -> None: """ Проверка видимости кнопки переключения режимов ввода.""" self.switch_mode_button.check_visibility("Switch Mode Button is missing")
[документация] def is_text_input_mode(self) -> bool: """ Проверка текстового режима ввода.""" result = False inner_text = self.switch_mode_button.get_text(0).strip() if inner_text == "keyboard": result = True return result