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
 15
 16
 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
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")
        self.login_button = Button(page, page.get_by_role("button"), "login button")

        self.alert = AlertComponent(page)

    # Действия:
    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()

        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("Неверная пара логин/пароль")

__init__(page)

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

Parameters:

Name Type Description Default
page Page

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

required
Source code in pages\login_page.py
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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.alert = AlertComponent(page)

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
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
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")

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
 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
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("Неверная пара логин/пароль")