Модуль страницы авторизации.
Содержит класс 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
| 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
| def is_password_icon_hidden(self) -> bool:
"""Проверяет состояние иконки скрытия символов пароля.
Возвращает True если пароль будет скрыт, иначе False
"""
return self.password_hidden_icon.is_password_hidden()
|