Skip to content

LoginPage

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

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

LoginPage

Bases: BasePage

Класс для работы со страницей авторизации.

Атрибуты

page: Экземпляр страницы Playwright. login_input: Поле ввода логина. password_input: Поле ввода пароля. login_button: Кнопка входа. alert: Алерт окно с сообщением об ошибке.

Source code in pages\login_page.py
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
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"

__init__(page)

Инициализирует элементы страницы авторизации.

Parameters:

Name Type Description Default
page Page

Экземпляр страницы Playwright.

required
Source code in pages\login_page.py
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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)

click_password_hidden_icon()

Нажатие на иконку скрытия пароля.

Source code in pages\login_page.py
49
50
51
52
def click_password_hidden_icon(self) -> None:
    """Нажатие на иконку скрытия пароля."""

    self.password_hidden_icon.click()

do_login(username=None, password=None)

Выполняет вход в систему.

Использует переданные учетные данные или значения из Constants. Обрабатывает ответ сервера для получения токена доступа.

Parameters:

Name Type Description Default
username str

Логин пользователя. По умолчанию из Constants.

None
password str

Пароль пользователя. По умолчанию из Constants.

None

Raises:

Type Description
AssertionError

Если после входа открылась неожиданная страница.

Source code in pages\login_page.py
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
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")

do_unsuccessful_login(username='someuser', password='password')

Выполняет попытку входа с неверными учетными данными.

Проверяет наличие сообщения об ошибке. Можно передать свои данные или использовать значения по умолчанию.

Parameters:

Name Type Description Default
username str

Неверный логин. По умолчанию "someuser".

'someuser'
password str

Неверный пароль. По умолчанию "password".

'password'
Source code in pages\login_page.py
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
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("Неверная пара логин/пароль")

is_password_hidden()

Проверяет видимость символов пароля.

Source code in pages\login_page.py
127
128
129
130
131
132
133
134
135
136
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"

is_password_icon_hidden()

Проверяет состояние иконки скрытия символов пароля. Возвращает True если пароль будет скрыт, иначе False

Source code in pages\login_page.py
120
121
122
123
124
125
def is_password_icon_hidden(self) -> bool:
    """Проверяет состояние иконки скрытия символов пароля.
       Возвращает True если пароль будет скрыт, иначе False
    """

    return self.password_hidden_icon.is_password_hidden()