e-nms_qa_automation/pages/login_page.py

103 lines
4.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

"""Модуль страницы авторизации.
Содержит класс 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("Неверная пара логин/пароль")