103 lines
4.3 KiB
Python
103 lines
4.3 KiB
Python
"""Модуль страницы авторизации.
|
||
|
||
Содержит класс LoginPage для работы с элементами страницы входа в систему.
|
||
Использует Playwright для взаимодействия с UI и обработки ответов сервера.
|
||
"""
|
||
|
||
from playwright.sync_api import Page
|
||
from elements.text_input_element import TextInput
|
||
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: Кнопка входа.
|
||
error_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")
|
||
self.login_button = Button(page, page.get_by_role("button"), "login button")
|
||
|
||
self.error_alert = AlertComponent(page, "error")
|
||
|
||
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:
|
||
token = response_body.get("access_token")
|
||
host.set_access_token(token)
|
||
|
||
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()
|
||
|
||
self.error_alert.check_alert_presence("Неверная пара логин/пароль")
|
||
self.error_alert.check_alert_absence("Неверная пара логин/пароль")
|