Skip to content

UserCard

Модуль компонента карточки пользователя.

Содержит класс для работы с карточкой пользователя через Playwright.

UserCard

Bases: BaseComponent

Компонент карточка.

Предоставляет методы для взаимодействия с элементами карточки.

Source code in components_derived\user_card.py
 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
137
138
139
140
141
142
143
144
145
146
147
148
class UserCard(BaseComponent):
    """Компонент карточка.

    Предоставляет методы для взаимодействия с элементами карточки.
    """

    def __init__(self, page: Page):
        """Инициализирует компонент карточки.

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

        super().__init__(page)

        card_locator = page.locator(UserCardLocators.CARD_USER)

        # Обновленные локаторы согласно новой структуре карточки
        self.current_user_name = Text(
            page,
            card_locator.locator("xpath=/div/div[1]"),  # Изменено с div[2] на div[1]
            "current user name"
        )
        self.current_user_role = Text(
            page,
            card_locator.locator("xpath=/div/div[2]"),  # Изменено с div[3] на div[2]
            "current user role"
        )
        self.login_time = Text(
            page,
            card_locator.locator("xpath=/div/div[3]"),  # Изменено с div[4] на div[3]
            "login time"
        )
        self.session_time = Text(
            page,
            card_locator.locator("xpath=/div/div[4]"),  # Изменено с div[5] на div[4]
            "session time"  # Исправлено имя с "current user name" на "session time"
        )
        self.logout_button = Button(
            page,
            page.get_by_role("button", name="Выйти"),
            "logout button"
        )
        self.change_password_button = Button(
            page,
            page.get_by_role("button", name="Изменить пароль"),
            "change password button"
        )
        self.settings_button = Button(
            page,
            page.get_by_role("button", name="Настройки"),
            "settings button"
        )

        # окна, отрываемые после нажатия кнопок
        self.user_settings_dialog_window = UserSettingsDialogWindow(page)
        self.change_password_modal_window = ChangePasswordModalWindow(page)

    # Действия:
    def click_change_password_button(self) -> ChangePasswordModalWindow:
        """Нажимает кнопку открытия окна изменения пароля.

        Выполняет клик по кнопке 'Изменить пароль' в карточке пользователя.
        """

        self.change_password_button.click()
        return self.change_password_modal_window

    def click_logout_button(self) -> None:
        """Нажимает кнопку выхода из системы.

        Выполняет клик по кнопке 'Выйти' в карточке пользователя.
        """

        self.logout_button.click()

    def click_settings_button(self) -> UserSettingsDialogWindow:
        """Нажимает кнопку открытия окна пользовательских сессий.

        Выполняет клик по кнопке 'Настройки' в карточке пользователя.
        """

        self.settings_button.click()
        return self.user_settings_dialog_window

    # Проверки:
    def check_content(self) -> None:
        """Проверяет наличие и корректность элементов карточки пользователя
           в зависимости от его роли в системе."""

        current_user_credential = host.get_current_user_credential()

        name = current_user_credential["login"]
        text_to_check = f"Имя пользователя: {name}"
        self.current_user_name.check_have_text(
            text_to_check,
            f"Expected text {text_to_check} is missing in user card"
        )

        role = roles_dict.get(current_user_credential["role"])
        if role is None:
            assert False, "Unknown user role in current user credential"
        text_to_check = f"Роль: {role}"
        self.current_user_role.check_have_text(
            text_to_check,
            f"Expected text {text_to_check} is missing in user card"
        )

        login_time_str = self.login_time.get_text(0)
        assert login_time_str.find("Время входа:") != -1, (
            "Expected text 'Время входа:' is missing in user card"
        )
        session_time_str = self.session_time.get_text(0)
        assert session_time_str.find("Время сессии:") != -1, (
            "Expected text 'Время сессии:' is missing in user card"
        )

        self.logout_button.check_visibility(
            "Logout button is missing on user card"
        )
        self.change_password_button.check_visibility(
            "Change password button is missing on user card"
        )

        admin_roles = ["Администратор", "Специалист информационной безопасности"]
        if role in admin_roles:
            self.settings_button.check_visibility(
                "Settings button is missing on user card"
            )

__init__(page)

Инициализирует компонент карточки.

Parameters:

Name Type Description Default
page Page

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

required
Source code in components_derived\user_card.py
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
def __init__(self, page: Page):
    """Инициализирует компонент карточки.

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

    super().__init__(page)

    card_locator = page.locator(UserCardLocators.CARD_USER)

    # Обновленные локаторы согласно новой структуре карточки
    self.current_user_name = Text(
        page,
        card_locator.locator("xpath=/div/div[1]"),  # Изменено с div[2] на div[1]
        "current user name"
    )
    self.current_user_role = Text(
        page,
        card_locator.locator("xpath=/div/div[2]"),  # Изменено с div[3] на div[2]
        "current user role"
    )
    self.login_time = Text(
        page,
        card_locator.locator("xpath=/div/div[3]"),  # Изменено с div[4] на div[3]
        "login time"
    )
    self.session_time = Text(
        page,
        card_locator.locator("xpath=/div/div[4]"),  # Изменено с div[5] на div[4]
        "session time"  # Исправлено имя с "current user name" на "session time"
    )
    self.logout_button = Button(
        page,
        page.get_by_role("button", name="Выйти"),
        "logout button"
    )
    self.change_password_button = Button(
        page,
        page.get_by_role("button", name="Изменить пароль"),
        "change password button"
    )
    self.settings_button = Button(
        page,
        page.get_by_role("button", name="Настройки"),
        "settings button"
    )

    # окна, отрываемые после нажатия кнопок
    self.user_settings_dialog_window = UserSettingsDialogWindow(page)
    self.change_password_modal_window = ChangePasswordModalWindow(page)

check_content()

Проверяет наличие и корректность элементов карточки пользователя в зависимости от его роли в системе.

Source code in components_derived\user_card.py
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
137
138
139
140
141
142
143
144
145
146
147
148
def check_content(self) -> None:
    """Проверяет наличие и корректность элементов карточки пользователя
       в зависимости от его роли в системе."""

    current_user_credential = host.get_current_user_credential()

    name = current_user_credential["login"]
    text_to_check = f"Имя пользователя: {name}"
    self.current_user_name.check_have_text(
        text_to_check,
        f"Expected text {text_to_check} is missing in user card"
    )

    role = roles_dict.get(current_user_credential["role"])
    if role is None:
        assert False, "Unknown user role in current user credential"
    text_to_check = f"Роль: {role}"
    self.current_user_role.check_have_text(
        text_to_check,
        f"Expected text {text_to_check} is missing in user card"
    )

    login_time_str = self.login_time.get_text(0)
    assert login_time_str.find("Время входа:") != -1, (
        "Expected text 'Время входа:' is missing in user card"
    )
    session_time_str = self.session_time.get_text(0)
    assert session_time_str.find("Время сессии:") != -1, (
        "Expected text 'Время сессии:' is missing in user card"
    )

    self.logout_button.check_visibility(
        "Logout button is missing on user card"
    )
    self.change_password_button.check_visibility(
        "Change password button is missing on user card"
    )

    admin_roles = ["Администратор", "Специалист информационной безопасности"]
    if role in admin_roles:
        self.settings_button.check_visibility(
            "Settings button is missing on user card"
        )

click_change_password_button()

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

Выполняет клик по кнопке 'Изменить пароль' в карточке пользователя.

Source code in components_derived\user_card.py
79
80
81
82
83
84
85
86
def click_change_password_button(self) -> ChangePasswordModalWindow:
    """Нажимает кнопку открытия окна изменения пароля.

    Выполняет клик по кнопке 'Изменить пароль' в карточке пользователя.
    """

    self.change_password_button.click()
    return self.change_password_modal_window

click_logout_button()

Нажимает кнопку выхода из системы.

Выполняет клик по кнопке 'Выйти' в карточке пользователя.

Source code in components_derived\user_card.py
88
89
90
91
92
93
94
def click_logout_button(self) -> None:
    """Нажимает кнопку выхода из системы.

    Выполняет клик по кнопке 'Выйти' в карточке пользователя.
    """

    self.logout_button.click()

click_settings_button()

Нажимает кнопку открытия окна пользовательских сессий.

Выполняет клик по кнопке 'Настройки' в карточке пользователя.

Source code in components_derived\user_card.py
 96
 97
 98
 99
100
101
102
103
def click_settings_button(self) -> UserSettingsDialogWindow:
    """Нажимает кнопку открытия окна пользовательских сессий.

    Выполняет клик по кнопке 'Настройки' в карточке пользователя.
    """

    self.settings_button.click()
    return self.user_settings_dialog_window