Исходный код pages.login_page

"""Модуль страницы авторизации.

Содержит класс LoginPage для работы с элементами страницы входа в систему.
Использует Playwright для взаимодействия с UI и обработки ответов сервера.
"""

from playwright.sync_api import Page
from locators.text_input_locators import TextInputLocators
from elements.text_input_element import TextInput
from elements.icon_element import Icon
from elements.button_element import Button
from data.environment import host
from data.constants import Constants
from components.alert_component import AlertComponent
from pages.base_page import BasePage

[документация] class LoginPage(BasePage): """Класс для работы со страницей авторизации. Атрибуты: page: Экземпляр страницы Playwright. login_input: Поле ввода логина. password_input: Поле ввода пароля. login_button: Кнопка входа. alert: Алерт окно с сообщением об ошибке. """
[документация] def __init__(self, page: Page) -> None: """Инициализирует элементы страницы авторизации. Args: page: Экземпляр страницы Playwright. """ super().__init__(page) self.login_input = TextInput(page, page.get_by_label("Имя пользователя"), "login input") self.password_input = TextInput(page, page.get_by_label("Пароль"), "password input") icon_locator = page.get_by_label("Пароль").locator("xpath=../..").locator(TextInputLocators.ICON_PASSWORD_HIDING) self.password_hidden_icon = Icon(page, icon_locator, "password hidden icon") self.login_button = Button(page, page.get_by_role("button"), "login button") self.alert = AlertComponent(page)
# Действия:
[документация] def click_password_hidden_icon(self) -> None: """Нажатие на иконку скрытия пароля.""" self.password_hidden_icon.click()
[документация] def do_login(self, username: str = None, password: str = None) -> None: """Выполняет вход в систему. Использует переданные учетные данные или значения из Constants. Обрабатывает ответ сервера для получения токена доступа. Args: username: Логин пользователя. По умолчанию из Constants. password: Пароль пользователя. По умолчанию из Constants. Raises: AssertionError: Если после входа открылась неожиданная страница. """ def handle_response(response): if "login" in response.url: response_body = self.get_response_body(response) if response_body: host.set_current_user_credential(response_body) self.page.on("response", handle_response) self.open("") # Используем переданные значения или значения по умолчанию из Constants actual_username = username if username is not None else Constants.login actual_password = password if password is not None else Constants.password self.login_input.clear() self.login_input.input_value(actual_username) self.password_input.clear() self.password_input.input_value(actual_password) self.login_button.click() self.check_URL("dashboard", "An unexpected page has been opened")
[документация] def do_unsuccessful_login(self, username: str = "someuser", password: str = "password") -> None: """Выполняет попытку входа с неверными учетными данными. Проверяет наличие сообщения об ошибке. Можно передать свои данные или использовать значения по умолчанию. Args: username: Неверный логин. По умолчанию "someuser". password: Неверный пароль. По умолчанию "password". """ self.open("") self.login_input.clear() self.login_input.input_value(username) self.password_input.clear() self.password_input.input_value(password) self.login_button.click() alert_type = self.alert.get_alert_type() assert alert_type=="error", f"Expected error alert, but got {alert_type} alert" self.alert.check_alert_presence("Неверная пара логин/пароль") self.alert.check_alert_absence("Неверная пара логин/пароль")
# Проверки:
[документация] def is_password_icon_hidden(self) -> bool: """Проверяет состояние иконки скрытия символов пароля. Возвращает True если пароль будет скрыт, иначе False """ return self.password_hidden_icon.is_password_hidden()
[документация] def is_password_hidden(self) -> bool: """Проверяет видимость символов пароля.""" input_type = self.password_input.get_input_type() if input_type == "password": return True elif input_type == "text": return False else: assert False, "Check password hidden error"