Compare commits

...

77 Commits

Author SHA1 Message Date
nsubbot e3804bd9c9 Актуализация тестов после перехода на версию приложения 1.40 2026-04-28 13:34:05 +03:00
Radislav a07cb43b80 Merge branch 'main' of http://192.168.2.61/AlexL/e-nms_qa_automation 2026-04-24 08:11:47 +03:00
Radislav 06e680675c fix: исправлен выбор пользователей в правилах доступа стойки
- Добавлен скроллинг в выпадающем списке
- Исправлено частичное совпадение имен пользователей
- Добавлена проверка на уже выбранных пользователей
2026-04-24 08:08:22 +03:00
nsubbot 18f7873145 Актуализация тестов панели событий в соответствии с последними изменениями UI 2026-04-16 14:06:05 +03:00
nsubbot e926b04a14 Актуализация тестов работы с пользователями в соответствии с последними изменениями UI 2026-04-15 09:45:48 +03:00
nsubbot 57d8a0466d Актуализация тестов панели 'Настройки' в соответствии с последними изменениями UI 2026-04-13 09:58:02 +03:00
nsubbot cab4f18f55 Актуализация тестов компоненент ввода даты в панелях фильтрации в соответствии с последними изменениями UI 2026-04-07 15:55:21 +03:00
nsubbot bfb4082a2d Актуализация тестов тестов скроллинга в соответствии с последними изменениями UI 2026-04-07 13:17:16 +03:00
nsubbot db50e80c51 Актуализация тестов после перехода на версию 1.39 2026-04-07 10:12:09 +03:00
nsubbot 82a28dda72 Добавлены тесты для работы с обязательными полями при пересоздании сертификатов 2026-04-03 10:51:30 +03:00
nsubbot 085d8c4ec7 Добавлены тесты для вкладки 'Сертификаты' 2026-04-02 14:23:46 +03:00
nsubbot 384ee4e15e Актуализация тестов после перехода на версию 1.38 2026-03-31 11:49:44 +03:00
nsubbot 036f86efad Актуализированы тесты панели событий 2026-03-23 15:20:25 +03:00
Radislav e1e166b878 Добавлены тесты поля Имя 2026-03-20 11:21:47 +03:00
Radislav 713cfd6126 Изменены тексты Alert окон 2026-03-13 09:42:49 +03:00
Radislav f075024386 refactor: унификация работы с формами создания и редактирования стоек
- Добавлен базовый класс BaseRackForm с общей логикой для работы с формами
2026-03-13 08:23:28 +03:00
Radislav b024fac0d8 refactor: переименовать InteractiveDropdownList в CheckboxGroupComponent
- Переименование и перенос компонента в папку components
- Обновление импортов
- Расширение функционала компонента
2026-03-12 15:45:17 +03:00
Radislav 0295852986 refactor: унификация работы с формами создания и редактирования стоек
- Добавлен базовый класс BaseRackForm с общей логикой для работы с формами
- Вынесена общая функциональность по заполнению полей, очистке и проверке ошибок
- Упрощены классы CreateRackForm и EditRackForm за счет наследования от BaseRackForm
- Обновлены зависимые компоненты (create_element_frame, edit_rack_maker)
- Исправлены тесты создания стойки с учетом новой архитектуры
2026-03-11 14:14:15 +03:00
Radislav 4fff4835f1 refactor: реорганизация структуры проекта
- Изменены (test_edit_rack.py, test_management_rack.py)
2026-03-06 11:54:03 +03:00
Radislav ca7c69c423 refactor: реорганизация структуры проекта
- Добавлены forms/ (create_rack_form.py, edit_rack_form.py)
- Добавлены makers/ (edit_rack_maker.py)
- Добавлены frames/ (create_element_frame.py)
- Добавлен тест test_create_rack.py
- Удалены устаревшие файлы из components_derived
- Обновлены alert_component.py и rack_locators.py
2026-03-06 11:41:06 +03:00
nsubbot 0509d5bee3 Добавлены тесты вкладки 'Резервное копирование' 2026-03-06 09:08:55 +03:00
nsubbot afb611dae9 Минорные исправления тестов после перехода на версию 1.33 2026-03-02 10:46:47 +03:00
Radislav 5f518f0aa7 Переименован test_image.jpg в test_edit_rack_image.jpg 2026-02-27 08:34:25 +03:00
Radislav dd87041fd0 Добавлена функциональность редактирования и управления стойками 2026-02-27 08:25:00 +03:00
Radislav 681b0ff99d тесты: обновление тестов для управления стойками 2026-02-25 13:43:03 +03:00
Radislav 04bf299194 Актуализация тестов после перехода на версию 1.33 2026-02-25 13:21:07 +03:00
nsubbot abf1a89bc3 Актуализация тестов после перехода на версию 1.33 2026-02-25 09:07:32 +03:00
Radislav c38cf601cb Добавлен тест редактирования Стойки 2026-02-20 13:12:29 +03:00
Radislav b5c1ee5d23 Добавлен тест редактирования Стойки 2026-02-20 11:45:39 +03:00
nsubbot 4ad79b108b Добавлена проверка индикатора статуса в панели навигации 2026-02-19 16:43:40 +03:00
nsubbot b8c3b55ebd Добавлен тест проверяющий невозможность отправки push-уведомления при незаполненных полях формы 2026-02-18 13:46:45 +03:00
nsubbot ba6bc49859 Восстановлен тест пагинации для вкладки Действия/Реальное время панели событий 2026-02-18 11:14:11 +03:00
nsubbot 6d36491d79 Кнопка расширения/сжатия рабочей области страницы добавлена в панель навигации 2026-02-17 14:28:01 +03:00
nsubbot 7612138c50 Актуализация тестов после перехода на версию 1.31 2026-02-11 18:57:26 +03:00
nsubbot f8f85300d3 Внесение изменений в локаторы и названия тулбаров после изменений в UI версии 1.31 2026-02-10 14:35:24 +03:00
nsubbot ce9ff3e27d Добавление в локаторы data-testid для элементов вкладки 'Настройки/Лицензии', 'Настройки/Пользователи', карточки текущего пользователя 2026-02-05 14:14:16 +03:00
nsubbot 1ad9ceb256 Добавление в локаторы data-testid для элементов вкладки 'Настройки/Обслуживание и диагностика/Сеансы/Настройки' 2026-02-04 15:06:20 +03:00
nsubbot 5960b27e0b Добавление в локаторы data-testid для элементов вкладки 'Настройки/Уведомления' 2026-02-04 14:59:07 +03:00
nsubbot 415924ec98 Добавлены тесты для вкладки 'Настройки/Аутентификация' 2026-02-03 10:03:28 +03:00
nsubbot 4e39172bc7 Актуализация тестов после перехода на версию 1.29 2026-01-30 14:01:39 +03:00
Radislav 3a09e0d602 fix(confirm_locators): обновлены локаторы для работы с диалогами подтверждения TITLE, TEXT 2026-01-28 14:57:24 +03:00
Radislav b46cd7870c feat(confirm_component): добавлена поддержка кастомных локаторов кнопок
- Добавлены опциональные параметры cancel_button_locator и allow_button_locator в конструктор
- Текстовые параметры cancel_button_text и allow_button_text опциональными с пустыми строками по умолчанию
- Добавлен приоритет локаторам над текстом кнопок при инициализации
- Сохранена обратная совместимость с существующим кодом
2026-01-28 14:52:11 +03:00
nsubbot 46a882d2c1 Добавлено модальное окно посылки тестовой СМС 2026-01-28 11:19:51 +03:00
nsubbot 29d8aa8354 Перевод локаторов элементов окон работы с пользователями на использование testid 2026-01-27 14:02:37 +03:00
nsubbot 891502d3ca Актуализация тестов после перехода на версию 1.28 2026-01-23 14:01:34 +03:00
nsubbot 18228df8c7 Первая версия тестов вкладок 'Уведомления/СМС' и 'Уведомления/E-mail' 2026-01-22 14:59:35 +03:00
nsubbot 004bb2b4d7 Добавлен тест панели событий для пользователя с ролью 'Специалист ИБ' 2026-01-21 09:58:50 +03:00
nsubbot 9da4097e8d Исправлена ошибка подсветки выбранной строки таблицы сервисов вызванная перекрытием элементов 2026-01-20 13:16:50 +03:00
Radislav e8f42aa480 refactor(test_element_rack): оптимизация тестов стойки оборудования 2026-01-19 13:59:46 +03:00
Radislav b270b45cbd style: исправлено предупреждения Pylint и улучшить код 2026-01-19 08:38:22 +03:00
nsubbot bd9768dc4e Актуализация тестов после перехода на версию 1.27.0 2026-01-16 14:27:37 +03:00
nsubbot 2ae53e3e2e Временный фикс проблемы перехода на https версию приложения 2026-01-15 14:02:21 +03:00
Radislav 5f21e197f6 Merge branch 'main' of http://192.168.2.61/AlexL/e-nms_qa_automation 2026-01-13 14:19:56 +03:00
Radislav 5bbd4e2d46 refactor: Универсальный метод get_input_fields_locators_
- Создан универсальный метод get_input_fields_locators в BaseComponent
- Метод поддерживает разные структуры: xs4->xs8, xs4->xs1, любые парные flex
- Добавлены специализированные локаторы для числовых полей в SettingsFormLocators
- Обновлены тесты и компоненты для использования нового метода
- Удалена зависимость от конкретных CSS классов xs1/xs4/xs6/xs8
2026-01-13 14:18:06 +03:00
nsubbot e3fd08999c Актуализация тестов панели событий 2026-01-12 09:54:57 +03:00
Radislav 8127781d89 Обновление компонентов создания элемента Стойка 2026-01-12 00:21:09 +03:00
nsubbot 410d279e23 Добавлены тесты для вкладок 'Действия', 'События', 'Обслуживание', 'Аудит' панели событий 2025-12-26 11:46:11 +03:00
nsubbot cb1465ad7c Актуализация теста вкладки Уведомления/Push уведомления после изменения UI 2025-12-23 11:43:43 +03:00
nsubbot 6e5eeaf4d6 Актуализация теста вкладки Сеансы/Настройки после изменения UI 2025-12-23 10:05:14 +03:00
nsubbot edd91e66fc Актуализация тестов создания и редактирования пользователей 2025-12-22 10:55:12 +03:00
Radislav bc53906454 Перенос исправлений из ветки ra1/creat_element_rack в main
Файлы:
- rack_maker.py: рефакторинг локаторов
- rack_locators.py: разбивка длинных строк, добавление универсальных локаторов
- create_child_element_frame.py
- test_create_rack_element.py
2025-12-19 12:07:41 +03:00
nsubbot a6b0347c78 Актуализация тестов панели событий после изменения UI в версии 1.25 2025-12-17 14:54:07 +03:00
Radislav 453d6a5ec2 Перенос изменений из radislav/element_rack в main:
- components/toolbar_component.py
- locators/rack_locators.py
- pages/rack_page.py
- tests/e2e/elements/test_element_rack.py
2025-12-16 15:20:26 +03:00
nsubbot 9a5308bf7d Актуализация тестов после перехода на новую версию приложения 1.25 2025-12-16 11:27:07 +03:00
nsubbot e81a039ff0 Проверка кнопки открытия окна анализатора удалена из теста и компонента страницы состояния сервисов 2025-12-15 14:33:52 +03:00
nsubbot be4e01a090 Кнопка 'Поиск' удалена из панели событий 2025-12-15 08:22:01 +03:00
nsubbot 47d5306c5d Восстановление затертых коммитов 2025-12-10 18:06:39 +03:00
Radislav d7cbedafa4 feat: добавление метода wait_for_timeout 2025-12-10 14:19:11 +03:00
Radislav b2a32f70dc Рефакторинг кода: стандартизация форматирования и использование assert
- Добавлены пустые строки после docstrings
- Заменены raise AssertionError на assert
2025-12-10 13:54:34 +03:00
Radislav 2f2cf2c143 Добавление теста создания стойки 2025-12-10 13:51:36 +03:00
Radislav 48eae76141 Добавление теста создания стойки 2025-12-10 13:44:56 +03:00
Radislav 5a6d0054ba Исправления в компоненте навигационной панели
- Исправлена ошибка R1705 pylint: удален лишний 'else' после 'return' в методе click_sub_item
- Улучшена логика извлечения текста для элементов навигации:
  + node_texts = node_text.splitlines()
  + if len(node_texts) > 1:
  +     node_text = node_texts[1]
2025-12-08 07:34:22 +03:00
Radislav ef9d9c632a Актуализация документации 2025-12-05 12:17:18 +03:00
Radislav 995e7c7a8a Добавлен .gitattributes для защиты папки docs/ (изменяется только в main) 2025-12-05 10:40:54 +03:00
Radislav d74de7617b Merge branch 'radislav/tests_rack' 2025-12-05 10:19:09 +03:00
Radislav 838a2ee474 CONFIG: Обновлен pyproject.toml с исключениями E0401 для Pylint 2025-12-05 10:01:48 +03:00
Radislav de735fb9fa Исправлена обработка текста элементов и упрощена логика в find_and_click_item
>>
>> Основные изменения в navbar_component.py:
>> 1. Удалена обработка многострочного текста из node_content
>>    - Убрано разбиение текста на строки (node_texts = node_text.splitlines())
>>    - Теперь используется полный текст элемента без извлечения второй строки
>>
>> 2. Упрощена логика условных операторов:
>>    - Удален ненужный else после return в строке 116
>>    - Код внутри else перенесен внутрь if с корректным отступом
2025-12-05 09:53:33 +03:00
155 changed files with 21225 additions and 5424 deletions

3
.env.12 Normal file
View File

@ -0,0 +1,3 @@
ENV=test
AUTH_LOGIN = admin
AUTH_PASSWORD = enodemon-admin

1
.gitattributes vendored Normal file
View File

@ -0,0 +1 @@
docs/** merge=ours

View File

@ -123,12 +123,13 @@ class AlertComponent(BaseComponent):
).filter(has_text=text)).to_be_hidden(timeout=timeout), msg
logger.info(f"Alert window with text '{text}' successfully disappeared")
def check_alert_presence(self, text: str) -> None:
def check_alert_presence(self, text: str, timeout: int = 30000) -> None:
"""Проверяет наличие alert-окна с заданным текстом.
Args:
text: Текст для проверки. Если пустая строка - проверяет только
наличие окна.
наличие окна.
timeout: Время ожидания появления alert в миллисекундах
Raises:
AssertionError: Если alert-окно не найдено.
@ -136,12 +137,12 @@ class AlertComponent(BaseComponent):
msg = "Alert window is missing"
if text == "":
expect(self.page.get_by_role(AlertLocators.ALERT_ROLE)).to_be_visible(), msg
expect(self.page.get_by_role(AlertLocators.ALERT_ROLE)).to_be_visible(timeout=timeout), msg
logger.info(f"Alert window successfully displayed")
else:
expect(self.page.get_by_role(
AlertLocators.ALERT_ROLE
).filter(has_text=text)).to_be_visible(), msg
).filter(has_text=text)).to_be_visible(timeout=timeout), msg
logger.info(f"Alert window with text '{text}' successfully displayed")
def check_text(self, alert_text: str) -> None:

View File

@ -8,6 +8,7 @@ from tools.logger import get_logger
logger = get_logger("BASE_COMPONENT")
logger.setLevel("INFO")
class BaseComponent:
"""Базовый компонент для работы с элементами страницы.
@ -28,6 +29,56 @@ class BaseComponent:
self.page = page
# Действия:
def get_input_fields_locators(self, container_locator: Locator) -> dict:
"""Находит пары "метка-поле ввода" в контейнере с layout структурой.
Метод ищет элементы в структуре div.layout > div.flex, где:
- Первый div.flex содержит метку (текст в input элементе)
- Второй div.flex содержит соответствующее поле ввода
Поддерживает различные структуры:
- xs4 (метка) -> xs8 (поле ввода)
- xs4 (метка) -> xs1 (поле ввода)
- Любые другие парные flex контейнеры
Args:
container_locator: Контейнер, в котором искать поля ввода.
Returns:
Словарь, где ключ - текст метки, значение - Locator контейнера с полем ввода.
"""
fields_locators = {}
layouts = container_locator.locator("div.layout > div.flex").locator("..")
for i in range(layouts.count()):
layout = layouts.nth(i)
flex_containers = layout.locator("div.flex")
# Обрабатываем пары контейнеров
for j in range(0, flex_containers.count() - 1, 2):
label_container = flex_containers.nth(j)
input_container = flex_containers.nth(j + 1)
# Извлекаем текст метки
inputs = label_container.locator("input")
if inputs.count() > 0:
label_text = inputs.first.input_value().strip()
if label_text:
# Проверяем поле ввода
has_input = input_container.locator(
"input, textarea, select"
).count() > 0
not_found = fields_locators.get(label_text) is None
if has_input and not_found:
fields_locators[label_text] = input_container
return fields_locators
def get_locator(self, locator: str | Locator) -> Locator:
"""Получение объекта Locator из строки или существующего Locator.
@ -48,6 +99,15 @@ class BaseComponent:
else:
raise TypeError("locator value should be string type or Locator type")
def wait_for_timeout(self, timeout: int) -> None:
"""
Ожидает указанное количество миллисекунд.
Args:
timeout: Время ожидания в миллисекундах
"""
self.page.wait_for_timeout(timeout)
# Закомментированный код сохранен без изменений
# def wait_for_all_elements(self, locator: Locator, timeout=5000):
# loc = self.get_locator(locator)

View File

@ -0,0 +1,186 @@
"""Модуль компонента группы чек-боксов.
Содержит класс CheckboxGroupComponent для работы с группами чек-боксов,
в том числе в выпадающих списках с множественным выбором.
"""
import re
from playwright.sync_api import Page, Locator, expect
from tools.logger import get_logger
from components.base_component import BaseComponent
logger = get_logger("CHECKBOX_GROUP_COMPONENT")
class CheckboxGroupComponent(BaseComponent):
"""Компонент для работы с группами чек-боксов.
Позволяет выбирать/снимать выбор с чек-боксов в группе,
получать список выбранных элементов и проверять их состояние.
Может использоваться как для выпадающих списков с множественным выбором,
так и для любых других групп чек-боксов на странице.
"""
def __init__(self, page: Page) -> None:
"""Инициализирует компонент группы чек-боксов.
Args:
page: Экземпляр страницы Playwright.
"""
super().__init__(page)
def get_checkbox_locator(self, text: str, container_locator: Locator | None = None) -> Locator:
"""Возвращает локатор чек-бокса с указанным текстом.
Args:
text (str): Текст элемента для выбора.
container_locator (Locator | None): Локатор контейнера с чек-боксами.
Если не указан, поиск по всей странице.
Returns:
Locator: Локатор чек-бокса.
"""
if container_locator:
listitem_locator = container_locator.get_by_role("listitem")
else:
listitem_locator = self.page.locator("//div[contains(@class, 'menuable__content__active')]"). \
get_by_role("listitem")
listitem_locator.last.scroll_into_view_if_needed()
listitem_locator.last.wait_for(state="visible")
all_items = listitem_locator.all()
for i, item in enumerate(all_items):
if item.inner_text() == text:
checkbox_locator = item.get_by_role("checkbox")
expect(checkbox_locator).to_be_visible(), \
f"Checkbox with text '{text}' is missing or not visible"
return checkbox_locator
assert False, f"Checkbox locator for {text} has not been found"
def get_checkbox_locator_or(self, text: str, container_locator: Locator | None = None) -> Locator:
"""Возвращает локатор чек-бокса с указанным текстом.
Args:
text (str): Текст элемента для выбора.
container_locator (Locator | None): Локатор контейнера с чек-боксами.
Если не указан, поиск по всей странице.
Returns:
Locator: Локатор чек-бокса.
"""
if container_locator:
checkbox_locator = container_locator.get_by_role("listitem").filter(has_text=text).get_by_role("checkbox")
else:
checkbox_locator = self.page.get_by_role("listitem").filter(has_text=text).get_by_role("checkbox")
if checkbox_locator.count() > 1:
rtext = f"^{text}$"
if container_locator:
checkbox_locator = container_locator.get_by_role("listitem").filter(
has_text=re.compile(rtext)
).get_by_role("checkbox")
else:
checkbox_locator = self.page.get_by_role("listitem").filter(
has_text=re.compile(rtext)
).get_by_role("checkbox")
expect(checkbox_locator).to_be_visible(), \
f"Checkbox with text '{text}' is missing or not visible"
return checkbox_locator
def uncheck_by_text(self, text: str, container_locator: Locator | None = None) -> None:
"""Снимает выбор с чек-бокса по указанному тексту.
Args:
text (str): Текст чек-бокса для снятия выбора.
container_locator (Locator | None): Локатор контейнера с чек-боксами.
"""
logger.info(f"Unchecking checkbox with text: {text}")
self.get_checkbox_locator(text, container_locator).uncheck(force=True)
def check_by_text(self, text: str, container_locator: Locator | None = None) -> None:
"""Выбирает чек-бокс по указанному тексту.
Args:
text (str): Текст чек-бокса для выбора.
container_locator (Locator | None): Локатор контейнера с чек-боксами.
"""
logger.info(f"Checking checkbox with text: {text}")
self.get_checkbox_locator(text, container_locator).check(force=True)
def get_checked_items(self, container_locator: str | Locator) -> list[str]:
"""Возвращает список текстов отмеченных чек-боксов.
Args:
container_locator (str | Locator): Локатор контейнера с группой чек-боксов.
Returns:
list[str]: Список текстов выбранных чек-боксов.
"""
checked_items = []
list_container = self.get_locator(container_locator)
items = list_container.get_by_role("listitem").all()
for item in items:
if item.get_by_role("checkbox").is_checked():
item_text = item.text_content().strip()
if item_text:
checked_items.append(item_text)
logger.info(f"Checked items: {checked_items}")
return checked_items
def are_items_checked(self, container_locator: str | Locator, expected_items: list[str]) -> bool:
"""Проверяет, что указанные чек-боксы выбраны.
Args:
container_locator (str | Locator): Локатор контейнера с группой чек-боксов.
expected_items (list[str]): Список ожидаемых выбранных элементов.
Returns:
bool: True если все указанные чек-боксы выбраны.
"""
checked_items = self.get_checked_items(container_locator)
return all(item in checked_items for item in expected_items)
def check_all(self, container_locator: str | Locator) -> None:
"""Выбирает все чек-боксы в группе.
Args:
container_locator (str | Locator): Локатор контейнера с группой чек-боксов.
"""
logger.info("Checking all checkboxes in group")
list_container = self.get_locator(container_locator)
checkboxes = list_container.get_by_role("checkbox").all()
for checkbox in checkboxes:
if not checkbox.is_checked():
checkbox.check(force=True)
def uncheck_all(self, container_locator: str | Locator) -> None:
"""Снимает выбор со всех чек-боксов в группе.
Args:
container_locator (str | Locator): Локатор контейнера с группой чек-боксов.
"""
logger.info("Unchecking all checkboxes in group")
list_container = self.get_locator(container_locator)
checkboxes = list_container.get_by_role("checkbox").all()
for checkbox in checkboxes:
if checkbox.is_checked():
checkbox.uncheck(force=True)
def get_items_count(self, container_locator: str | Locator) -> int:
"""Возвращает количество чек-боксов в группе.
Args:
container_locator (str | Locator): Локатор контейнера с группой чек-боксов.
Returns:
int: Количество чек-боксов.
"""
list_container = self.get_locator(container_locator)
return list_container.get_by_role("checkbox").count()

View File

@ -17,31 +17,48 @@ logger = get_logger("CONFIRM_WINDOW")
class ConfirmComponent(BaseComponent):
"""Компонент окна подтверждения действий."""
def __init__(self, page: Page, cancel_button_text: str, allow_button_text: str):
def __init__(self, page: Page, cancel_button_text: str = "", allow_button_text: str = "",
cancel_button_locator: str = None, allow_button_locator: str = None):
"""Инициализация компонента.
Args:
page: Экземпляр страницы Playwright.
cancel_button_text: Текст кнопки отмены.
allow_button_text: Текст кнопки подтверждения.
cancel_button_text: Текст кнопки отмены (по умолчанию пустая строка).
allow_button_text: Текст кнопки подтверждения (по умолчанию пустая строка).
cancel_button_locator: Локатор кнопки отмены (опционально).
allow_button_locator: Локатор кнопки подтверждения (опционально).
"""
super().__init__(page)
self.title = Text(page, ConfirmLocators.TITLE, "confirm title")
self.text = Text(page, ConfirmLocators.TEXT, "confirm text")
self.close_button = Button(page, ConfirmLocators.BUTTON_CLOSE, "confirm close button")
self.cancel_button = Button(
page,
page.get_by_role("button", name=cancel_button_text).first,
"confirm cancel button"
)
self.allow_button = Button(
page,
page.get_by_role("button", name=allow_button_text).first,
"confirm allow button"
)
# Инициализация кнопок с приоритетом локаторам
if cancel_button_locator:
self.cancel_button = Button(page, cancel_button_locator, "confirm cancel button")
elif cancel_button_text:
self.cancel_button = Button(
page,
page.get_by_role("button", name=cancel_button_text).first,
"confirm cancel button"
)
else:
self.cancel_button = None
logger.warning("Cancel button not initialized - neither text nor locator specified")
if allow_button_locator:
self.allow_button = Button(page, allow_button_locator, "confirm allow button")
elif allow_button_text:
self.allow_button = Button(
page,
page.get_by_role("button", name=allow_button_text).first,
"confirm allow button"
)
else:
self.allow_button = None
logger.warning("Allow button not initialized - neither text nor locator specified")
# Действия:
def click_allow_button(self) -> None:

View File

@ -30,8 +30,8 @@ class DatePickerComponent(BaseComponent):
super().__init__(page)
self.date_picker_year_button = Button(page,
DatePickerLocators.DATE_PICKER_TITLE_BUTTON_YEAR,
"date_picker_year_button")
DatePickerLocators.DATE_PICKER_TITLE_BUTTON_YEAR,
"date_picker_year_button")
loc = page.locator(DatePickerLocators.DATE_PICKER_HEADER).\
get_by_role("button").locator("i.mdi-chevron-left")
@ -86,7 +86,7 @@ class DatePickerComponent(BaseComponent):
days_table_locator = self.page.locator(DatePickerLocators.DATE_PICKER_TABLE_DAYS)
days_table_locator.wait_for(timeout=300)
day_button_locator = days_table_locator.locator("//td").get_by_role("button", name=day)
day_button_locator = days_table_locator.locator("//td").get_by_role("button", name=day, exact=True)
visible = day_button_locator.is_visible()
if visible:
day_button_locator.click()
@ -140,27 +140,27 @@ class DatePickerComponent(BaseComponent):
def check_content(self) -> None:
"""Проверка состава компонент средства выбора даты."""
month_dict = {"1":"январь",
"2":"февраль",
"3":"март",
"4":"апрель",
"5":"май",
"6":"июнь",
"7":"июль",
"8":"август",
"9":"сентябрь",
month_dict = {"01":"январь",
"02":"февраль",
"03":"март",
"04":"апрель",
"05":"май",
"06":"июнь",
"07":"июль",
"08":"август",
"09":"сентябрь",
"10":"октябрь",
"11":"ноябрь",
"12":"декабрь"}
days_per_month = {"1":31,
"2":28,
"3":31,
"4":30,
"5":31,
"6":30,
"7":31,
"8":31,
"9":30,
days_per_month = {"01":31,
"02":28,
"03":31,
"04":30,
"05":31,
"06":30,
"07":31,
"08":31,
"09":30,
"10":31,
"11":30,
"12":31}
@ -189,7 +189,7 @@ class DatePickerComponent(BaseComponent):
assert actual_month_year == expected_month_year, \
f"Expected value {expected_month_year} is not equal actual value {actual_month_year} on date picker body"
expected_day = str(expected_date.strftime("%d"))
expected_day = str(expected_date.strftime("%d")).lstrip('0')
actual_day = self.get_day()
assert actual_day == expected_day, \
f"Expected day {expected_day} is not equal actual day {actual_day} on date picker body"

View File

@ -82,7 +82,12 @@ class DropdownList(BaseComponent):
loc = self.get_locator(locator)
texts = loc.all_inner_texts()
return texts[0].splitlines()
if len(texts) == 1 and texts[0].find("\n") != -1:
names = list(texts[0].splitlines())
else:
names = list(texts)
return names
def get_selected_combobox_value(self, combobox_locator: str | Locator,
value_locator: str | Locator = None) -> str:

View File

@ -6,6 +6,10 @@ from locators.event_panel_locators import EventPanelLocators
from elements.tooltip_button_element import TooltipButton
from elements.tab_button_element import TabButton
from elements.button_element import Button
from components_derived.container_actions_events import ActionsEventsContainer
from components_derived.container_audit_events import AuditEventsContainer
from components_derived.container_events import EventsTabContainer
from components_derived.container_maintenance_events import MaintenanceEventsContainer
from components_derived.container_system_log_events import SystemLogEventsContainer
from components_derived.user_card import UserCard
from components.base_component import BaseComponent
@ -25,35 +29,82 @@ class EventPanelComponent(BaseComponent):
super().__init__(page)
self.states_tab = TabButton(page, self.page.locator(EventPanelLocators.TAB_STATES), "states_tab")
self.actions_tab = TabButton(page, self.page.locator(EventPanelLocators.TAB_ACTIONS), "actions_tab")
self.events_tab = TabButton(page, self.page.locator(EventPanelLocators.TAB_EVENTS), "events_tab")
self.maintenance_tab = TabButton(page, self.page.locator(EventPanelLocators.TAB_MAINTENANCE), "maintenance_tab")
self.system_log_tab = TabButton(page, self.page.locator(EventPanelLocators.TAB_SYSTEM_LOG), "system_log_tab")
self.expand_less_button = Button(page,
page. locator(EventPanelLocators.BUTTON_EXPAND_LESS),
"expand_less_button")
self.expand_more_button = Button(page,
page. locator(EventPanelLocators.BUTTON_EXPAND_MORE),
"expand_more_button")
self.unknown_reason_button = TooltipButton(page, self.page.locator(EventPanelLocators.BUTTONS_EVENT).nth(0), "unknown_reason_button")
self.warning_button = TooltipButton(page, self.page.locator(EventPanelLocators.BUTTONS_EVENT).nth(1), "warning_button")
self.damage_button = TooltipButton(page, self.page.locator(EventPanelLocators.BUTTONS_EVENT).nth(2), "damage_button")
self.failure_button = TooltipButton(page, self.page.locator(EventPanelLocators.BUTTONS_EVENT).nth(3), "failure_button")
self.states_tab = TabButton(page, page.locator(EventPanelLocators.TAB_STATES), "states_tab")
self.actions_tab = TabButton(page, page.locator(EventPanelLocators.TAB_ACTIONS), "actions_tab")
self.events_tab = TabButton(page, page.locator(EventPanelLocators.TAB_EVENTS), "events_tab")
self.maintenance_tab = TabButton(page,
page.locator(EventPanelLocators.TAB_MAINTENANCE), "maintenance_tab")
self.system_log_tab = TabButton(page, page.locator(EventPanelLocators.TAB_SYSTEM_LOG), "system_log_tab")
self.audit_tab = TabButton(page, page.locator(EventPanelLocators.TAB_AUDIT), "audit_tab")
self.unknown_reason_button = TooltipButton(page,
page.locator(EventPanelLocators.BUTTONS_EVENT).nth(0),
"unknown_reason_button")
self.warning_button = TooltipButton(page,
page.locator(EventPanelLocators.BUTTONS_EVENT).nth(1),
"warning_button")
self.damage_button = TooltipButton(page,
page.locator(EventPanelLocators.BUTTONS_EVENT).nth(2),
"damage_button")
self.failure_button = TooltipButton(page,
page.locator(EventPanelLocators.BUTTONS_EVENT).nth(3),
"failure_button")
buttons_service_locators = self.page.locator(EventPanelLocators.BUTTONS_SERVICE).get_by_role("button").all()
self.search_button = Button(page, buttons_service_locators[0], "search_button")
self.user_button = Button(page, buttons_service_locators[1], "user_button")
self.user_button = Button(page, page.locator(EventPanelLocators.BUTTON_USER), "user_button")
# Действия:
def click_expand_less_button(self) -> None:
"""Выполняет нажатие кнопки галочка вверх."""
button_locator = self.page.locator(EventPanelLocators.TAB_EXPAND_BUTTONS).\
get_by_role("button").filter(has_text='expand_less')
button_locator.click()
self.expand_less_button.click()
def click_expand_more_button(self) -> None:
"""Выполняет нажатие кнопки галочка вниз."""
button_locator = self.page.locator(EventPanelLocators.TAB_EXPAND_BUTTONS).\
get_by_role("button").filter(has_text='expand_more')
button_locator.click()
self.expand_more_button.click()
def click_actions_tab(self) -> ActionsEventsContainer:
"""Выполняет нажатие tab-кнопки Действия."""
self.actions_tab.check_visibility("Actions tab button is missing on event panel")
self.actions_tab.click()
actions_tab = ActionsEventsContainer(self.page, EventPanelLocators.CONTAINER_ACTIONS_TAB)
return actions_tab
def click_audit_tab(self) -> AuditEventsContainer:
"""Выполняет нажатие tab-кнопки Аудит."""
self.audit_tab.check_visibility("Audit tab button is missing on event panel")
self.audit_tab.click()
audit_tab = AuditEventsContainer(self.page, EventPanelLocators.CONTAINER_AUDIT_EVENTS)
return audit_tab
def click_events_tab(self) -> EventsTabContainer:
"""Выполняет нажатие tab-кнопки События."""
self.events_tab.check_visibility("Events tab button is missing on event panel")
self.events_tab.click()
events_tab = EventsTabContainer(self.page, EventPanelLocators.CONTAINER_EVENTS_TAB)
return events_tab
def click_maintenance_tab(self) -> MaintenanceEventsContainer:
"""Выполняет нажатие tab-кнопки Обслуживание."""
self.maintenance_tab.check_visibility("Maintenance tab button is missing on event panel")
self.maintenance_tab.click()
maintenance_tab = MaintenanceEventsContainer(self.page, EventPanelLocators.CONTAINER_MAINTENANCE_EVENTS)
return maintenance_tab
def click_system_log_tab(self) -> SystemLogEventsContainer:
"""Выполняет нажатие tab-кнопки Системный журнал."""
@ -68,7 +119,7 @@ class EventPanelComponent(BaseComponent):
"""Выполняет нажатие кнопки пользователя."""
self.should_be_user_button()
self.user_button.click()
self.user_button.click(force=True)
user_card = UserCard(self.page)
return user_card
@ -107,12 +158,12 @@ class EventPanelComponent(BaseComponent):
"""Возвращает текущее положение панели событий относительно страницы: "top", "center","bottom"."""
style_attr = self.page.locator(EventPanelLocators.AREA_EVENTS).get_attribute("style")
position = "bottom"
position = "top"
if style_attr.find("display: none;") == -1:
height = style_attr.replace("height: ","").replace(";", "")
height = style_attr.replace("position: relative;","").replace("height: ","").replace(";", "").lstrip()
if height == "100%":
position = "top"
position = "bottom"
else:
position = "center"
@ -120,21 +171,19 @@ class EventPanelComponent(BaseComponent):
# Проверки:
def check_expand_less_button(self) -> bool:
"""Проверяет наличие кнопки галочка вверх."""
"""Проверяет наличие кнопки галочка вниз."""
try:
_ = self.page.locator(EventPanelLocators.TAB_EXPAND_BUTTONS).\
get_by_role("button").filter(has_text='expand_less')
_ = self.page.locator(EventPanelLocators.BUTTON_EXPAND_LESS)
except TimeoutError:
return False
return True
def check_expand_more_button(self) -> bool:
"""Проверяет наличие кнопки галочка вниз"""
"""Проверяет наличие кнопки галочка вверх"""
try:
_ = self.page.locator(EventPanelLocators.TAB_EXPAND_BUTTONS).\
get_by_role("button").filter(has_text='expand_more')
_ = self.page.locator(EventPanelLocators.BUTTON_EXPAND_MORE)
except TimeoutError:
return False
return True
@ -144,19 +193,18 @@ class EventPanelComponent(BaseComponent):
self.user_button.check_visibility("User button is missing on event panel")
def should_be_search_button(self) -> None:
"""Проверяет наличие кнопки поиска."""
self.search_button.check_visibility("Search button is missing on event panel")
def should_be_tab_buttons(self) -> None:
"""Проверяет наличие блока tab-кнопок Состояния, Действия, События, Обслуживание, Системный журнал."""
"""Проверяет наличие блока tab-кнопок Состояния, Действия, События, Обслуживание, Системный журнал, Аудит."""
self.states_tab.check_have_text('Состояния', "Tab button with text Состояния is missing on event panel")
self.actions_tab.check_have_text('Действия',"Tab button with text Действия is missing on event panel")
self.events_tab.check_have_text('События', "Tab button with text События is missing on event panel")
self.maintenance_tab.check_have_text('Обслуживание', "Tab button with text Обслуживание is missing on event panel")
self.system_log_tab.check_have_text('Системный журнал', "Tab button with text Системный журнал is missing on event panel")
self.maintenance_tab.check_have_text('Обслуживание',
"Tab button with text Обслуживание is missing on event panel")
self.system_log_tab.check_have_text('Системный журнал',
"Tab button with text Системный журнал is missing on event panel")
self.audit_tab.check_have_text('Аудит',
"Tab button with text Аудит is missing on event panel")
def should_be_event_buttons(self) -> None:
"""Проверяет наличие блока кнопок-счетчиков событий."""

View File

@ -1,13 +1,13 @@
"""Модуль компонента контейнера с перечнем событий. Содержит класс для работы с контейнерами,
их элементами и проверками."""
from playwright.sync_api import Page, Locator
from playwright.sync_api import Page, Locator, expect
from tools.logger import get_logger
from locators.toolbar_locators import ToolbarLocators
from locators.event_panel_locators import EventPanelLocators
from elements.tooltip_button_element import TooltipButton
from elements.tab_button_element import TabButton
from elements.button_element import Button
from components_derived.sidebar_filter_component import SidebarFilterComponent
from components_derived.events_filter_panel import EventsFilterPanel
from components.toolbar_component import ToolbarComponent
from components.table_component import TableComponent
from components.base_component import BaseComponent
@ -32,18 +32,11 @@ class EventsContainerComponent(BaseComponent):
# тулбар
self.toolbar = ToolbarComponent(page, "")
filter_button_locator = self.container_locator.locator(ToolbarLocators.TITLE).\
get_by_role("button")
self.toolbar.add_button(filter_button_locator, "filter_button")
export_buttons = self.container_locator.locator(ToolbarLocators.ITEMS).\
get_by_role("button").all()
self.toolbar.add_tooltip_button(export_buttons[1], "export_to_csv_button")
self.toolbar.add_tooltip_button(export_buttons[0], "export_to_pdf_button")
self.toolbar_locator = EventPanelLocators.TOOLBAR
# Таблица событий
self.events_table = TableComponent(page)
self.table_locator = "//div[@class='scrolltable']/div/table"
self.table_locator = EventPanelLocators.TABLE
# Кнопки пагинации в нижней части контейнера
self.chevron_left = Button(page,
@ -64,16 +57,21 @@ class EventsContainerComponent(BaseComponent):
locator("xpath=..").get_by_role("button").nth(2)
self.data_set_number = Button(page, loc, "data_set_number")
self.sidebar_filter_locator = self.container_locator.locator("//aside//div[@class='scrollarea__container']")
self.sidebar_filter = SidebarFilterComponent(self.page,
self.sidebar_filter_locator)
self.events_filter = EventsFilterPanel(self.page)
# Действия:
def add_tab_to_toolbar(self, locator: str | Locator, name: str) -> None:
"""Добавление кнопки типа v-tabs к тулбару"""
tabs_locator = self.get_locator(locator)
self.toolbar.add_tab_button(self.container_locator.locator(tabs_locator), name)
tab_locator = self.get_locator(locator)
self.toolbar.add_tab_button(tab_locator, name)
def click_tab_button(self, name: str) -> None:
"""Нажатие tab кнопки на тулбаре"""
tab_button = self.toolbar.get_button_by_name(name)
assert tab_button, f"Try to click unexisted button {name}"
tab_button.click()
def click_chevron_left(self) -> None:
"""Нажатие кнопки получения предыдущего набора данных"""
@ -86,7 +84,7 @@ class EventsContainerComponent(BaseComponent):
self.chevron_right.click()
def click_first_page(self) -> None:
"""Нажатие кнопки перехода на первую сраницу"""
"""Нажатие кнопки перехода на первую страницу"""
self.first_page.click()
@ -95,13 +93,13 @@ class EventsContainerComponent(BaseComponent):
self.last_page.click()
def click_filter_button(self) -> SidebarFilterComponent:
"""Нажатие кнопки перехода на первую сраницу"""
def click_filter_button(self) -> EventsFilterPanel:
"""Нажатие кнопки фильтр"""
self.toolbar.click_button("filter_button")
self.sidebar_filter.check_visibility(self.sidebar_filter_locator,
"Filter sidebar is missing")
return self.sidebar_filter
expect(self.page.locator("div.menuable__content__active")).to_be_visible(), "Events filter is missing"
return self.events_filter
def click_event_table_header_arrow(self, index: int) -> None:
""" Нажатие кнопки-стрелочки вверх/вниз в ячейке заголовка таблицы
@ -112,6 +110,15 @@ class EventsContainerComponent(BaseComponent):
loc = self.container_locator.locator(self.table_locator)
self.events_table.click_arrow_button(loc, index)
def get_events_table_row_locator(self, index: int) -> Locator:
""" Возвращает локатор строки таблицы по ее индексу
Args:
index: Индекс строки в таблице.
"""
loc = self.container_locator.locator(self.table_locator)
return self.events_table.get_row_locator(loc, index)
def get_current_data_set_number(self) -> int:
"""Получение номера текущего набора данных"""
@ -157,10 +164,10 @@ class EventsContainerComponent(BaseComponent):
loc = self.container_locator.locator(self.table_locator)
return self.events_table.get_rows_count(loc)
def get_sidebar_filter(self) -> SidebarFilterComponent:
"""Возвращает боковую панель фильтрации."""
def get_events_filter(self) -> EventsFilterPanel:
"""Возвращает панель фильтрации."""
return self.sidebar_filter
return self.events_filter
def get_toolbar_filter_button(self) -> Button:
"""Возвращает кнопку фильтрации."""
@ -200,6 +207,16 @@ class EventsContainerComponent(BaseComponent):
self.events_table.check_table_headers(actual_headers, expected_headers)
def check_events_table_status_button(self, row_index: int, tooltip_text: str) -> None:
""" Проверка наличия в строке кнопки статуса (состояния) и ее тултипа"""
loc = self.container_locator.locator(self.table_locator)
row_locator = self.events_table.get_row_locator(loc, row_index-1)
button = TooltipButton(self.page, row_locator.get_by_role("button"), "status_button")
button.check_visibility(f"Tooltip button is missing in {row_index} table row")
button.check_tooltip_with_text(tooltip_text)
def check_events_table_column_descending_order(self,
index: int,
convert2timestamp=False) -> bool:
@ -279,6 +296,21 @@ class EventsContainerComponent(BaseComponent):
return self.last_page.is_disabled()
def is_tab_active(self, name: str) -> bool:
"""Проверка является ли tab-button активным"""
tab_button = self.toolbar.get_button_by_name(name)
assert tab_button, f"Try to find unexisted button {name}"
tab_button_locator = tab_button.get_locator()
is_active = True
attr = tab_button_locator.locator("../..").get_attribute("class")
if attr.find("active") == -1:
is_active = False
return is_active
def should_be_all_disabled(self) -> None:
"""Проверка видимости кнопок пагинации: все кнопки disabled"""
@ -355,19 +387,9 @@ class EventsContainerComponent(BaseComponent):
def should_be_toolbar(self) -> None:
"""Проверка наличия тулбара"""
loc = self.container_locator.locator("//nav[contains(@class, 'v-toolbar')]").nth(0)
loc = self.container_locator.locator(self.toolbar_locator).first
self.toolbar.check_toolbar_presence_by_locator(loc, "Toolbar is missing")
def should_be_base_toolbar_buttons(self) -> None:
"""Проверяет наличие и видимость базовых кнопок тулбара."""
self.toolbar.check_button_visibility("filter_button")
self.toolbar.check_button_visibility("export_to_pdf_button")
self.toolbar.check_button_tooltip("export_to_pdf_button", "Скачать в формате PDF")
self.toolbar.check_button_visibility("export_to_csv_button")
self.toolbar.check_button_tooltip("export_to_csv_button", "Скачать в формате CSV")
def should_be_pagination_buttons(self) -> None:
"""Проверяет наличие и видимость кнопок пагинации."""

View File

@ -3,6 +3,7 @@
from playwright.sync_api import Page, Locator
from tools.logger import get_logger
from locators.navigation_panel_locators import NavigationPanelLocators
from elements.button_element import Button
from components.base_component import BaseComponent
logger = get_logger("NAVIGATION_PANEL")
@ -20,6 +21,14 @@ class NavigationPanelComponent(BaseComponent):
super().__init__(page)
# кнопки расширения/сжатия рабочей области вкладки на странице
self.expand_workarea_button = Button(page,
page.locator(NavigationPanelLocators.BUTTON_EXPAND_WORKAREA),
"expand_workarea_button")
self.reduce_workarea_button = Button(page,
page.locator(NavigationPanelLocators.BUTTON_REDUCE_WORKAREA),
"reduce_workarea_button")
# Действия:
def click_item(self, locator: str | Locator, item_name: str) -> None:
"""Кликает по элементу с указанным текстом.
@ -40,110 +49,112 @@ class NavigationPanelComponent(BaseComponent):
item_name: Текст элемента для клика.
"""
def find_and_click_item(page, root_locator, item_name: str, parent: None|str) -> Locator|None:
# Находим все локаторы корневых узлов на текущем уровне
nodes_count = root_locator.locator('>div.v-treeview-node').count()
# Если искомый элемент находится на данном уровне, вычисляем локатор и делаем клик
if parent is None:
for index in range(nodes_count):
node = root_locator.locator(f">div:nth-child({index + 1})").first
node_content = node.locator('div.v-treeview-node__content')
if node_content.count() > 0:
node_text = node_content.first.inner_text().strip()
node_texts = node_text.splitlines()
if len(node_texts) > 1:
node_text = node_texts[1]
if item_name == node_text:
node_attr = node.get_attribute('class')
if "v-treeview-node--leaf" not in node_attr:
toggle_button = node.locator(
NavigationPanelLocators.NODE_ROOT
).locator(NavigationPanelLocators.TOGGLE_BUTTON).first
toogle_class_attr = toggle_button.get_attribute('class')
if "v-treeview-node__toggle--open" not in toogle_class_attr:
toggle_button.click()
else:
node.locator(NavigationPanelLocators.NODE_ROOT).click()
page.wait_for_timeout(1000)
return node
# Если элемента нет, рекурсивно ищем дальше
for index in range(nodes_count):
node = root_locator.locator(f">div:nth-child({index + 1})").first
# Извлекаем аттрибуты из корневого узла
node_class_attr = node.get_attribute('class')
is_expanded = False
has_children = False
# Проверяем лист это или начало поддерева
if "v-treeview-node--leaf" not in node_class_attr:
# Проверяем, является ли узел раскрытым
class_attr = node.locator(
NavigationPanelLocators.NODE_ROOT
).locator(NavigationPanelLocators.TOGGLE_BUTTON).first.get_attribute('class')
if "v-treeview-node__toggle--open" in class_attr:
is_expanded = True
# Если узел закрыт можем его раскрыть
if is_expanded is False:
toggle_button = node.locator(
NavigationPanelLocators.NODE_ROOT
).locator(NavigationPanelLocators.TOGGLE_BUTTON).first
toggle_button.click()
# Ждем, пока дочерние элементы прогрузятся/появятся
page.wait_for_timeout(1000)
is_expanded = True
# Проверяем, имеет ли узел дочерние элементы
children_count = node.locator('>div.v-treeview-node__children').count()
content = node.locator('>div.v-treeview-node__children').inner_html()
if children_count > 0 and len(content) != 0:
has_children = True
# Рекурсивный вызов для дочерних элементов
# Ищем дочерние элементы *внутри* текущего узла
if has_children and is_expanded:
child_nodes_locator = root_locator.locator(
f">div:nth-child({index + 1})"
).locator('>div.v-treeview-node__children')
found_loc = find_and_click_item(
page, child_nodes_locator, item_name, parent=None
)
if found_loc:
if parent is None:
return found_loc
else:
root_texts = root_locator.locator(
f">div:nth-child({index + 1})"
).inner_text().splitlines()
if parent in root_texts:
return found_loc
# закрываем узел, если в нем ничего не нашли
if is_expanded:
toggle_button = node.locator(
NavigationPanelLocators.NODE_ROOT
).locator(NavigationPanelLocators.TOGGLE_BUTTON).first
toggle_button.click()
page.wait_for_timeout(1000)
# элемент с заданным именем не найден
return None
root_locator = self.get_locator(node_root_locator)
if parent:
parent_loc = find_and_click_item(self.page, root_locator, parent, parent=None)
found = find_and_click_item(
parent_loc = self._find_and_click_item(self.page, root_locator, parent, parent=None)
found = self._find_and_click_item(
self.page, parent_loc.locator('>div.v-treeview-node__children'),
item_name, parent=None
)
else:
found = find_and_click_item(self.page, root_locator, item_name, parent=None)
found = self._find_and_click_item(self.page, root_locator, item_name, parent=None)
assert found, f"Navigation panel item {item_name} is missing"
def _find_and_click_item(self, page, root_locator, item_name: str, parent: None|str) -> Locator|None:
"""Поиск вложенного элемента с указанным текстом и локатором корневого элемента"""
# Находим все локаторы корневых узлов на текущем уровне
nodes_count = root_locator.locator('>div.v-treeview-node').count()
# Если искомый элемент находится на данном уровне, вычисляем локатор и делаем клик
if parent is None:
for index in range(nodes_count):
node = root_locator.locator(f">div:nth-child({index + 1})").first
node_content = node.locator('div.v-treeview-node__content')
if node_content.count() > 0:
node_text = node_content.first.inner_text().strip()
node_texts = node_text.splitlines()
if len(node_texts) > 1:
node_text = node_texts[1]
if item_name == node_text:
node_attr = node.get_attribute('class')
if "v-treeview-node--leaf" not in node_attr:
toggle_button = node.locator(
NavigationPanelLocators.NODE_ROOT
).locator(NavigationPanelLocators.TOGGLE_BUTTON).first
toogle_class_attr = toggle_button.get_attribute('class')
if "v-treeview-node__toggle--open" not in toogle_class_attr:
toggle_button.click()
else:
node.locator(NavigationPanelLocators.NODE_ROOT).click()
page.wait_for_timeout(1000)
return node
# Если элемента нет, рекурсивно ищем дальше
for index in range(nodes_count):
node = root_locator.locator(f">div:nth-child({index + 1})").first
# Извлекаем аттрибуты из корневого узла
node_class_attr = node.get_attribute('class')
is_expanded = False
has_children = False
# Проверяем лист это или начало поддерева
if "v-treeview-node--leaf" not in node_class_attr:
# Проверяем, является ли узел раскрытым
class_attr = node.locator(
NavigationPanelLocators.NODE_ROOT
).locator(NavigationPanelLocators.TOGGLE_BUTTON).first.get_attribute('class')
if "v-treeview-node__toggle--open" in class_attr:
is_expanded = True
# Если узел закрыт можем его раскрыть
if is_expanded is False:
toggle_button = node.locator(
NavigationPanelLocators.NODE_ROOT
).locator(NavigationPanelLocators.TOGGLE_BUTTON).first
toggle_button.click()
# Ждем, пока дочерние элементы прогрузятся/появятся
page.wait_for_timeout(1000)
is_expanded = True
# Проверяем, имеет ли узел дочерние элементы
children_count = node.locator('>div.v-treeview-node__children').count()
content = node.locator('>div.v-treeview-node__children').inner_html()
if children_count > 0 and len(content) != 0:
has_children = True
# Рекурсивный вызов для дочерних элементов
# Ищем дочерние элементы *внутри* текущего узла
if has_children and is_expanded:
child_nodes_locator = root_locator.locator(
f">div:nth-child({index + 1})"
).locator('>div.v-treeview-node__children')
found_loc = self._find_and_click_item(
page, child_nodes_locator, item_name, parent=None
)
if found_loc:
if parent is None:
return found_loc
root_texts = root_locator.locator(
f">div:nth-child({index + 1})"
).inner_text().splitlines()
if parent in root_texts:
return found_loc
# закрываем узел, если в нем ничего не нашли
if is_expanded:
toggle_button = node.locator(
NavigationPanelLocators.NODE_ROOT
).locator(NavigationPanelLocators.TOGGLE_BUTTON).first
toggle_button.click()
page.wait_for_timeout(1000)
# элемент с заданным именем не найден
return None
def get_item_names(self, locator: str | Locator) -> list[str]:
"""Возвращает тексты всех элементов по указанному локатору.
@ -224,13 +235,30 @@ class NavigationPanelComponent(BaseComponent):
root_locator = self.get_locator(node_root_locator)
traverse_tree(self.page, root_locator, level=level, debug=debug)
def expand_workarea(self) -> None:
"""Нажатие кнопки для расширения рабочей области страницы"""
if self.page.locator(NavigationPanelLocators.BUTTON_EXPAND_WORKAREA).count() > 0:
self.expand_workarea_button.click()
else:
assert False, "Workarea already expanded"
def reduce_workarea(self) -> None:
"""Нажатие кнопки для сжатия рабочей области страницы"""
if self.page.locator(NavigationPanelLocators.BUTTON_REDUCE_WORKAREA).count() > 0:
self.reduce_workarea_button.click()
else:
assert False, "Workarea already reduced"
# Проверки:
def check_item_visibility(self, locator: str | Locator, item_name: str) -> None:
def check_item_visibility(self, locator: str | Locator, item_name: str, parent = None) -> None:
"""Проверяет видимость элемента с указанным текстом.
Args:
locator: Локатор элемента или строка с CSS/XPath.
item_name: Текст элемента для проверки.
parent: Текст родительского элемента (необязательный параметр)
Note:
Временная обработка для элементов с текстом 'Шаблоны'.
@ -238,17 +266,13 @@ class NavigationPanelComponent(BaseComponent):
msg = f"Navigation panel item '{item_name}' is not visible"
## временно: в навигационной панели есть две панели с именем Шаблоны
## для их различия добавлены индексы Шаблоны_1 для Настройки/Шаблоны
## Шаблоны_2 для Настройки/ZTP/Шаблоны
loc = self.get_locator(locator)
if item_name == "Шаблоны_1":
loc = loc.get_by_text("Шаблоны").first
elif item_name == "Шаблоны_2":
loc = loc.get_by_text("Шаблоны").nth(1)
else:
loc = loc.get_by_text(item_name)
self.check_visibility(loc, msg)
if parent:
parent_loc = f"//div[contains(@class, 'v-treeview-node') and contains(.,'{parent}')]"
loc = loc.locator(parent_loc)
item_loc = loc.get_by_text(item_name).first
self.check_visibility(item_loc, msg)
def is_item_visible(self, locator: str | Locator, item_name: str) -> bool:
"""
@ -268,3 +292,57 @@ class NavigationPanelComponent(BaseComponent):
return False
return element_locator.is_visible()
def check_sub_item_state(self, node_root_locator: str | Locator, item_name: str, parent: None|str) -> str|None:
"""Выполняет рекурсивный поиск по панели навигации
заданного элемента, делает клик по нему, проверяет наличие индикатора состояния.
Если индикатор состояния присутствует, возвращается его цвет. Иначе None"""
root_locator = self.get_locator(node_root_locator)
if parent:
parent_loc = self._find_and_click_item(self.page, root_locator, parent, parent=None)
found_node_loc = self._find_and_click_item(
self.page, parent_loc.locator('>div.v-treeview-node__children'),
item_name, parent=None
)
else:
found_node_loc = self._find_and_click_item(self.page, root_locator, item_name, parent=None)
assert found_node_loc, f"Navigation panel item {item_name} is missing"
color = None
sub_item_state_loc_str = f"//span[text()='{item_name}']/preceding-sibling::*[name()='svg'][2]"
sub_item_state_locator = found_node_loc.locator("div.v-treeview-node__label").locator(sub_item_state_loc_str)
if sub_item_state_locator.count() > 0:
color = sub_item_state_locator.get_attribute("fill")
if color: color = color.lstrip('#')
return color
def should_be_expand_workarea_button(self) -> None:
"""Проверяет наличие кнопки расширения рабочей области страницы.
Raises:
AssertionError: Если кнопка отсутствует.
"""
if self.page.locator(NavigationPanelLocators.BUTTON_EXPAND_WORKAREA).count() > 0:
self.expand_workarea_button.check_visibility(
"Expand workarea button is missing on page"
)
else:
assert False, "Expand workarea button is missing on page"
def should_be_reduce_workarea_button(self) -> None:
"""Проверяет наличие кнопки сжатия рабочей области страницы.
Raises:
AssertionError: Если кнопка отсутствует.
"""
if self.page.locator(NavigationPanelLocators.BUTTON_REDUCE_WORKAREA).count() > 0:
self.reduce_workarea_button.check_visibility(
"Rduce workarea button is missing on page"
)
else:
assert False, "Reduce workarea button is missing on page"

View File

@ -1,5 +1,6 @@
"""Модуль компонента таблицы. Содержит класс для работы с табличными данными."""
import math
from datetime import datetime
from playwright.sync_api import Page, expect, Locator
from tools.logger import get_logger
@ -34,10 +35,10 @@ class TableComponent(BaseComponent):
assert arrow_button.is_enabled(), f"Arrow button is missing in {index} header cell"
arrow_button.click()
def datetime2timestamp(self, date_string: str) -> float|None:
def datetime2timestamp(self, date_string: str, format_string = None) -> float|None:
""" Конвертация строкового представления даты и времени в Unix timestamp
Args:
date_string: Строка с датой и временем в формате d.m.Y H:M:S.
date_string: Строка с датой и временем в формате d.m.Y H:M:S (default value).
Returns:
float: Unix timestamp.
@ -45,7 +46,8 @@ class TableComponent(BaseComponent):
"""
# Формат, соответствующий строке с датой и временем
format_string = "%d.%m.%Y %H:%M:%S"
if format_string is None:
format_string = "%d.%m.%Y %H:%M:%S"
try:
date_object = datetime.strptime(date_string, format_string)
@ -75,6 +77,31 @@ class TableComponent(BaseComponent):
else:
assert False, f"Got unsupported arrow state: {state}"
def get_column(self, table_locator: str | Locator, index: int) -> list[str]:
"""Возвращает столбец таблицы по индексу.
Args:
table_locator: Локатор таблицы.
index: Индекс столбца.
Returns:
Список значений требуемого столбца.
"""
table_content = self.read(table_locator)
if len(table_content) == 0:
assert False, "The contents of the table are missing"
del table_content[0]
assert index in range(len(table_content[0])), \
"Column index is out of range"
column = []
for i in range(len(table_content)):
column.append(table_content[i][index])
return column
def get_header_cell_button(self, table_locator: str | Locator, index: int) -> Locator:
""" Поиск кнопки в ячейке заголовка таблицы
@ -179,11 +206,14 @@ class TableComponent(BaseComponent):
if item in arrow_state:
continue
if item == '':
continue
if item not in expected_headers:
is_equals = False
assert is_equals, \
f"Expected events table headers {expected_headers} are not equal {actual_headers}"
f"Expected table headers {expected_headers} are not equal {actual_headers}"
def check_content(self,
locator: str | Locator,
@ -296,3 +326,34 @@ class TableComponent(BaseComponent):
new_color = hover_element.evaluate("el => window.getComputedStyle(el).backgroundColor")
assert initial_color != new_color, "Color of row did not change when hovering the cursor"
def check_mui_table_row_highlighting(self, locator: str | Locator, row_index: int) -> None:
"""Проверяет изменение цвета строки при наведении.
Args:
locator: Локатор таблицы.
row_index: Индекс проверяемой строки.
"""
table = self.get_locator(locator)
row = table.locator("tbody").locator(".MuiTableRow-root").nth(row_index)
# Получение текущего цвета фона
initial_color = row.evaluate("el => window.getComputedStyle(el).backgroundColor")
row.scroll_into_view_if_needed()
self.page.wait_for_timeout(1000)
bounding_box = row.bounding_box()
assert bounding_box, "Requested row is not visible"
center_x = bounding_box["x"] + bounding_box["width"] / 4
center_y = bounding_box["y"] + bounding_box["height"] / 2
self.page.mouse.move(math.ceil(center_x), math.ceil(center_y), steps=5)
self.page.wait_for_timeout(1000)
# Получение текущего цвета фона
new_color = row.evaluate("el => window.getComputedStyle(el).backgroundColor")
assert initial_color != new_color, "Color of row did not change when hovering the cursor"

View File

@ -27,6 +27,7 @@ class ToolbarComponent(BaseComponent):
def __init__(self, page: Page, title: str) -> None:
"""Инициализирует компонент тулбара с указанным заголовком."""
super().__init__(page)
self.title = title
self.buttons = []
@ -38,6 +39,7 @@ class ToolbarComponent(BaseComponent):
Args:
title (str): Новый заголовок
"""
self.title = title
def add_tooltip_button(self, locator: Locator, name: str) -> None:
@ -47,6 +49,7 @@ class ToolbarComponent(BaseComponent):
locator (Locator): Локатор кнопки
name (str): Уникальное имя кнопки
"""
self.buttons.append(TooltipButton(self.page, locator, name))
def add_tab_button(self, locator: Locator, name: str) -> None:
@ -56,6 +59,7 @@ class ToolbarComponent(BaseComponent):
locator (Locator): Локатор кнопки
name (str): Уникальное имя кнопки
"""
self.buttons.append(TabButton(self.page, locator, name))
def add_button(self, locator: Locator, name: str) -> None:
@ -65,6 +69,7 @@ class ToolbarComponent(BaseComponent):
locator (Locator): Локатор кнопки
name (str): Уникальное имя кнопки
"""
self.buttons.append(Button(self.page, locator, name))
def get_button_by_name(self, name: str
@ -77,6 +82,7 @@ class ToolbarComponent(BaseComponent):
Returns:
TooltipButton | TabButton | Button | None: Найденная кнопка или None
"""
for button in self.buttons:
if button.name == name:
return button
@ -91,6 +97,7 @@ class ToolbarComponent(BaseComponent):
Raises:
AssertionError: Если кнопка не найдена
"""
button = self.get_button_by_name(name)
if button is None:
raise AssertionError(f"Unsupported button name {name}")
@ -112,6 +119,7 @@ class ToolbarComponent(BaseComponent):
Raises:
Exception: Если не удалось получить заголовок
"""
# Получаем локатор заголовка
title_locator = self.get_locator(locator)
@ -128,6 +136,40 @@ class ToolbarComponent(BaseComponent):
return title_text
def get_toolbar_composite_title_text(self, locator: str|Locator ,
timeout: int = 5000) -> []:
"""Получает составной заголовок тулбара окна в виде списка подзаголовков.
Args:
locator: Локатор для заголовка тулбара
timeout: Таймаут ожидания в миллисекундах
Returns:
str: Текст заголовка тулбара
Raises:
Exception: Если не удалось получить заголовок
"""
toolbar_title_items = []
# Получаем локатор заголовка
title_locator = self.get_locator(locator)
# Ждем появления заголовка с помощью expect
expect(title_locator).to_be_visible(timeout=timeout)
# Найти все элементы <li> внутри <ul>
list_items = title_locator.locator("ul > li")
# Перебрать элементы и получить текст
for i in range(list_items.count()):
item_text = list_items.nth(i).inner_text()
toolbar_title_items.append(item_text)
return toolbar_title_items
# Проверки:
def is_button_present(self, name: str) -> bool:
"""Проверяет наличие кнопки.
@ -141,6 +183,7 @@ class ToolbarComponent(BaseComponent):
Raises:
AssertionError: Если имя кнопки не поддерживается
"""
button = self.get_button_by_name(name)
if button is None:
raise AssertionError(f"Unsupported button name {name}")
@ -158,6 +201,7 @@ class ToolbarComponent(BaseComponent):
Raises:
AssertionError: Если имя кнопки не поддерживается
"""
button = self.get_button_by_name(name)
if button is None:
raise AssertionError(f"Unsupported button name {name}")
@ -169,6 +213,7 @@ class ToolbarComponent(BaseComponent):
Args:
message (str): Сообщение об ошибке если тулбар не виден
"""
locator = self.get_locator(ToolbarLocators.TITLE).filter(
has_text=self.title
)
@ -182,6 +227,7 @@ class ToolbarComponent(BaseComponent):
locator: Локатор тулбара
message (str): Сообщение об ошибке если тулбар не виден
"""
locator = self.get_locator(locator)
expect(locator).to_be_visible(), message
@ -193,7 +239,8 @@ class ToolbarComponent(BaseComponent):
locator: Локатор тулбара
message (str): Сообщение об ошибке если тулбар не виден
"""
locator = self.get_locator(locator).filter(has_text=self.title)
locator = self.get_locator(locator).filter(has_text=self.title).first
expect(locator).to_be_visible(), message
def check_button_visibility(self, name: str) -> None:
@ -205,6 +252,7 @@ class ToolbarComponent(BaseComponent):
Raises:
AssertionError: Если кнопка не найдена или не видна
"""
button = self.get_button_by_name(name)
if button is None:
@ -223,6 +271,7 @@ class ToolbarComponent(BaseComponent):
Raises:
AssertionError: Если текст подсказки не совпадает
"""
button = self.get_button_by_name(name)
if button is None:
raise AssertionError(f"Unsupported button name {name}")

View File

@ -0,0 +1,39 @@
"""Модуль компонента тулбара (class=toolbar_castom).
Содержит класс ToolbarComponent для работы с элементами тулбара
- Проверка видимости элементов
"""
from playwright.sync_api import Page, expect
from tools.logger import get_logger
from locators.certificate_locators import CertificateLocators
from components.base_component import BaseComponent
logger = get_logger("TOOLBAR_CUSTOM")
class CustomToolbar(BaseComponent):
"""Класс для работы с информационным тулбаром на странице.
Наследует функциональность BaseComponent и добавляет специфичные
методы и проверки.
"""
def __init__(self, page: Page) -> None:
"""Инициализирует компонент тулбара."""
super().__init__(page)
# Действия:
# (Методы действий будут добавлены по мере необходимости)
# Проверки:
def check_toolbar_presence(self, titles: list[str]) -> None:
"""Проверяет видимость тулбара.
Args:
titles: Набор заголовков тулбара
"""
for title in titles:
locator = self.page.locator(f"{CertificateLocators.TOOLBAR_CASTOM}//span[contains(text(),'{title}')]")
expect(locator).to_be_visible(), f"Toolbar with title {title} is not visible"

View File

@ -1,224 +0,0 @@
"""Модуль создания объекта 'Стойка'."""
from dataclasses import dataclass
from playwright.sync_api import Page
from tools.logger import get_logger
from locators.rack_locators import RackLocators
from components.base_component import BaseComponent
logger = get_logger("RACK_MAKER")
@dataclass
class RackData:
"""Класс для хранения данных стойки."""
name: str
height: str = "42"
depth: str = "1000"
serial: str = ""
inventory: str = ""
comment: str = ""
cable_entry: str = ""
state: str = ""
owner: str = ""
service_org: str = ""
project: str = ""
class RackObjectMaker(BaseComponent):
"""Компонент для создания и настройки стойки."""
def __init__(self, page: Page) -> None:
"""
Инициализирует компонент создания стойки.
Args:
page: Экземпляр страницы Playwright
"""
super().__init__(page)
# Действия:
def fill_rack_data(self, rack_data: RackData) -> None:
"""
Заполняет данные для создания стойки.
Args:
rack_data: Данные стойки
"""
logger.info(f"Filling rack data: {rack_data.name}")
self._fill_required_fields(rack_data)
self._fill_optional_fields(rack_data)
self._fill_combobox_fields(rack_data)
logger.info("Rack data filled successfully")
def _fill_required_fields(self, rack_data: RackData) -> None:
"""Заполняет обязательные поля."""
if rack_data.name:
name_field = self.page.locator(RackLocators.RACK_NAME_FIELD).first
name_field.fill(rack_data.name)
logger.info(f"Filled 'Name' field: {rack_data.name}")
def _fill_optional_fields(self, rack_data: RackData) -> None:
"""Заполняет опциональные поля."""
if rack_data.serial:
serial_field = self.page.locator(RackLocators.RACK_SERIAL_FIELD).first
serial_field.fill(rack_data.serial)
logger.info(f"Filled serial number: {rack_data.serial}")
if rack_data.inventory:
inventory_field = self.page.locator(RackLocators.RACK_INVENTORY_FIELD).first
inventory_field.fill(rack_data.inventory)
logger.info(f"Filled inventory number: {rack_data.inventory}")
if rack_data.comment:
comment_field = self.page.locator(RackLocators.RACK_COMMENT_FIELD).first
comment_field.fill(rack_data.comment)
logger.info(f"Added comment: {rack_data.comment}")
def _fill_combobox_fields(self, rack_data: RackData) -> None:
"""Заполняет combobox поля."""
if rack_data.height:
self._fill_combobox_field("Height in units", rack_data.height,
RackLocators.RACK_HEIGHT_FIELD)
logger.info(f"Selected height: {rack_data.height} units")
if rack_data.depth:
self._fill_combobox_field("Depth (mm)", rack_data.depth,
RackLocators.RACK_DEPTH_FIELD)
logger.info(f"Selected depth: {rack_data.depth} mm")
if rack_data.cable_entry:
self._fill_combobox_field("Cable entry", rack_data.cable_entry,
RackLocators.RACK_CABLE_ENTRY_FIELD)
logger.info(f"Selected cable entry: {rack_data.cable_entry}")
if rack_data.state:
self._fill_combobox_field("State", rack_data.state,
RackLocators.RACK_STATE_FIELD)
logger.info(f"Selected state: {rack_data.state}")
if rack_data.owner:
self._fill_combobox_field("Owner", rack_data.owner,
RackLocators.RACK_OWNER_FIELD)
logger.info(f"Selected owner: {rack_data.owner}")
if rack_data.service_org:
self._fill_combobox_field("Service organization", rack_data.service_org,
RackLocators.RACK_SERVICE_ORG_FIELD)
logger.info(f"Selected service organization: {rack_data.service_org}")
if rack_data.project:
self._fill_combobox_field("Project/Title", rack_data.project,
RackLocators.RACK_PROJECT_FIELD)
logger.info(f"Selected project/title: {rack_data.project}")
def _fill_combobox_field(self, field_name: str, value: str, field_locator: str) -> None:
"""
Заполняет combobox поле.
Args:
field_name: Название поля
value: Значение для установки
field_locator: Локатор поля
"""
logger.info(f"Filling field '{field_name}' with value '{value}'...")
# Используем first() для избежания strict mode violation
field_container = self.page.locator(field_locator).first
# Прокручиваем до поля
field_container.scroll_into_view_if_needed()
self.wait_for_timeout(500)
# Проверяем видимость поля
self.check_visibility(field_container, f"Field '{field_name}' not found")
# Кликаем и вводим значение
field_container.click(force=True)
self.wait_for_timeout(1000)
# Вводим значение
self.page.keyboard.type(value)
self.wait_for_timeout(500)
self.page.keyboard.press("Enter")
logger.info(f"Field '{field_name}' filled successfully")
def _get_field_locator(self, field_name: str) -> str:
"""
Возвращает локатор поля по его названию.
Args:
field_name: Название поля
Returns:
str: Локатор поля
"""
field_map = {
"Имя": RackLocators.RACK_NAME_FIELD,
"Высота в юнитах": RackLocators.RACK_HEIGHT_FIELD,
"Глубина (мм)": RackLocators.RACK_DEPTH_FIELD
}
if field_name not in field_map:
raise ValueError(f"Field '{field_name}' is not supported")
return field_map[field_name]
def wait_for_timeout(self, timeout: int) -> None:
"""
Ожидает указанное количество миллисекунд.
Args:
timeout: Время ожидания в миллисекундах
"""
self.page.wait_for_timeout(timeout)
# Проверки:
def check_rack_fields_presence(self) -> None:
"""
Проверяет наличие полей специфичных для стойки.
Raises:
AssertionError: Если какое-либо поле не найдено
"""
logger.info("Checking rack fields presence...")
# Основные обязательные поля
required_fields = [
(RackLocators.RACK_NAME_FIELD, "Name"),
(RackLocators.RACK_HEIGHT_FIELD, "Height in units"),
(RackLocators.RACK_DEPTH_FIELD, "Depth (mm)")
]
# Дополнительные поля
optional_fields = [
(RackLocators.RACK_SERIAL_FIELD, "Serial number"),
(RackLocators.RACK_INVENTORY_FIELD, "Inventory number"),
(RackLocators.RACK_COMMENT_FIELD, "Comment"),
(RackLocators.RACK_CABLE_ENTRY_FIELD, "Cable entry"),
(RackLocators.RACK_STATE_FIELD, "State"),
(RackLocators.RACK_OWNER_FIELD, "Owner"),
(RackLocators.RACK_SERVICE_ORG_FIELD, "Service organization"),
(RackLocators.RACK_PROJECT_FIELD, "Project/Title")
]
# Проверяем обязательные поля
for field_locator, field_name in required_fields:
field = self.page.locator(field_locator).first
self.check_visibility(field, f"Required field '{field_name}' not found")
logger.info(f"Required field '{field_name}' found")
# Проверяем дополнительные поля
for field_locator, field_name in optional_fields:
field = self.page.locator(field_locator).first
if field.count() > 0 and field.is_visible():
logger.info(f"Optional field '{field_name}' found")
else:
logger.info(f"Optional field '{field_name}' not found or not visible")
logger.info("All main rack fields are present")

View File

@ -0,0 +1,138 @@
"""Модуль контейнера для отображения событий вкладки Действия.
Содержит класс для работы с контейнером для отображения событий
вкладки Действия через Playwright.
"""
from playwright.sync_api import Page, Locator
from tools.logger import get_logger
from locators.event_panel_locators import EventPanelLocators
from components.events_container_component import EventsContainerComponent
from components_derived.modal_view_task import ViewTaskModalWindow
logger = get_logger("ACTIONS_EVENTS_CONTAINER")
class ActionsEventsContainer(EventsContainerComponent):
"""Компонент контейнера для отображения событий вкладки Действия.
Предоставляет методы для взаимодействия с элементами
контейнера для отображения событий вкладки Действия.
"""
def __init__(self, page: Page, locator: str | Locator):
"""Инициализирует компонент контейнера для отображения событий вкладки Действия.
Args:
page: Экземпляр страницы Playwright.
"""
super().__init__(page, locator)
toolbar_locator = self.get_locator(locator).locator(EventPanelLocators.TOOLBAR). \
filter(has_text="Фильтр Реальное время Архив")
self.add_tab_to_toolbar(toolbar_locator.locator(EventPanelLocators.FILTER_TOOLBAR_BUTTON), "filter_button")
self.add_tab_to_toolbar(toolbar_locator.locator(EventPanelLocators.REAL_TIME_TOOLBAR_BUTTON),
"real_time_button")
self.add_tab_to_toolbar(toolbar_locator.locator(EventPanelLocators.ARCHIVE_TOOLBAR_BUTTON), "archive_button")
self.add_tab_to_toolbar(toolbar_locator.locator(EventPanelLocators.PDF_TOOLBAR_BUTTON), "export_to_pdf_button")
self.add_tab_to_toolbar(toolbar_locator.locator(EventPanelLocators.CSV_TOOLBAR_BUTTON), "export_to_csv_button")
events_filter = self.get_events_filter()
events_filter.add_filtering_parameter("filter_status", "Статус")
events_filter.add_filtering_parameter("filter_task_name", "НАИМЕНОВАНИЕ ЗАДАЧИ")
events_filter.add_filtering_parameter("filter_object", "Объект")
events_filter.add_filtering_parameter("filter_user", "Пользователь")
# Действия:
def click_archive_button(self) -> None:
"""Нажимает кнопку Архив на тулбаре."""
self.toolbar.check_button_visibility("archive_button")
self.click_tab_button("archive_button")
def click_real_time_button(self) -> None:
"""Нажимает кнопку Реальное время на тулбаре."""
self.toolbar.check_button_visibility("real_time_button")
self.click_tab_button("real_time_button")
def click_events_table_row(self, index) -> ViewTaskModalWindow:
"""Выбор и нажатие на строку таблицы по ее индексу."""
loc = self.get_events_table_row_locator(index)
loc.scroll_into_view_if_needed()
loc.click()
return ViewTaskModalWindow(self.page)
# Проверки:
def check_content(self) -> None:
"""Проверяет содержимое контейнера для отображения событий вкладки Действия."""
expected_real_time_headers = ['ВРЕМЯ НАЧАЛА', 'ВРЕМЯ ЗАВЕРШЕНИЯ','СТАТУС',
'НАИМЕНОВАНИЕ ЗАДАЧИ', 'ОБЪЕКТ', 'ПОЛЬЗОВАТЕЛЬ', 'ОПИСАНИЕ']
expected_archive_headers = ['ВРЕМЯ НАЧАЛА', 'ВРЕМЯ ЗАВЕРШЕНИЯ','СТАТУС',
'НАИМЕНОВАНИЕ ЗАДАЧИ', 'ОБЪЕКТ', 'ПОЛЬЗОВАТЕЛЬ', 'ПРОЦЕССИНГ']
self.should_be_toolbar()
self.should_be_toolbar_buttons()
if not self.is_tab_active("real_time_button"):
self.click_tab_button("real_time_button")
self.wait_for_timeout(1000)
self.check_events_table_content(expected_real_time_headers)
if not self.is_tab_active("archive_button"):
self.click_tab_button("archive_button")
self.wait_for_timeout(1000)
self.check_events_table_content(expected_archive_headers)
events_filter = self.click_filter_button()
events_filter.check_content()
events_filter.should_be_filtering_parameter("Статус")
events_filter.should_be_filtering_parameter("НАИМЕНОВАНИЕ ЗАДАЧИ")
events_filter.should_be_filtering_parameter("Объект")
events_filter.should_be_filtering_parameter("Пользователь")
events_filter.click_close_button()
def check_events_table_content(self, expected_headers: list[str]) -> None:
"""Проверка содержимого таблицы"""
self.should_be_events_table()
events_table = self.get_events_table_content()
if len(events_table) == 0:
assert False, "The contents of the events table are missing"
self.check_events_table_headers(events_table[0], expected_headers)
for i in range(len(expected_headers)):
actual_state = self.get_arrow_button_state(i)
assert actual_state == "down", f"Arrow state for column {i} should be 'down'"
if len(events_table) == 1:
logger.info("Table body is missing")
else:
rows_count = len(events_table)
for j in range(1, rows_count-1):
self.check_events_table_status_button(j, "Статус")
self.should_be_pagination_buttons()
def should_be_toolbar_buttons(self) -> None:
"""Проверяет наличие и видимость кнопок тулбара."""
self.toolbar.check_button_visibility("filter_button")
self.toolbar.check_button_visibility("real_time_button")
self.toolbar.check_button_visibility("archive_button")
self.toolbar.check_button_visibility("export_to_pdf_button")
self.toolbar.check_button_visibility("export_to_csv_button")

View File

@ -0,0 +1,128 @@
"""Модуль контейнера для отображения событий аудита.
Содержит класс для работы с контейнером для отображения событий
аудита через Playwright.
"""
from playwright.sync_api import Page, Locator
from tools.logger import get_logger
from locators.event_panel_locators import EventPanelLocators
from components.events_container_component import EventsContainerComponent
logger = get_logger("AUDIT_EVENTS_CONTAINER")
class AuditEventsContainer(EventsContainerComponent):
"""Компонент контейнера для отображения событий аудита.
Предоставляет методы для взаимодействия с элементами
контейнера для отображения событий аудита.
"""
def __init__(self, page: Page, locator: str | Locator):
"""Инициализирует компонент контейнера для отображения событий аудита.
Args:
page: Экземпляр страницы Playwright.
"""
super().__init__(page, locator)
toolbar_locator = self.get_locator(locator).locator(EventPanelLocators.TOOLBAR)
self.add_tab_to_toolbar(toolbar_locator.locator(EventPanelLocators.FILTER_TOOLBAR_BUTTON), "filter_button")
self.add_tab_to_toolbar(toolbar_locator.locator(EventPanelLocators.EVENTS_TOOLBAR_BUTTON), "view_events_button")
self.add_tab_to_toolbar(toolbar_locator.locator(EventPanelLocators.PDF_TOOLBAR_BUTTON), "export_to_pdf_button")
self.add_tab_to_toolbar(toolbar_locator.locator(EventPanelLocators.CSV_TOOLBAR_BUTTON), "export_to_csv_button")
events_filter = self.get_events_filter()
events_filter.add_filtering_parameter("filter_type", "Тип")
events_filter.add_filtering_parameter("filter_role", "Роль")
events_filter.add_filtering_parameter("filter_name", "Имя")
events_filter.add_filtering_parameter("filter_ip", "ip")
# Действия:
# Проверки:
def check_content(self) -> None:
"""Проверяет содержимое контейнера для отображения событий аудита."""
expected_headers = [ 'ВРЕМЯ', 'ОПИСАНИЕ', 'ИДЕНТИФИКАТОР']
self.should_be_toolbar()
self.should_be_toolbar_buttons()
if not self.is_tab_active("view_events_button"):
self.click_tab_button("view_events_button")
self.wait_for_timeout(1000)
self.should_be_events_table()
events_table = self.get_events_table_content()
if len(events_table) == 0:
assert False, "The contents of the events table are missing"
self.check_events_table_headers(events_table[0], expected_headers)
for i in range(len(expected_headers)):
actual_state = self.get_arrow_button_state(i)
assert actual_state == "down", f"Arrow state for column {i} should be 'down'"
if len(events_table) == 1:
logger.info("Table body is missing")
self.should_be_pagination_buttons()
events_filter = self.click_filter_button()
events_filter.check_content()
events_filter.should_be_filtering_parameter("Тип")
events_filter.should_be_filtering_parameter("Роль")
events_filter.should_be_filtering_parameter("Имя")
events_filter.should_be_filtering_parameter("ip")
events_filter.click_close_button()
def check_content_security(self) -> None:
"""Проверяет содержимое контейнера для отображения событий безопасности."""
expected_headers = [ 'ВРЕМЯ', 'ОПИСАНИЕ', 'ИДЕНТИФИКАТОР', 'ТИП']
self.should_be_toolbar()
self.should_be_toolbar_buttons()
if not self.is_tab_active("view_events_button"):
self.click_tab_button("view_events_button")
self.wait_for_timeout(1000)
self.should_be_events_table()
events_table = self.get_events_table_content()
if len(events_table) == 0:
assert False, "The contents of the events table are missing"
self.check_events_table_headers(events_table[0], expected_headers)
for i in range(len(expected_headers)):
actual_state = self.get_arrow_button_state(i)
assert actual_state == "down", f"Arrow state for column {i} should be 'down'"
if len(events_table) == 1:
logger.info("Table body is missing")
self.should_be_pagination_buttons()
events_filter = self.click_filter_button()
events_filter.check_content()
events_filter.should_be_filtering_parameter("Тип")
events_filter.should_be_filtering_parameter("Роль")
events_filter.should_be_filtering_parameter("Имя")
events_filter.should_be_filtering_parameter("ip")
events_filter.click_close_button()
def should_be_toolbar_buttons(self) -> None:
"""Проверяет наличие и видимость кнопок тулбара."""
self.toolbar.check_button_visibility("filter_button")
self.toolbar.check_button_visibility("view_events_button")
self.toolbar.check_button_visibility("export_to_pdf_button")
self.toolbar.check_button_visibility("export_to_csv_button")

View File

@ -0,0 +1,88 @@
"""Модуль контейнера для отображения событий вкладки События панели событий.
Содержит класс для работы с контейнером для отображения событий
вкладки События панели событий через Playwright.
"""
from playwright.sync_api import Page, Locator
from tools.logger import get_logger
from locators.event_panel_locators import EventPanelLocators
from components.events_container_component import EventsContainerComponent
logger = get_logger("EVENTS_TAB_CONTAINER")
class EventsTabContainer(EventsContainerComponent):
"""Компонент контейнера для отображения событий вкладки События панели событий.
Предоставляет методы для взаимодействия с элементами
контейнера для отображения событий вкладки События панели событий.
"""
def __init__(self, page: Page, locator: str | Locator):
"""Инициализирует компонент контейнера для отображения событий вкладки События панели событий.
Args:
page: Экземпляр страницы Playwright.
"""
super().__init__(page, locator)
toolbar_locator = self.get_locator(locator).locator(EventPanelLocators.TOOLBAR)
self.add_tab_to_toolbar(toolbar_locator.locator(EventPanelLocators.FILTER_TOOLBAR_BUTTON), "filter_button")
self.add_tab_to_toolbar(toolbar_locator.locator(EventPanelLocators.EVENTS_TOOLBAR_BUTTON), "view_events_button")
self.add_tab_to_toolbar(toolbar_locator.locator(EventPanelLocators.PDF_TOOLBAR_BUTTON), "export_to_pdf_button")
self.add_tab_to_toolbar(toolbar_locator.locator(EventPanelLocators.CSV_TOOLBAR_BUTTON), "export_to_csv_button")
events_filter = self.get_events_filter()
events_filter.add_filtering_parameter("filter_type", "Тип")
events_filter.add_filtering_parameter("filter_strictness", "Критичность")
events_filter.add_filtering_parameter("filter_object", "Объект")
# Действия:
# Проверки:
def check_content(self) -> None:
"""Проверяет содержимое контейнера для отображения событий системного журнала."""
expected_headers = [ 'ВРЕМЯ', 'ТИП', 'КРИТИЧНОСТЬ', 'ОБЪЕКТ', 'ОПИСАНИЕ']
self.should_be_toolbar()
self.should_be_toolbar_buttons()
if not self.is_tab_active("view_events_button"):
self.click_tab_button("view_events_button")
self.wait_for_timeout(1000)
self.should_be_events_table()
events_table = self.get_events_table_content()
if len(events_table) == 0:
assert False, "The contents of the events table are missing"
self.check_events_table_headers(events_table[0], expected_headers)
for i in range(len(expected_headers)):
actual_state = self.get_arrow_button_state(i)
assert actual_state == "down", f"Arrow state for column {i} should be 'down'"
if len(events_table) == 1:
logger.info("Table body is missing")
self.should_be_pagination_buttons()
events_filter = self.click_filter_button()
events_filter.check_content()
events_filter.should_be_filtering_parameter("Тип")
events_filter.should_be_filtering_parameter("Критичность")
events_filter.should_be_filtering_parameter("Объект")
events_filter.click_close_button()
def should_be_toolbar_buttons(self) -> None:
"""Проверяет наличие и видимость кнопок тулбара."""
self.toolbar.check_button_visibility("filter_button")
self.toolbar.check_button_visibility("view_events_button")
self.toolbar.check_button_visibility("export_to_pdf_button")
self.toolbar.check_button_visibility("export_to_csv_button")

View File

@ -0,0 +1,103 @@
"""Модуль контейнера для отображения событий обслуживания.
Содержит класс для работы с контейнером для отображения событий
обслуживания через Playwright.
"""
from playwright.sync_api import Page, Locator
from tools.logger import get_logger
from locators.event_panel_locators import EventPanelLocators
from components.events_container_component import EventsContainerComponent
logger = get_logger("MAINTENANCE_EVENTS_CONTAINER")
class MaintenanceEventsContainer(EventsContainerComponent):
"""Компонент контейнера для отображения событий обслуживания.
Предоставляет методы для взаимодействия с элементами
контейнера для отображения событий системного журнала.
"""
def __init__(self, page: Page, locator: str | Locator):
"""Инициализирует компонент контейнера для отображения событий обслуживания.
Args:
page: Экземпляр страницы Playwright.
"""
super().__init__(page, locator)
toolbar_locator = self.get_locator(locator).locator(EventPanelLocators.TOOLBAR)
self.add_tab_to_toolbar(toolbar_locator.locator(EventPanelLocators.FILTER_TOOLBAR_BUTTON), "filter_button")
self.add_tab_to_toolbar(toolbar_locator.locator(EventPanelLocators.MAINTENANCE_TOOLBAR_BUTTON),
"maintenance_button")
self.add_tab_to_toolbar(toolbar_locator.locator(EventPanelLocators.PDF_TOOLBAR_BUTTON), "export_to_pdf_button")
self.add_tab_to_toolbar(toolbar_locator.locator(EventPanelLocators.CSV_TOOLBAR_BUTTON), "export_to_csv_button")
events_filter = self.get_events_filter()
events_filter.add_filtering_parameter("filter_event_name", "Наименование события")
events_filter.add_filtering_parameter("filter_type", "Тип")
events_filter.add_filtering_parameter("filter_status", "Состояние")
events_filter.add_filtering_parameter("filter_object", "Объект")
events_filter.add_filtering_parameter("filter_author", "Автор")
events_filter.add_filtering_parameter("filter_location", "Расположение")
# Действия:
# Проверки:
def check_content(self) -> None:
"""Проверяет содержимое контейнера для отображения событий обслуживания."""
expected_headers = ['ДАТА', 'НАИМЕНОВАНИЕ СОБЫТИЯ' ,'ТИП',
'СОСТОЯНИЕ', 'ОБЪЕКТ', 'АВТОР', 'РАСПОЛОЖЕНИЕ']
self.should_be_toolbar()
self.should_be_toolbar_buttons()
if not self.is_tab_active("maintenance_button"):
self.click_tab_button("maintenance_button")
self.wait_for_timeout(1000)
self.should_be_events_table()
events_table = self.get_events_table_content()
if len(events_table) == 0:
assert False, "The contents of the events table are missing"
self.check_events_table_headers(events_table[0], expected_headers)
for i in range(len(expected_headers)):
actual_state = self.get_arrow_button_state(i)
assert actual_state == "down", f"Arrow state for column {i} should be 'down'"
rows_count = len(events_table)
if rows_count == 1:
logger.info("Table body is missing")
else:
j = 1
while j < rows_count:
self.check_events_table_status_button(j, "Состояние")
j += 1
self.should_be_pagination_buttons()
events_filter = self.click_filter_button()
events_filter.check_content()
events_filter.should_be_filtering_parameter("Наименование события")
events_filter.should_be_filtering_parameter("Тип")
events_filter.should_be_filtering_parameter("Состояние")
events_filter.should_be_filtering_parameter("Объект")
events_filter.should_be_filtering_parameter("Автор")
events_filter.should_be_filtering_parameter("Расположение")
events_filter.click_close_button()
def should_be_toolbar_buttons(self) -> None:
"""Проверяет наличие и видимость кнопок тулбара."""
self.toolbar.check_button_visibility("filter_button")
self.toolbar.check_button_visibility("maintenance_button")
self.toolbar.check_button_visibility("export_to_pdf_button")
self.toolbar.check_button_visibility("export_to_csv_button")

View File

@ -6,7 +6,7 @@
from playwright.sync_api import Page, Locator
from tools.logger import get_logger
from locators.toolbar_locators import ToolbarLocators
from locators.event_panel_locators import EventPanelLocators
from components.events_container_component import EventsContainerComponent
logger = get_logger("SYSTEM_LOG_EVENTS_CONTAINER")
@ -28,26 +28,31 @@ class SystemLogEventsContainer(EventsContainerComponent):
super().__init__(page, locator)
self.add_tab_to_toolbar(ToolbarLocators.TABS, "events")
toolbar_locator = self.get_locator(locator).locator(EventPanelLocators.TOOLBAR)
sidebar_filter = self.get_sidebar_filter()
sidebar_filter.add_filtering_parameter("filter_type", "Тип")
sidebar_filter.add_filtering_parameter("filter_strictness", "Строгость")
sidebar_filter.add_filtering_parameter("filter_host", "Хост")
self.add_tab_to_toolbar(toolbar_locator.locator(EventPanelLocators.FILTER_TOOLBAR_BUTTON), "filter_button")
self.add_tab_to_toolbar(toolbar_locator.locator(EventPanelLocators.EVENTS_TOOLBAR_BUTTON), "view_events_button")
self.add_tab_to_toolbar(toolbar_locator.locator(EventPanelLocators.PDF_TOOLBAR_BUTTON), "export_to_pdf_button")
self.add_tab_to_toolbar(toolbar_locator.locator(EventPanelLocators.CSV_TOOLBAR_BUTTON), "export_to_csv_button")
events_filter = self.get_events_filter()
events_filter.add_filtering_parameter("filter_type", "Тип")
events_filter.add_filtering_parameter("filter_strictness", "Критичность")
events_filter.add_filtering_parameter("filter_object", "Объект")
# Действия:
# Проверки:
def check_content(self) -> None:
"""Проверяет содержимое контейнера для отображения событий системного журнала."""
expected_headers = ['ТИП', 'ВРЕМЯ', 'СТРОГОСТЬ', 'ХОСТ', 'ОПИСАНИЕ']
expected_headers = ['ВРЕМЯ', 'ТИП','КРИТИЧНОСТЬ', 'ОБЪЕКТ', 'ОПИСАНИЕ']
self.should_be_toolbar()
self.should_be_base_toolbar_buttons()
self.should_be_toolbar_buttons()
events_tab = self.get_toolbar_tab_button("events")
events_tab_text = events_tab.get_text(0)
assert events_tab_text.find("События") != -1, "Tab button with text События is missing on toolbar"
if not self.is_tab_active("view_events_button"):
self.click_tab_button("view_events_button")
self.wait_for_timeout(1000)
self.should_be_events_table()
events_table = self.get_events_table_content()
@ -56,23 +61,37 @@ class SystemLogEventsContainer(EventsContainerComponent):
assert False, "The contents of the events table are missing"
self.check_events_table_headers(events_table[0], expected_headers)
for i in range(len(expected_headers)):
actual_state = self.get_arrow_button_state(i)
assert actual_state == "down", f"Arrow state for column {i} should be 'down'"
if len(events_table) == 1:
assert False, "Table body is missing"
logger.info("Table body is missing")
else:
j = 1
# так как записей много, проверяем первые 40
rows_count = 40
if len(events_table) < 40:
rows_count = len(events_table)
while j < rows_count:
self.check_events_table_status_button(j, "Критичность")
j += 1
self.should_be_pagination_buttons()
sidebar_filter = self.click_filter_button()
sidebar_filter.check_content()
events_filter = self.click_filter_button()
events_filter.check_content()
filter_type_bar = sidebar_filter.get_filtering_parameter("filter_type")
filter_type_title = filter_type_bar.get_selection_bar_title()
assert filter_type_title == "Тип", "Filtering parameter bar 'Тип' is missing"
events_filter.should_be_filtering_parameter("Тип")
events_filter.should_be_filtering_parameter("Критичность")
events_filter.should_be_filtering_parameter("Объект")
filter_strictness_bar = sidebar_filter.get_filtering_parameter("filter_strictness")
filter_strictness_title = filter_strictness_bar.get_selection_bar_title()
assert filter_strictness_title == "Строгость", "Filtering parameter bar 'Строгость' is missing"
events_filter.click_close_button()
filter_host_bar = sidebar_filter.get_filtering_parameter("filter_host")
filter_host_title = filter_host_bar.get_selection_bar_title()
assert filter_host_title == "Хост", "Filtering parameter bar 'Хост' is missing"
def should_be_toolbar_buttons(self) -> None:
"""Проверяет наличие и видимость кнопок тулбара."""
self.toolbar.check_button_visibility("filter_button")
self.toolbar.check_button_visibility("view_events_button")
self.toolbar.check_button_visibility("export_to_pdf_button")
self.toolbar.check_button_visibility("export_to_csv_button")

View File

@ -5,9 +5,8 @@
from playwright.sync_api import Page, Locator, expect
from tools.logger import get_logger
# from elements.text_element import Text
from elements.text_input_element import TextInput
from elements.button_element import Button
from elements.tooltip_button_element import TooltipButton
from components.date_picker_component import DatePickerComponent
from components.base_component import BaseComponent
@ -32,7 +31,7 @@ class DateInput(BaseComponent):
self.date_input_locator = self.get_locator(locator)
self.switch_mode_button = Button(page,
self.switch_mode_button = TooltipButton(page,
self.date_input_locator.get_by_role("button"),
"switch_mode_button")
@ -88,11 +87,15 @@ class DateInput(BaseComponent):
except ValueError:
assert False, f"Incorrect year value {year} for selection"
if self.is_text_input_mode():
# Temporarily due to error in UI
if not self.is_text_input_mode():
# if self.is_text_input_mode():
# print("by keyboard")
self.date_input_field.check_editable_input("Text field for date input should be editable")
self.date_input_field.clear()
self.date_input_field.input_value(date)
else:
# print("by date picker")
self.date_picker.select_year_and_month(year, month)
self.date_picker.select_day(day)
@ -123,8 +126,9 @@ class DateInput(BaseComponent):
self.check_switch_mode_button_visibility()
label_locator = self.date_input_locator.get_by_label(label)
expect(label_locator).to_be_visible()
# Temporarily: due to error in UI
# label_locator = self.date_input_locator.get_by_label(label)
# expect(label_locator).to_be_visible()
self.date_input_field.check_visibility("Text field for date input is missing")
self.date_input_field.check_empty_input("Text field for date input should be empty")
@ -135,18 +139,21 @@ class DateInput(BaseComponent):
self.page.wait_for_timeout(300)
self.date_picker.check_content()
self.check_switch_mode_button_tooltip()
self.click_switch_mode_button()
self.check_switch_mode_button_tooltip()
self.click_switch_mode_button()
self.page.wait_for_timeout(300)
self.page.wait_for_timeout(1000)
self.input_date("11.11.2011")
label_locator = self.date_input_locator.get_by_label("Время")
expect(label_locator).to_be_visible()
self.time_input_field.check_visibility("Text field for time input is missing")
current_time_value = self.get_time_field_value()
assert current_time_value == "00:00", \
assert current_time_value == "", \
"Should be empty time input field"
def check_switch_mode_button_visibility(self) -> None:
@ -154,12 +161,27 @@ class DateInput(BaseComponent):
self.switch_mode_button.check_visibility("Switch Mode Button is missing")
def check_switch_mode_button_tooltip(self) -> None:
""" Проверка tooltip кнопки переключения режимов ввода."""
text_mode = self.is_text_input_mode()
tooltip_text = self.switch_mode_button.get_tooltip_text()
if text_mode:
assert tooltip_text == "Ручной ввод", \
"Should be 'Ручной ввод' tooltip for switch mode button"
else:
assert tooltip_text == "Выбрать в календаре", \
"Should be 'Выбрать в календаре' tooltip for switch mode button"
def is_text_input_mode(self) -> bool:
""" Проверка текстового режима ввода."""
result = False
inner_text = self.switch_mode_button.get_text(0).strip()
print(inner_text)
if inner_text == "keyboard":
result = True
return result

View File

@ -1,59 +1,58 @@
"""Модуль компонента боковой панели формы ввода полей фильтрации отображения данных в панели событий. Содержит класс
"""Модуль панели формы ввода полей фильтрации отображения данных в панели событий. Содержит класс
для работы с формами ввода, их элементами и проверками."""
from playwright.sync_api import Page, Locator
from playwright.sync_api import Page, Locator, expect
from tools.logger import get_logger
from elements.button_element import Button
from components.toolbar_component import ToolbarComponent
from components.base_component import BaseComponent
from components_derived.selection_bar_component import SelectionBarComponent
from components_derived.date_input_component import DateInput
logger = get_logger("SIDEBAR_FILTER")
logger = get_logger("EVENTS_FILTER_PANEL")
class SidebarFilterComponent(BaseComponent):
"""Компонент боковой панели формы ввода полей фильтрации отображения данных в панели событий. Предоставляет методы
class EventsFilterPanel(BaseComponent):
"""Панель формы ввода полей фильтрации отображения данных в панели событий. Предоставляет методы
для взаимодействия с формой, ее содержимым и проверок."""
def __init__(self, page: Page, locator: str | Locator):
"""Инициализирует компонент боковой панели формы ввода параметров фильтрации.
def __init__(self, page: Page):
"""Инициализирует компонент модального окна формы ввода параметров фильтрации.
Args:
page: Экземпляр страницы Playwright
locator: Локатор контейнера (строка или объект Locator) для которого вызывается панель
"""
super().__init__(page)
self.sidebar_locator = self.get_locator(locator)
self.toolbar = ToolbarComponent(page, "Настройки и параметры")
self.events_filter_locator = self.page.locator("div.menuable__content__active div.scrollarea__body")
# Поля ввода даты начала и даты окончания события
self.start_time_filter = DateInput(page,
self.sidebar_locator.locator(
"//div[contains(@class, 'scrollarea__body')]/div").nth(0))
self.finish_time_filter = DateInput(page,
self.sidebar_locator.locator(
"//div[contains(@class, 'scrollarea__body')]/div").nth(1))
loc = self.page. \
locator("div.menuable__content__active div.scrollarea__body > div:nth-child(1) > div:nth-child(1)")
self.start_time_filter = DateInput(page, loc)
loc = self.page. \
locator("div.menuable__content__active div.scrollarea__body > div:nth-child(1) > div:nth-child(2)")
self.finish_time_filter = DateInput(page, loc)
# Поля задания параметров фильтрации (произвольное количество)
self.filtering_parameters = {}
# Кнопки задания/сброса параметров фильтрации
self.apply_button = Button(page,
self.sidebar_locator.get_by_role("button").filter(has_text='Применить Фильтры'),
self.page.get_by_role("button").filter(has_text='Применить Фильтры'),
"apply_button")
self.reset_button = Button(page,
self.sidebar_locator.get_by_role("button").filter(has_text='Сбросить Фильтры'),
self.page.get_by_role("button").filter(has_text='Сбросить Фильтры'),
"reset_button")
self.close_button = Button(page,
self.page.get_by_role("button").filter(has_text='Закрыть'),
"close_button")
# Действия:
def add_filtering_parameter(self, name: str, title: str) -> None:
"""Добавляет поле задания параметров фильтрации по заданному имени."""
loc = self.sidebar_locator.locator("//div[contains(@class, 'scrollarea__body')]").\
get_by_role("combobox").filter(has_text=title)
# loc = self.events_filter_locator.get_by_role("combobox").filter(has_text=title)
loc = self.events_filter_locator.get_by_role("combobox").get_by_placeholder(title)
self.filtering_parameters[name] = SelectionBarComponent(self.page, loc)
def get_filtering_parameter(self, name: str) -> SelectionBarComponent | None:
@ -81,17 +80,21 @@ class SidebarFilterComponent(BaseComponent):
self.reset_button.click()
def click_close_button(self) -> None:
"""Клик по кнопке закрытия окна фильтрации."""
self.close_button.click()
# Проверки:
def check_content(self) -> None:
"""Проверяет наличие постоянных полей панели параметров фильтрации."""
self.should_be_toolbar()
self.start_time_filter.check_content("Дата начала")
self.finish_time_filter.check_content("Дата окончания")
self.check_apply_button_visibility()
self.check_reset_button_visibility()
self.check_close_button_visibility()
def check_vertical_scrolling(self, locator: str| Locator) -> bool:
"""Проверяет возможность вертикальной прокрутки формы."""
@ -103,17 +106,18 @@ class SidebarFilterComponent(BaseComponent):
self.apply_button.check_visibility("Apply Filter Button is missing")
def check_close_button_visibility(self) -> None:
"""Проверяет наличие кнопки закрытия окна фильтрации."""
self.close_button.check_visibility("Close Filter window Button is missing")
def check_reset_button_visibility(self) -> None:
"""Проверяет наличие кнопки сброса фильтра."""
self.reset_button.check_visibility("Reset Filter Button is missing")
def should_be_toolbar(self) -> None:
"""Проверяет наличие тулбара.
def should_be_filtering_parameter(self, title: str) -> None:
"""Проверяет наличие поля панели параметров фильтрации по его заголовку."""
Raises:
AssertionError: Если тулбар отсутствует.
"""
self.toolbar.check_toolbar_presence_by_locator_and_title(self.sidebar_locator,
"Sidebar Filter form toolbar is missing")
loc = self.events_filter_locator.get_by_role("combobox").get_by_placeholder(title)
expect(loc).to_be_visible(), f"Filtering parameter bar '{title}' is missing"

View File

@ -1,267 +0,0 @@
"""Модуль фрейма создания дочернего элемента."""
import re
from playwright.sync_api import expect, Page
from tools.logger import get_logger
from locators.rack_locators import RackLocators
from components.alert_component import AlertComponent
from components.base_component import BaseComponent
from components.toolbar_component import ToolbarComponent
from components_derived.selection_bar_component import SelectionBarComponent
logger = get_logger("CREATE_CHILD_ELEMENT_FRAME")
class CreateChildElementFrame(BaseComponent):
"""Фрейм создания дочернего элемента."""
def __init__(self, page: Page) -> None:
"""
Инициализирует фрейм создания дочернего элемента.
Args:
page: Экземпляр страницы Playwright
"""
super().__init__(page)
# Инициализация компонентов
self.toolbar = ToolbarComponent(page, "Создать дочерний элемент в")
self.selection_bar = SelectionBarComponent(page, "Класс объекта учета")
self.alert = AlertComponent(page)
# Кнопка "Добавить" - первая кнопка в тулбаре фрейма создания
add_button_locator = self.page.get_by_role("navigation").filter(
has_text="Создать дочерний элемент в"
).get_by_role("button").nth(0)
# Кнопка "Отменить" - используем рабочий локатор из старой версии
cancel_button_locator = self.page.get_by_role("navigation").filter(
has_text=re.compile('Создать дочерний элемент в')
).get_by_role("button").nth(1)
# Инициализация кнопок
self.toolbar.add_tooltip_button(add_button_locator, "add")
self.toolbar.add_tooltip_button(cancel_button_locator, "cancel")
# Действия:
def get_object_class_options(self) -> list[str]:
"""
Получает список доступных опций из combobox.
Returns:
list[str]: Список доступных классов объектов
"""
logger.info("Getting combobox 'Accounting object class' options...")
available_options = self.selection_bar.get_available_options()
logger.info(f"Available object class options: {available_options}")
return available_options
def get_selected_object_class(self) -> str:
"""
Получает выбранный класс объекта учета.
Returns:
str: Выбранный класс объекта или пустая строка если ничего не выбрано
"""
return self.selection_bar.get_selection_bar_title()
def _get_field_locator(self, field_name: str) -> str:
"""
Возвращает локатор поля по его названию.
Args:
field_name: Название поля
Returns:
str: Локатор поля
"""
field_map = {
"Имя": RackLocators.RACK_NAME_FIELD,
"Высота в юнитах": RackLocators.RACK_HEIGHT_FIELD,
"Глубина (мм)": RackLocators.RACK_DEPTH_FIELD,
"Серийный номер": RackLocators.RACK_SERIAL_FIELD,
"Инвентарный номер": RackLocators.RACK_INVENTORY_FIELD,
"Комментарий": RackLocators.RACK_COMMENT_FIELD,
"Ввод кабеля": RackLocators.RACK_CABLE_ENTRY_FIELD,
"Состояние": RackLocators.RACK_STATE_FIELD,
"Владелец": RackLocators.RACK_OWNER_FIELD,
"Обслуживающая организация": RackLocators.RACK_SERVICE_ORG_FIELD,
"Проект/Титул": RackLocators.RACK_PROJECT_FIELD
}
if field_name not in field_map:
raise ValueError(f"Locator for field '{field_name}' not found")
return field_map[field_name]
def clear_combobox_field(self, field_name: str) -> None:
"""
Очищает combobox поле по его названию.
Args:
field_name: Название поля для очистки
"""
logger.info(f"Clearing combobox field '{field_name}'...")
# Получаем локатор поля по его названию
field_locator = self._get_field_locator(field_name)
# Используем метод из SelectionBarComponent
self.selection_bar.clear_combobox_field(field_name, field_locator)
def click_add_button(self) -> None:
"""Кликает на кнопку 'Добавить'."""
logger.info("Clicking on 'Add' button...")
self.toolbar.click_button("add")
def click_cancel_button(self) -> None:
"""Кликает на кнопку 'Отменить'."""
logger.info("Clicking on 'Cancel' button...")
self.toolbar.click_button("cancel")
def open_object_class_combobox(self) -> None:
"""Открывает выпадающий список combobox 'Класс объекта учета'."""
logger.info("Opening combobox 'Accounting object class'...")
# Ждем стабильности combobox
expect(self.selection_bar.selection_bar_locator).to_be_visible()
# Проверяем, не открыт ли уже выпадающий список
is_menu_active = self.selection_bar.selection_bar_locator.get_attribute(
"class"
)
if is_menu_active and "v-select--is-menu-active" in is_menu_active:
logger.info("Dropdown list is already open")
return
# Используем force click для обхода перекрывающих элементов
logger.info("Using force click for combobox")
self.selection_bar.selection_bar_locator.click(force=True)
# Ждем появления выпадающего списка
self.wait_for_timeout(1500)
def select_object_class(self, class_name: str) -> None:
"""Выбирает класс объекта из выпадающего списка."""
logger.info(f"Selecting object class: '{class_name}'...")
# Открываем combobox
self.open_object_class_combobox()
# Выбираем значение из списка
self.selection_bar.select_value(class_name)
# Даем время на применение выбора
self.wait_for_timeout(3000)
# Логируем текущее состояние без строгой проверки
selected_value = self.get_selected_object_class()
logger.info(f"Current combobox value: '{selected_value}'")
# Временно пропускаем строгую проверку
logger.info(f"Assuming class '{class_name}' is selected")
logger.info(f"Object class '{class_name}' successfully selected")
def wait_for_timeout(self, timeout: int) -> None:
"""
Ожидает указанное количество миллисекунд.
Args:
timeout: Время ожидания в миллисекундах
"""
self.page.wait_for_timeout(timeout)
# Проверки:
def check_object_class_selected(self, expected_class: str) -> None:
"""
Проверяет что выбран указанный класс объекта.
Args:
expected_class: Ожидаемый выбранный класс объекта
Raises:
AssertionError: Если выбранный класс не соответствует ожидаемому
"""
logger.info(f"Checking selected object class: '{expected_class}'...")
self.wait_for_timeout(1000)
actual_class = self.get_selected_object_class()
if (expected_class.lower() in actual_class.lower() or
actual_class.lower() in expected_class.lower()):
logger.info(
f"Object class '{expected_class}' successfully selected "
f"(actual: '{actual_class}')"
)
else:
error_msg = (
f"Selected class does not match expected. "
f"Expected: '{expected_class}', Got: '{actual_class}'"
)
raise AssertionError(error_msg)
def check_toolbar_title(self, expected_title: str) -> None:
"""
Проверяет заголовок тулбара.
Args:
expected_title: Ожидаемый заголовок тулбара
Raises:
AssertionError: Если заголовок не соответствует ожидаемому
"""
logger.info(f"Checking toolbar title: '{expected_title}'...")
# Используем метод тулбара с фильтрацией по тексту
actual_text = self.toolbar.get_toolbar_title_text(
filter_text="Создать дочерний элемент в"
)
assert expected_title in actual_text, (
f"Title does not match. Expected: '{expected_title}', "
f"Got: '{actual_text}'"
)
logger.info(f"Toolbar title is correct: '{actual_text}'")
def should_be_toolbar_buttons(self) -> None:
"""
Проверяет наличие и функциональность кнопок тулбара.
Raises:
AssertionError: Если кнопки недоступны или подсказки неверны.
"""
self.wait_for_timeout(2000)
self.toolbar.check_button_visibility("cancel")
self.toolbar.check_button_tooltip("cancel", "Отменить")
self.toolbar.get_button_by_name("cancel").click()
self.wait_for_timeout(2000)
# Методы проверки ошибок полей (используют SelectionBarComponent)
def check_field_highlighted_error(self, field_name: str) -> None:
"""
Проверяет, что поле подсвечено цветом ошибки (валидация не пройдена).
Args:
field_name: Название поля для проверки
"""
field_locator = self._get_field_locator(field_name)
self.selection_bar.check_field_highlighted_error(field_name, field_locator)
def check_field_not_highlighted_error(self, field_name: str) -> None:
"""
Проверяет, что поле НЕ подсвечено цветом ошибки (валидация успешна).
Args:
field_name: Название поля для проверки
"""
field_locator = self._get_field_locator(field_name)
self.selection_bar.check_field_not_highlighted_error(field_name, field_locator)

View File

@ -0,0 +1,93 @@
"""Модуль контейнера для импорта сертификата во вкладке 'Сертификаты'.
Содержит класс для работы с формой для импорта
сертификата во вкладке 'Сертификаты' через Playwright.
"""
from playwright.sync_api import Page, expect
from tools.logger import get_logger
from locators.certificate_locators import CertificateLocators
from elements.text_input_element import TextInput
from elements.text_element import Text
from elements.tooltip_button_element import TooltipButton
from components.toolbar_custom_component import CustomToolbar
from components.base_component import BaseComponent
logger = get_logger("IMPORT_CRTIFICATE_FORM")
class ImportCertificateForm(BaseComponent):
"""Компонент формы для импорта сертификата во вкладке 'Сертификаты'.
Предоставляет методы для взаимодействия с элементами
формы для импорта сертификата во вкладке 'Сертификаты'.
"""
def __init__(self, page: Page):
"""Инициализирует компонент формы для импорта сертификата во вкладке 'Сертификаты'.
Args:
page: Экземпляр страницы Playwright.
"""
super().__init__(page)
import_title_locator = page.locator(CertificateLocators.BLOCK_HEADER_TEXT). \
filter(has_text='Импорт CA (P12)')
self.import_title = Text(page, import_title_locator, "import_title")
button_locator = page.locator(CertificateLocators.BUTTON_IMPORT)
self.button_import = TooltipButton(page, button_locator, "button_import")
self.toolbar_info = CustomToolbar(page)
self.password_input = TextInput(page, CertificateLocators.FIELD_INPUT_PASSWORD,
"password_input_field")
# Действия:
def get_password_field_value(self) -> str:
"""Возвращает текущее значение поля 'Пароль'.
Returns:
str : Текущее значение поля 'Пароль.
"""
return self.password_input.get_input_value().strip()
def input_password_field(self, value: str) -> None:
"""Заполнение поля 'Пароль'"""
self.password_input.clear()
self.password_input.input_value(value)
def _get_label_for_input_field(self, field_locator: str) -> str:
div_loc = f"//div[contains(@class, 'flex')][.{field_locator}]"
label = self.page.locator(div_loc).locator("//preceding-sibling::div[1]").locator("//input")
return label.input_value()
# Проверки:
def check_content(self):
"""Проверяет наличие и корректность всех элементов формы."""
self.import_title.check_visibility("Title 'Импорт CA (P12)' is missing")
self.button_import.check_visibility("Import certificate button is missing")
assert self.button_import.is_disabled(), "Import certificate button should be disabled"
self.button_import.check_tooltip_with_text("Импорт сертификата (CA)")
# Проверка информационного тулбара
self.toolbar_info.check_toolbar_presence(['Создание нового сертификата',
'Приведет к замене корневого сертификата системы'])
# проверка наличия всех полей формы
password_label = self._get_label_for_input_field(CertificateLocators.FIELD_INPUT_PASSWORD).strip()
assert password_label == 'Пароль', f"Unexpected field name {password_label} has got"
self.password_input.check_visibility("Field password input is missing")
info_loc = self.page.get_by_text("Пароль используется для расшифровки закрытого ключа в файле P12")
expect(info_loc).to_be_visible()
def is_import_button_disabled(self) -> bool:
"""Проверяет наличие и доступность кнопки перевыпуска сертификата."""
self.button_import.check_visibility("Import certificate button is missing")
return self.button_import.is_disabled()

View File

@ -1,78 +0,0 @@
"""Модуль interactive_dropdown_list_component содержит класс для работы с интерактивными выпадающими списками,
позволяющими сделать выбор нескольких элементов.
Класс InteractiveDropdownList наследует базовый функционал BaseComponent и добавляет
методы для взаимодействия с интерактивными выпадающими списками на странице.
"""
from playwright.sync_api import Page, Locator, expect
from tools.logger import get_logger
from components.base_component import BaseComponent
logger = get_logger("INTERACTIVE_DROPDOWN_LIST")
class InteractiveDropdownList(BaseComponent):
"""Класс для работы с выпадающими списками.
Наследует функциональность BaseElement и добавляет специфичные
методы для выбора и проверки элементов списка.
"""
def __init__(self, page: Page) -> None:
"""Инициализирует компонент интерактивного выпадающего списка.
Args:
page: Экземпляр страницы Playwright.
"""
super().__init__(page)
# Действия:
def get_checkbox_locator(self, text: str) -> Locator:
"""Возвращает локатор чек-бокса для элемента списка с указанным текстом.
Args:
text (str): Текст элемента для выбора.
"""
checkbox_locator = self.get_locator('div.v-list__tile__title').get_by_text(text). \
locator("../..").locator("//input[@role='checkbox']")
expect(checkbox_locator).to_be_visible(), \
f"Checkbox for dropdown list item with text {text} is missing"
return checkbox_locator
def deselect_item_with_text(self, text: str) -> None:
"""Выбирает элемент списка по указанному тексту.
Args:
text (str): Текст элемента для выбора.
"""
self.get_checkbox_locator(text).uncheck(force=True)
def select_item_with_text(self, text: str) -> None:
"""Выбирает элемент списка по указанному тексту.
Args:
text (str): Текст элемента для выбора.
"""
self.get_checkbox_locator(text).check(force=True)
def get_selected_items(self, locator: str|Locator) -> list[str]:
"""Возвращает список отмеченных элементов."""
selected_items = []
list_locator = self.get_locator(locator)
items = list_locator.get_by_role("listitem").all()
for item in items:
if item.get_by_role("checkbox").is_checked():
item_text = item.text_content().strip()
if item_text:
selected_items.append(item_text)
return selected_items
# Проверки:

View File

@ -1,471 +0,0 @@
"""Модуль modal_add_user содержит класс для работы с модальным окном добавления пользователя.
Класс AddUserModalWindow наследует базовый функционал ModalWindowComponent
и реализует специфичные методы для работы с формами добавления пользователей.
"""
import re
from playwright.sync_api import Page
from tools.logger import get_logger
from locators.modal_window_locators import ModalWindowLocators
from elements.text_input_element import TextInput
from elements.text_element import Text
from elements.checkbox_element import Checkbox
from data.roles_dict import roles_dict
from components.modal_window_component import ModalWindowComponent
from components.dropdown_list_component import DropdownList
from components.confirm_component import ConfirmComponent
logger = get_logger("ADD_USER_FROM_ACTIVE_DIRECTORY_MODAL_WINDOW")
class AddADUserModalWindow(ModalWindowComponent):
"""Модальное окно добавления нового пользователя.
Наследует ModalWindowComponent и добавляет элементы формы:
- Поля ввода (имя, пароль, email и др.)
- Чекбоксы (Active Directory, Push-уведомления)
- Выпадающие списки групп, пользователей AD, ролей
- Кнопки действий
"""
def __init__(self, page: Page):
"""Инициализирует элементы формы добавления пользователя."""
super().__init__(page)
# Локаторы элементов формы
input_form_locator = page.locator(ModalWindowLocators.INPUT_FORM_USER_DATA)
text_field_locator = f"xpath={ModalWindowLocators.TEXT_FIELD_INPUT_FORM_USER_DATA}"
label_locator = ModalWindowLocators.LABEL_INPUT_FORM_USER_DATA
# Настройка заголовка и кнопки закрытия тулбара
self.window_title = "Добавить нового пользователя"
locator_button_toolbar_close = self.page.get_by_role("navigation").filter(
has_text=re.compile(self.window_title)
).get_by_role("button")
self.add_toolbar_title(self.window_title)
self.add_toolbar_button(locator_button_toolbar_close, "close")
# Добавление элементов формы
checkbox_1 = Checkbox(
page,
input_form_locator.get_by_role("checkbox").nth(0),
"active_directory"
)
self.add_content_item("active_directory_checkbox", checkbox_1)
label_1 = Text(
page,
self.page.locator(label_locator).nth(0),
"active_directory_checkbox_label"
)
self.add_content_item("active_directory_checkbox_label", label_1)
# Начальный набор полей формы
# Поле Группа
group_loc = input_form_locator.get_by_role("combobox").nth(0)
group_input = TextInput(page, group_loc, "group_input")
self.add_content_item("group_input", group_input)
self.add_content_item(
"group_list",
DropdownList(page)
)
locator_button_search = self.page.get_by_role("button", name="Поиск")
self.add_button(locator_button_search, "search")
# Поле Имя
# loc = input_form_locator.locator("xpath=div[2]").locator(text_field_locator)
loc = input_form_locator.locator("xpath=div[3]").locator(text_field_locator)
name_input = TextInput(page, loc, "name_input")
self.add_content_item("name_input", name_input)
# Чекбокс "Блокировка" - индекс 1
checkbox_2 = Checkbox(
page,
input_form_locator.get_by_role("checkbox").nth(1),
"blocking"
)
self.add_content_item("blocking_checkbox", checkbox_2)
# Метка "Блокировка" - индекс 1
label_2 = Text(
page,
self.page.locator(label_locator).nth(1),
"blocking_checkbox_label"
)
self.add_content_item("blocking_checkbox_label", label_2)
# Поле Роль
role_loc = input_form_locator.get_by_role("combobox").nth(1)
role_input = TextInput(page, role_loc, "role_input")
self.add_content_item("role_input", role_input)
self.add_content_item(
"roles_list",
DropdownList(page)
)
# Поле Комментарий
loc = input_form_locator.locator("xpath=div[7]").locator(text_field_locator)
commentary_input = TextInput(page, loc, "commentary_input")
self.add_content_item("commentary_input", commentary_input)
# Поле E-mail
loc = input_form_locator.locator("xpath=div[8]").locator(text_field_locator)
email_input = TextInput(page, loc, "email_input")
self.add_content_item("email_input", email_input)
# Поле Номер для СМС
loc = input_form_locator.locator("xpath=div[9]").locator(text_field_locator)
phone_input = TextInput(page, loc, "phone_input")
self.add_content_item("phone_input", phone_input)
# Чекбокс "Подписка на Push-уведомления" - индекс 2
checkbox_3 = Checkbox(
page,
input_form_locator.get_by_role("checkbox").nth(2),
"push_notification"
)
self.add_content_item("push_notification_checkbox", checkbox_3)
# Метка "Подписка на Push-уведомления" - индекс 2
label_3 = Text(
page,
self.page.locator(label_locator).nth(2),
"push_notification_checkbox_label"
)
self.add_content_item("push_notification_checkbox_label", label_3)
# Добавление кнопок действий
locator_button_add = self.page.get_by_role("button", name="Добавить")
self.add_button(locator_button_add, "add")
locator_button_close = self.page.get_by_role("button", name="Закрыть")
self.add_button(locator_button_close, "close")
self.new_user_confirm = ConfirmComponent(page, " Отмена ", " Добавить ")
# Действия:
def check_active_directory_checkbox(self):
"""Включает чек-бокс Active Directory. """
self.get_content_item("active_directory_checkbox").check(force=True)
def uncheck_active_directory_checkbox(self):
"""Выключает чек-бокс Active Directory. """
self.get_content_item("active_directory_checkbox").uncheck(force=True)
def check_blocking_checkbox(self):
"""Включает чек-бокс Блокировка."""
self.get_content_item("blocking_checkbox").check(force=True)
def uncheck_blocking_checkbox(self):
"""Выключает чек-бокс Блокировка."""
self.get_content_item("blocking_checkbox").uncheck(force=True)
def check_push_notification_checkbox(self):
"""Включает чек-бокс Push-уведомления."""
self.get_content_item("push_notification_checkbox").check(force=True)
def uncheck_push_notification_checkbox(self):
"""Выключает чек-бокс Push-уведомления."""
self.get_content_item("push_notification_checkbox").uncheck(force=True)
def update_input_form_fields(self, expand):
"""Персчитывает локаторы полей формы ввода при добавлении/удалении дополнительного поля. """
input_form_locator = self.page.locator(ModalWindowLocators.INPUT_FORM_USER_DATA)
# text_field_locator = ModalWindowLocators.TEXT_FIELD_INPUT_FORM_USER_DATA
text_field_locator = f"xpath={ModalWindowLocators.TEXT_FIELD_INPUT_FORM_USER_DATA}"
if expand:
new_loc = input_form_locator.locator("xpath=div[4]").locator(text_field_locator)
self.get_content_item("name_input").update_locator(new_loc)
new_loc = input_form_locator.locator("xpath=div[8]").locator(text_field_locator)
self.get_content_item("commentary_input").update_locator(new_loc)
new_loc = input_form_locator.locator("xpath=div[9]").locator(text_field_locator)
self.get_content_item("email_input").update_locator(new_loc)
new_loc = input_form_locator.locator("xpath=div[10]").locator(text_field_locator)
self.get_content_item("phone_input").update_locator(new_loc)
role_loc = input_form_locator.get_by_role("combobox").nth(2)
self.get_content_item("role_input").update_locator(role_loc)
else:
new_loc = input_form_locator.locator("xpath=div[3]").locator(text_field_locator)
self.get_content_item("name_input").update_locator(new_loc)
new_loc = input_form_locator.locator("xpath=div[7]").locator(text_field_locator)
self.get_content_item("commentary_input").update_locator(new_loc)
new_loc = input_form_locator.locator("xpath=div[8]").locator(text_field_locator)
self.get_content_item("email_input").update_locator(new_loc)
new_loc = input_form_locator.locator("xpath=div[9]").locator(text_field_locator)
self.get_content_item("phone_input").update_locator(new_loc)
role_loc = input_form_locator.get_by_role("combobox").nth(1)
self.get_content_item("role_input").update_locator(role_loc)
def new_user(self, user_data):
"""Заполняет форму и добавляет нового пользователя.
Args:
user_data (dict): Данные пользователя (имя, роль, пароль и др.)
"""
menu_locator = self.page.locator(ModalWindowLocators.MENU_INPUT_FORM_USER_DATA)
input_form_locator = self.page.locator(ModalWindowLocators.INPUT_FORM_USER_DATA)
# Поле "Группа" - выбор из списка
group_name = user_data.get("group")
if group_name is None:
assert False, "Value of 'group' is missing"
# Поле "Пользователи AD" - выбор из списка
name_AD = user_data.get("name_AD")
if name_AD is None:
assert False, "Value of 'name_AD' is missing"
# Поле "Имя" - если определено (не None) вводим вручную
name = user_data.get("name")
# Поле "Роль" - выбор из списка
role = user_data.get("role")
if role is None:
assert False, "Value of 'role' is missing"
# Поиск и выбор заданной группы из списка существующих
group_field = self.get_content_item("group_input")
group_field.click()
group_list = self.get_content_item("group_list")
group_list.scroll_until_end(menu_locator)
group_names = group_list.get_item_names(menu_locator)
if group_name not in group_names:
assert False, f"Required group name {group_name} is missing"
group_list.check_item_with_text(group_name)
group_list.click_item_with_text(group_name)
# Нажатие кнопки "Поиск"
search_button = self.get_button_by_name("search")
search_button.click()
count = input_form_locator.get_by_role("combobox").count()
if count == 2:
assert False, f"Selected group {group_name} is empty. Use another group."
# Если в группе есть пользователи, открывается новое поле, персчет локаторов
self.update_input_form_fields(expand=True)
# Поиск и выбор заданного пользователя AD из списка существующих
user_AD_loc = input_form_locator.get_by_role("combobox").nth(1)
user_AD_input = TextInput(self.page, user_AD_loc, "user_AD_input")
self.add_content_item("user_AD_input", user_AD_input)
self.add_content_item(
"user_AD_list",
DropdownList(self.page)
)
user_AD_input.click()
user_AD_list = self.get_content_item("user_AD_list")
user_AD_list.scroll_until_end(menu_locator)
user_AD_names = group_list.get_item_names(menu_locator)
if name_AD not in user_AD_names:
assert False, f"Required user name {name_AD} is missing"
user_AD_list.check_item_with_text(name_AD)
user_AD_list.click_item_with_text(name_AD)
# Заполнение поля "Имя" (ручной ввод) если задано
if name:
name_field = self.get_content_item("name_input")
name_field.input_value(name)
# Поиск и выбор заданной роли из списка существующих
role_field = self.get_content_item("role_input")
role_field.click()
roles_list = self.get_content_item("roles_list")
roles_list.check_item_with_text(user_data["role"])
roles_list.click_item_with_text(user_data["role"])
if user_data.get("commentary"):
input_field = self.get_content_item("commentary_input")
input_field.input_value(user_data["commentary"])
if user_data.get("email"):
input_field = self.get_content_item("email_input")
input_field.input_value(user_data["email"])
if user_data.get("phone_number"):
input_field = self.get_content_item("phone_input")
input_field.input_value(user_data["phone_number"])
if user_data.get("blocking_checked"):
checkbox = self.get_content_item("blocking_checkbox")
if user_data["blocking_checked"]:
checkbox.check()
else:
checkbox.uncheck()
if user_data.get("push_notification_checked"):
checkbox = self.get_content_item("push_notification_checkbox")
if user_data["push_notification_checked"]:
checkbox.check()
else:
checkbox.uncheck()
# Отправка формы
add_button = self.get_button_by_name("add")
add_button.click()
# Подтверждение действия
title = "Добавить нового пользователя"
self.new_user_confirm.check_title(
title,
f"Confirmation dialog window with title '{title}' is missing"
)
self.new_user_confirm.click_allow_button()
def close_window(self):
"""Закрывает модальное окно через кнопку 'Закрыть'."""
close_button = self.get_button_by_name("close")
close_button.click()
def close_window_by_toolbar_button(self):
"""Закрывает модальное окно через кнопку в тулбаре."""
self.click_toolbar_close_button()
# Проверки:
def check_content(self):
"""Проверяет наличие и корректность всех элементов формы."""
input_form_locator = self.page.locator(ModalWindowLocators.INPUT_FORM_USER_DATA)
menu_locator = self.page.locator(ModalWindowLocators.MENU_INPUT_FORM_USER_DATA)
self.check_by_window_title()
is_checked = self.get_content_item("active_directory_checkbox").is_checked()
if not is_checked:
assert False, \
"The checkbox 'Active Directory'should be checked for the add user from Active Directory window"
self.check_toolbar_button_visibility("close")
self.check_toolbar_button_tooltip("close", "Закрыть")
no_op_names = ["roles_list", "group_list"]
for name in self.content_items.keys():
item = self.get_content_item(name)
if name == "active_directory_checkbox_label":
item.check_have_text(
"Active Directory",
"Label 'Active Directory' is missing"
)
elif name == "blocking_checkbox_label":
item.check_have_text(
"Блокировка",
"Label 'Блокировка' is missing"
)
elif name == "push_notification_checkbox_label":
item.check_have_text(
"Подписка на Push-уведомления",
"Label 'Подписка на Push-уведомления' is missing"
)
elif name == "group_input":
item.click()
group_list = self.get_content_item("group_list")
group_list.check_visibility(menu_locator,
"Groups list is missing")
is_scrollable_vertically = group_list.check_vertical_scrolling(menu_locator)
assert is_scrollable_vertically, "Groups list should be scrollable_vertically"
self.page.keyboard.press("Escape")
elif name == "role_input":
item.click()
roles_list = self.get_content_item("roles_list")
roles_list.check_visibility(menu_locator,
"Roles list is missing")
is_scrollable_vertically = roles_list.check_vertical_scrolling(menu_locator)
assert not is_scrollable_vertically, \
"Roles list should not be scrollable_vertically"
for role in roles_dict.values():
# временно, пока есть несоответствие со списком ролей в вкладке Сессии
if role == "Пользователь":
continue
roles_list.check_item_with_text(role)
self.page.keyboard.press("Escape")
elif name in no_op_names:
continue
else:
print(f"check item: {name}")
item.check_visibility(
f"Modal window content item with name '{name}' is missing"
)
# Дополнительная проверка состояния чекбоксов
blocking_checkbox = self.get_content_item("blocking_checkbox")
is_blocking_checked = blocking_checkbox.is_checked()
assert not is_blocking_checked, (
"Checkbox 'Блокировка' should not be checked by default"
)
push_checkbox = self.get_content_item("push_notification_checkbox")
is_push_checked = push_checkbox.is_checked()
assert not is_push_checked, (
"Checkbox 'Подписка на Push-уведомления' should not be checked by default"
)
self.check_button_visibility("search")
self.check_button_visibility("add")
self.check_button_visibility("close")
search_button = self.get_button_by_name("search")
search_button.click()
# Проверка что поле "Пользователи AD" появилось после поиска
user_AD_loc = input_form_locator.get_by_role("combobox").nth(1)
user_AD_input = TextInput(self.page, user_AD_loc, "user_AD_input")
self.add_content_item("user_AD_input", user_AD_input)
self.add_content_item(
"user_AD_list",
DropdownList(self.page)
)
user_AD_input.click()
user_AD_list = self.get_content_item("user_AD_list")
user_AD_list.check_visibility(menu_locator,
"Users AD list is missing")
is_scrollable_vertically = user_AD_list.check_vertical_scrolling(menu_locator)
assert is_scrollable_vertically, "Users AD list should be scrollable_vertically"
self.page.keyboard.press("Escape")
self.update_input_form_fields(expand=True)
self.get_content_item("name_input").check_visibility(
"Modal window content item with name 'name_input' is missing")
self.get_content_item("role_input").check_visibility(
"Modal window content item with name 'role_input' is missing")
self.get_content_item("commentary_input").check_visibility(
"Modal window content item with name 'commentary_input' is missing")
self.get_content_item("email_input").check_visibility(
"Modal window content item with name 'email_input' is missing")
self.get_content_item("phone_input").check_visibility(
"Modal window content item with name 'phone_input' is missing")

View File

@ -1,331 +0,0 @@
"""Модуль modal_add_local_user содержит класс для работы
с модальным окном добавления локального пользователя.
Класс AddLocalUserModalWindow наследует базовый функционал ModalWindowComponent
и реализует специфичные методы для работы с формами добавления пользователей.
"""
import re
from playwright.sync_api import Page
from tools.logger import get_logger
from locators.modal_window_locators import ModalWindowLocators
from elements.text_input_element import TextInput
from elements.text_element import Text
from elements.checkbox_element import Checkbox
from data.roles_dict import roles_dict
from components.modal_window_component import ModalWindowComponent
from components.dropdown_list_component import DropdownList
from components.confirm_component import ConfirmComponent
logger = get_logger("ADD_LOCAL_USER_MODAL_WINDOW")
class AddLocalUserModalWindow(ModalWindowComponent):
"""Модальное окно добавления нового пользователя.
Наследует ModalWindowComponent и добавляет элементы формы:
- Поля ввода (имя, пароль, email и др.)
- Чекбоксы (Active Directory, Блокировка, Push-уведомления)
- Выпадающий список ролей
- Кнопки действий
"""
def __init__(self, page: Page):
"""Инициализирует элементы формы добавления пользователя."""
super().__init__(page)
# Локаторы элементов формы
text_field_locator = ModalWindowLocators.TEXT_FIELD_INPUT_FORM_USER_DATA
input_form_locator = ModalWindowLocators.INPUT_FORM_USER_DATA
label_locator = ModalWindowLocators.LABEL_INPUT_FORM_USER_DATA
# Настройка заголовка и кнопки закрытия тулбара
self.window_title = "Добавить нового пользователя"
locator_button_toolbar_close = (
self.page.get_by_role("navigation")
.filter(has_text=re.compile(self.window_title))
.get_by_role("button")
)
self.add_toolbar_title(self.window_title)
self.add_toolbar_button(locator_button_toolbar_close, "close")
# Добавление элементов формы по порядку расположения в окне
checkbox_1 = Checkbox(
page,
self.page.locator(input_form_locator).get_by_role("checkbox").nth(0),
"active_directory"
)
self.add_content_item("active_directory_checkbox", checkbox_1)
label_1 = Text(
page,
self.page.locator(label_locator).nth(0),
"active_directory_checkbox_label"
)
self.add_content_item("active_directory_checkbox_label", label_1)
# Поле Имя
loc = f"{input_form_locator}/div[2]/{text_field_locator}"
name_input = TextInput(page, self.page.locator(loc), "name_input")
self.add_content_item("name_input", name_input)
# Чекбокс "Блокировка" - индекс 1
checkbox_2 = Checkbox(
page,
self.page.locator(input_form_locator).get_by_role("checkbox").nth(1),
"blocking"
)
self.add_content_item("blocking_checkbox", checkbox_2)
# Метка "Блокировка" - индекс 1
label_2 = Text(
page,
self.page.locator(label_locator).nth(1),
"blocking_checkbox_label"
)
self.add_content_item("blocking_checkbox_label", label_2)
# Поле Роль
role_loc = self.page.locator(input_form_locator).get_by_role("combobox").nth(0)
role_input = TextInput(page, role_loc, "role_input")
self.add_content_item("role_input", role_input)
self.add_content_item("roles_list", DropdownList(page))
# Поле Пароль
loc = f"{input_form_locator}/div[5]/{text_field_locator}"
password_input = TextInput(page, self.page.locator(loc), "password_input")
self.add_content_item("password_input", password_input)
# Поле Комментарий
loc = f"{input_form_locator}/div[6]/{text_field_locator}"
commentary_input = TextInput(page, self.page.locator(loc), "commentary_input")
self.add_content_item("commentary_input", commentary_input)
# Поле E-mail
loc = f"{input_form_locator}/div[7]/{text_field_locator}"
email_input = TextInput(page, self.page.locator(loc), "email_input")
self.add_content_item("email_input", email_input)
# Поле Номер для СМС
loc = f"{input_form_locator}/div[8]/{text_field_locator}"
phone_input = TextInput(page, self.page.locator(loc), "phone_input")
self.add_content_item("phone_input", phone_input)
# Чекбокс "Подписка на Push-уведомления" - индекс 2
checkbox_3 = Checkbox(
page,
self.page.locator(ModalWindowLocators.INPUT_FORM_USER_DATA)
.get_by_role("checkbox").nth(2),
"push_notification"
)
self.add_content_item("push_notification_checkbox", checkbox_3)
# Метка "Подписка на Push-уведомления" - индекс 2
label_3 = Text(
page,
self.page.locator(label_locator).nth(2),
"push_notification_checkbox_label"
)
self.add_content_item("push_notification_checkbox_label", label_3)
# Добавление кнопок действий
locator_button_add = self.page.get_by_role("button", name="Добавить")
self.add_button(locator_button_add, "add")
locator_button_close = self.page.get_by_role("button", name="Закрыть")
self.add_button(locator_button_close, "close")
# Добавление компонента подтверждения/отмены заведения пользователя
self.new_user_confirm = ConfirmComponent(page, " Отмена ", " Добавить ")
# Действия:
def check_active_directory_checkbox(self):
"""Включает чек-бокс Active Directory."""
self.get_content_item("active_directory_checkbox").check(force=True)
def uncheck_active_directory_checkbox(self):
"""Выключает чек-бокс Active Directory."""
self.get_content_item("active_directory_checkbox").uncheck(force=True)
def check_blocking_checkbox(self):
"""Включает чек-бокс Блокировка."""
self.get_content_item("blocking_checkbox").check(force=True)
def uncheck_blocking_checkbox(self):
"""Выключает чек-бокс Блокировка."""
self.get_content_item("blocking_checkbox").uncheck(force=True)
def check_push_notification_checkbox(self):
"""Включает чек-бокс Push-уведомления."""
self.get_content_item("push_notification_checkbox").check(force=True)
def uncheck_push_notification_checkbox(self):
"""Выключает чек-бокс Push-уведомления."""
self.get_content_item("push_notification_checkbox").uncheck(force=True)
def new_user(self, user_data):
"""Заполняет форму и добавляет нового пользователя.
Args:
user_data (dict): Данные пользователя (имя, роль, пароль и др.)
"""
fields = user_data.keys()
if "name" in fields:
input_field = self.get_content_item("name_input")
input_field.input_value(user_data["name"])
if "role" in fields:
role_field = self.get_content_item("role_input")
role_field.click()
roles_list = self.get_content_item("roles_list")
roles_list.check_item_with_text(user_data["role"])
roles_list.click_item_with_text(user_data["role"])
if "password" in fields:
input_field = self.get_content_item("password_input")
input_field.input_value(user_data["password"])
if "commentary" in fields:
input_field = self.get_content_item("commentary_input")
input_field.input_value(user_data["commentary"])
if "email" in fields:
input_field = self.get_content_item("email_input")
input_field.input_value(user_data["email"])
if "phone_number" in fields:
input_field = self.get_content_item("phone_input")
input_field.input_value(user_data["phone_number"])
if "blocking_checked" in fields:
checkbox = self.get_content_item("blocking_checkbox")
if user_data["blocking_checked"]:
checkbox.check()
else:
checkbox.uncheck()
if "push_notification_checked" in fields:
checkbox = self.get_content_item("push_notification_checkbox")
if user_data["push_notification_checked"]:
checkbox.check()
else:
checkbox.uncheck()
# Отправка формы
add_button = self.get_button_by_name("add")
add_button.click()
# Подтверждение действия
title = "Добавить нового пользователя"
self.new_user_confirm.check_title(
title,
f"Confirmation dialog window with title '{title}' is missing"
)
self.new_user_confirm.click_allow_button()
def close_window(self):
"""Закрывает модальное окно через кнопку 'Закрыть'."""
close_button = self.get_button_by_name("close")
close_button.click()
def close_window_by_toolbar_button(self):
"""Закрывает модальное окно через кнопку в тулбаре."""
self.click_toolbar_close_button()
# Проверки:
def check_content(self):
"""Проверяет наличие и корректность всех элементов формы."""
menu_locator = self.page.locator(ModalWindowLocators.MENU_INPUT_FORM_USER_DATA)
self.check_by_window_title()
is_checked = self.get_content_item("active_directory_checkbox").is_checked()
if is_checked:
assert False, (
"The checkbox 'Active Directory' should not be checked for "
"the add local user window"
)
self.check_toolbar_button_visibility("close")
self.check_toolbar_button_tooltip("close", "Закрыть")
input_fields = ["name_input", "password_input",
"commentary_input", "email_input", "phone_input"]
for name in self.content_items:
item = self.get_content_item(name)
if name == "active_directory_checkbox_label":
item.check_have_text(
"Active Directory",
"Label 'Active Directory' is missing"
)
elif name == "blocking_checkbox_label":
item.check_have_text(
"Блокировка",
"Label 'Блокировка' is missing"
)
elif name == "push_notification_checkbox_label":
item.check_have_text(
"Подписка на Push-уведомления",
"Label 'Подписка на Push-уведомления' is missing"
)
elif name == "role_input":
item.click()
roles_list = self.get_content_item("roles_list")
roles_list.check_visibility(menu_locator, "Roles list is missing")
is_scrollable_vertically = roles_list.check_vertical_scrolling(menu_locator)
assert not is_scrollable_vertically, (
"Roles list should not be scrollable_vertically"
)
for role in roles_dict.values():
# временно, пока есть несоответствие со списком ролей в вкладке Сессии
if role == "Пользователь":
continue
roles_list.check_item_with_text(role)
elif name in input_fields:
item.check_editable_input(
f"Input field with name '{name}' should be editable"
)
elif name == "roles_list":
continue
else:
print(f"check item: {name}")
print(item)
item.check_visibility(
f"Modal window content item with name '{name}' is missing"
)
# Дополнительная проверка состояния чекбоксов
blocking_checkbox = self.get_content_item("blocking_checkbox")
is_blocking_checked = blocking_checkbox.is_checked()
assert not is_blocking_checked, (
"Checkbox 'Блокировка' should not be checked by default"
)
push_checkbox = self.get_content_item("push_notification_checkbox")
is_push_checked = push_checkbox.is_checked()
assert not is_push_checked, (
"Checkbox 'Подписка на Push-уведомления' should not be checked by default"
)
self.check_button_visibility("add")
self.check_button_visibility("close")

View File

@ -0,0 +1,462 @@
"""Модуль modal_add_local_user содержит класс для работы
с модальным окном добавления локального пользователя.
Класс AddLocalUserModalWindow наследует базовый функционал ModalWindowComponent
и реализует специфичные методы для работы с формами добавления пользователей.
"""
import re
from playwright.sync_api import Page
from tools.logger import get_logger
from locators.modal_window_locators import ModalWindowLocators
from elements.text_input_element import TextInput
from elements.text_element import Text
from elements.checkbox_element import Checkbox
from components.modal_window_component import ModalWindowComponent
from components.dropdown_list_component import DropdownList
from components.confirm_component import ConfirmComponent
from components_derived.selection_bar_component import SelectionBarComponent
logger = get_logger("ADD_USER_MODAL_WINDOW")
class AddUserModalWindow(ModalWindowComponent):
"""Модальное окно добавления нового пользователя.
Наследует ModalWindowComponent и добавляет элементы формы:
- Поля ввода (имя, пароль, email и др.)
- Чекбоксы (Блокировка, Push-уведомления)
- Выпадающий список ролей
- Кнопки действий
"""
def __init__(self, page: Page):
"""Инициализирует элементы формы добавления пользователя."""
super().__init__(page)
# Локаторы элементов формы
input_form_locator = ModalWindowLocators.INPUT_FORM_USER_DATA
# Настройка заголовка и кнопки закрытия тулбара
self.window_title = "Добавить нового пользователя"
locator_button_toolbar_close = (
self.page.get_by_role("navigation")
.filter(has_text=re.compile(self.window_title))
.get_by_role("button")
)
self.add_toolbar_title(self.window_title)
self.add_toolbar_button(locator_button_toolbar_close, "close")
elements_locators = self.get_input_fields_locators(page.locator(input_form_locator))
# print(elements_locators)
# Поле Тип авторизации
auth_type_loc = elements_locators.get("Тип авторизации")
if auth_type_loc:
auth_type_selector = SelectionBarComponent(page, auth_type_loc.get_by_role("combobox").first)
self.add_content_item("auth_type_selector", auth_type_selector)
# Поле Имя
loc = elements_locators.get("Имя").locator(ModalWindowLocators.INPUT_FORM_USER_DATA_FIELD_NAME)
name_input = TextInput(page, loc, "name_input")
self.add_content_item("name_input", name_input)
# Метка "Блокировка"
label_blocking_locator = self.page.locator(input_form_locator). \
locator("//label").get_by_text("Блокировка")
label_blocking = Text(
page,
label_blocking_locator,
"blocking_checkbox_label"
)
self.add_content_item("blocking_checkbox_label", label_blocking)
# Чекбокс "Блокировка"
checkbox_blocking = Checkbox(
page,
page.locator(input_form_locator).locator(ModalWindowLocators.INPUT_FORM_USER_DATA_CHECKBOX_BLOCKED),
"blocking"
)
self.add_content_item("blocking_checkbox", checkbox_blocking)
# Поле Роль
role_loc = elements_locators.get("Роль").get_by_role("combobox").first
role_input = TextInput(page, role_loc, "role_input")
self.add_content_item("role_input", role_input)
self.add_content_item("roles_list", DropdownList(page))
# Поле Пароль
loc = elements_locators.get("Пароль").locator(ModalWindowLocators.INPUT_FORM_USER_DATA_FIELD_PASSWORD)
password_input = TextInput(page, loc, "password_input")
self.add_content_item("password_input", password_input)
# Поле Комментарий
loc = elements_locators.get("Комментарий").locator(ModalWindowLocators.INPUT_FORM_USER_DATA_FIELD_COMMENT)
commentary_input = TextInput(page, loc, "commentary_input")
self.add_content_item("commentary_input", commentary_input)
# Поле E-mail
loc = elements_locators.get("E-mail").locator(ModalWindowLocators.INPUT_FORM_USER_DATA_FIELD_EMAIL)
email_input = TextInput(page, loc, "email_input")
self.add_content_item("email_input", email_input)
# Поле Номер для СМС
loc = elements_locators.get("Номер для СМС").locator(ModalWindowLocators.INPUT_FORM_USER_DATA_FIELD_SMS)
phone_input = TextInput(page, loc, "phone_input")
self.add_content_item("phone_input", phone_input)
# Метка "Подписка на Push-уведомления"
label_push_locator = self.page.locator(input_form_locator). \
locator("//label").get_by_text("Подписка на Push-уведомления")
label_push = Text(
page,
label_push_locator,
"push_notification_checkbox_label"
)
self.add_content_item("push_notification_checkbox_label", label_push)
# Чекбокс "Подписка на Push-уведомления"
checkbox_push = Checkbox(
page,
page.locator(input_form_locator).locator(ModalWindowLocators.INPUT_FORM_USER_DATA_CHECKBOX_PUSH_ACTIVE),
"push_notification"
)
self.add_content_item("push_notification_checkbox", checkbox_push)
# Добавление кнопок действий
locator_button_add = self.page.get_by_role("button", name="Добавить")
self.add_button(locator_button_add, "add")
locator_button_close = self.page.get_by_role("button", name="Закрыть")
self.add_button(locator_button_close, "close")
# Добавление компонента подтверждения/отмены заведения пользователя
self.new_user_confirm = ConfirmComponent(page, " Отмена ", " Добавить ")
# Действия:
def check_blocking_checkbox(self):
"""Включает чек-бокс Блокировка."""
self.get_content_item("blocking_checkbox").check(force=True)
def uncheck_blocking_checkbox(self):
"""Выключает чек-бокс Блокировка."""
self.get_content_item("blocking_checkbox").uncheck(force=True)
def check_push_notification_checkbox(self):
"""Включает чек-бокс Push-уведомления."""
self.get_content_item("push_notification_checkbox").check(force=True)
def uncheck_push_notification_checkbox(self):
"""Выключает чек-бокс Push-уведомления."""
self.get_content_item("push_notification_checkbox").uncheck(force=True)
def get_auth_type(self) -> str | None:
"""Возвращает текущее значение поля 'Тип авторизации'"""
auth_type = None
auth_type_selector = self.get_content_item("auth_type_selector")
if auth_type_selector:
values = auth_type_selector.get_selected_values()
auth_type = values[0]
return auth_type
def select_auth_type(self, auth_type: str) -> None:
"""Выбирает заданное значение поля 'Тип авторизации' из списка"""
auth_type_selector = self.get_content_item("auth_type_selector")
if auth_type_selector:
auth_type_selector.open_values_list()
auth_type_selector.select_value(auth_type)
def new_user(self, user_data):
"""Заполняет форму и добавляет нового пользователя.
Args:
user_data (dict): Данные пользователя (имя, роль, пароль и др.)
"""
auth_type = user_data.get("auth_type")
if auth_type is None:
auth_type = 'local'
current_auth_type = self.get_auth_type()
if current_auth_type != auth_type:
self.select_auth_type(auth_type)
if auth_type == "LDAP":
menu_locator = self.page.locator(ModalWindowLocators.MENU_ACTIVE_INPUT_FORM)
elements_locators = self.get_input_fields_locators(
self.page.locator(ModalWindowLocators.INPUT_FORM_USER_DATA))
# Добавилось поле Группа
group_loc = elements_locators.get("Группа").get_by_role("combobox")
group_input = TextInput(self.page, group_loc, "group_input")
self.add_content_item("group_input", group_input)
self.add_content_item("group_list", DropdownList(self.page))
# Добавилась кнопка Поиск
locator_button_search = self.page.get_by_role("button", name="Поиск")
self.add_button(locator_button_search, "search")
# Поиск и выбор заданной группы из списка существующих
group_field = self.get_content_item("group_input")
group_field.click()
group_name = user_data["group"]
group_list = self.get_content_item("group_list")
group_list.scroll_until_end(menu_locator)
group_names = group_list.get_item_names(menu_locator)
if group_name not in group_names:
assert False, f"Required group name {group_name} is missing"
group_list.check_item_with_text(group_name)
group_list.click_item_with_text(group_name)
# Нажатие кнопки "Поиск"
search_button = self.get_button_by_name("search")
search_button.click()
# Если в группе есть пользователи, открывается новое поле, заново вычисляем локаторы
elements_locators = self.get_input_fields_locators(
self.page.locator(ModalWindowLocators.INPUT_FORM_USER_DATA))
users_ad_loc = elements_locators.get("Пользователи AD")
# users_ad_loc = elements_locators.get("Пользователи LDAP")
assert users_ad_loc, f"Selected group {group_name} is empty. Use another group."
# Поиск и выбор заданного пользователя AD из списка существующих
user_ldap_loc = users_ad_loc.get_by_role("combobox")
user_ldap_input = TextInput(self.page, user_ldap_loc, "user__input")
self.add_content_item("user_ldap_input", user_ldap_input)
self.add_content_item(
"user_ldap_list",
DropdownList(self.page)
)
user_ldap_input.click()
user_ldap_list = self.get_content_item("user_ldap_list")
user_ldap_list.scroll_until_end(menu_locator)
user_ldap_names = group_list.get_item_names(menu_locator)
name_ldap = user_data.get("name_ldap")
if name_ldap not in user_ldap_names:
assert False, f"Required user name {name_ldap} is missing"
user_ldap_list.check_item_with_text(name_ldap)
user_ldap_list.click_item_with_text(name_ldap)
# Заново вычисляем локаторы полей ввода
self.locators_recalculation(is_active_directory=True)
# Заполнение поля "Имя" (ручной ввод) если задано
name = user_data.get("name")
if name:
input_field = self.get_content_item("name_input")
input_field.input_value(name)
fields = user_data.keys()
if "role" in fields:
role_field = self.get_content_item("role_input")
role_field.click()
roles_list = self.get_content_item("roles_list")
roles_list.check_item_with_text(user_data["role"])
roles_list.click_item_with_text(user_data["role"])
if "password" in fields:
input_field = self.get_content_item("password_input")
input_field.input_value(user_data["password"])
if "commentary" in fields:
input_field = self.get_content_item("commentary_input")
input_field.input_value(user_data["commentary"])
if "email" in fields:
input_field = self.get_content_item("email_input")
input_field.input_value(user_data["email"])
if "phone_number" in fields:
input_field = self.get_content_item("phone_input")
input_field.input_value(user_data["phone_number"])
if "blocking_checked" in fields:
checkbox = self.get_content_item("blocking_checkbox")
if user_data["blocking_checked"]:
checkbox.check()
else:
checkbox.uncheck()
if "push_notification_checked" in fields:
checkbox = self.get_content_item("push_notification_checkbox")
if user_data["push_notification_checked"]:
checkbox.check()
else:
checkbox.uncheck()
# Отправка формы
add_button = self.get_button_by_name("add")
add_button.click()
# Подтверждение действия
title = "Добавить нового пользователя"
self.new_user_confirm.check_title(
title,
f"Confirmation dialog window with title '{title}' is missing"
)
self.new_user_confirm.click_allow_button()
def close_window(self):
"""Закрывает модальное окно через кнопку 'Закрыть'."""
close_button = self.get_button_by_name("close")
close_button.click()
def close_window_by_toolbar_button(self):
"""Закрывает модальное окно через кнопку в тулбаре."""
self.click_toolbar_close_button()
def locators_recalculation(self, is_active_directory=False) -> None:
"""Пересчет локаторов полей ввода"""
elements_locators = self.get_input_fields_locators(
self.page.locator(ModalWindowLocators.INPUT_FORM_USER_DATA))
new_loc = elements_locators.get("Имя").locator(ModalWindowLocators.INPUT_FORM_USER_DATA_FIELD_NAME)
self.get_content_item("name_input").update_locator(new_loc)
if not is_active_directory:
new_loc = elements_locators.get("Пароль").locator(ModalWindowLocators.INPUT_FORM_USER_DATA_FIELD_PASSWORD)
self.get_content_item("password_input").update_locator(new_loc)
new_loc = elements_locators.get("Роль").get_by_role("combobox").first
self.get_content_item("role_input").update_locator(new_loc)
new_loc = elements_locators.get("Комментарий").locator(ModalWindowLocators.INPUT_FORM_USER_DATA_FIELD_COMMENT)
self.get_content_item("commentary_input").update_locator(new_loc)
new_loc = elements_locators.get("E-mail").locator(ModalWindowLocators.INPUT_FORM_USER_DATA_FIELD_EMAIL)
self.get_content_item("email_input").update_locator(new_loc)
new_loc = elements_locators.get("Номер для СМС").locator(ModalWindowLocators.INPUT_FORM_USER_DATA_FIELD_SMS)
self.get_content_item("phone_input").update_locator(new_loc)
# Проверки:
def check_content(self):
"""Проверяет наличие и корректность всех элементов формы создания локального пользователя.
Форма для создания keycloack пользователя имеет тот же набор полей.
"""
expected_auth_types = ['local', 'LDAP', 'keycloak']
expected_roles = ['$collector', 'Администратор',
'Специалист информационной безопасности',
'Контактное лицо', 'Оператор']
menu_locator = self.page.locator(ModalWindowLocators.MENU_ACTIVE_INPUT_FORM)
self.check_by_window_title()
self.check_toolbar_button_visibility("close")
self.check_toolbar_button_tooltip("close", "Закрыть")
input_fields = ["name_input", "password_input",
"commentary_input", "email_input", "phone_input"]
for name in self.content_items:
item = self.get_content_item(name)
if name == "blocking_checkbox_label":
item.check_have_text(
"Блокировка",
"Label 'Блокировка' is missing"
)
elif name == "push_notification_checkbox_label":
item.check_have_text(
"Подписка на Push-уведомления",
"Label 'Подписка на Push-уведомления' is missing"
)
elif name == "auth_type_selector":
current_auth_type = self.get_auth_type()
if current_auth_type is None:
continue
assert current_auth_type == 'local', "Default Auth Type value should be 'local'"
actual_auth_types = item.get_available_options()
assert actual_auth_types == expected_auth_types, \
f"Actual auth types {actual_auth_types} are not equal expected values {expected_auth_types}."
elif name == "role_input":
item.click()
roles_list = self.get_content_item("roles_list")
roles_list.check_visibility(menu_locator, "Roles list is missing")
is_scrollable_vertically = roles_list.check_vertical_scrolling(menu_locator)
assert not is_scrollable_vertically, (
"Roles list should not be scrollable_vertically"
)
for role in expected_roles:
roles_list.check_item_with_text(role)
elif name in input_fields:
item.check_editable_input(
f"Input field with name '{name}' should be editable"
)
elif name == "roles_list":
continue
else:
# print(f"check item: {name}")
# print(item)
item.check_visibility(
f"Modal window content item with name '{name}' is missing"
)
# Дополнительная проверка состояния чекбоксов
blocking_checkbox = self.get_content_item("blocking_checkbox")
is_blocking_checked = blocking_checkbox.is_checked()
assert not is_blocking_checked, (
"Checkbox 'Блокировка' should not be checked by default"
)
push_checkbox = self.get_content_item("push_notification_checkbox")
is_push_checked = push_checkbox.is_checked()
assert not is_push_checked, (
"Checkbox 'Подписка на Push-уведомления' should not be checked by default"
)
# Выбор типа авторизации LDAP и проверка появления поля Группа и кнопки Поиск
auth_type_selector = self.get_content_item("auth_type_selector")
if auth_type_selector:
self.select_auth_type("LDAP")
elements_locators = self.get_input_fields_locators(
self.page.locator(ModalWindowLocators.INPUT_FORM_USER_DATA))
# Добавилось поле Группа
group_loc = elements_locators.get("Группа").get_by_role("combobox")
group_input = TextInput(self.page, group_loc, "group_input")
self.add_content_item("group_input", group_input)
self.add_content_item("group_list", DropdownList(self.page))
group_field = self.get_content_item("group_input")
group_field.click()
group_list = self.get_content_item("group_list")
group_list.check_visibility(menu_locator,
"Groups list is missing")
is_scrollable_vertically = group_list.check_vertical_scrolling(menu_locator)
assert is_scrollable_vertically, "Groups list should be scrollable_vertically"
self.page.keyboard.press("Escape")
# Добавилась кнопка Поиск
locator_button_search = self.page.get_by_role("button", name="Поиск")
self.add_button(locator_button_search, "search")
self.check_button_visibility("search")
self.check_button_visibility("add")
self.check_button_visibility("close")

View File

@ -38,7 +38,7 @@ class ChangePasswordModalWindow(ModalWindowComponent):
self.add_toolbar_title(f"Изменить пароль для пользователя {user_name}?")
# Поля ввода пароля
loc = modal_window_locator.get_by_label("Введите текущий пароль *")
loc = page.locator(ModalWindowLocators.CHANDE_PASSWORD_WINDOW_CURRENT_PASSWORD)
old_password_input = TextInput(page, loc, "old_password_input")
self.add_content_item("old_password_input", old_password_input)
@ -47,7 +47,7 @@ class ChangePasswordModalWindow(ModalWindowComponent):
"old password hidden icon")
self.add_content_item("old_password_hidden_icon", old_password_hidden_icon)
loc = modal_window_locator.get_by_label("Введите новый пароль *")
loc = page.locator(ModalWindowLocators.CHANDE_PASSWORD_WINDOW_NEW_PASSWORD)
new_password_input = TextInput(page, loc, "new_password_input")
self.add_content_item("new_password_input", new_password_input)
@ -56,7 +56,7 @@ class ChangePasswordModalWindow(ModalWindowComponent):
"new password hidden icon")
self.add_content_item("new_password_hidden_icon", new_password_hidden_icon)
loc = modal_window_locator.get_by_label("Введите повторно новый пароль *")
loc = page.locator(ModalWindowLocators.CHANDE_PASSWORD_WINDOW_CHECK_PASSWORD)
confirm_password_input = TextInput(page, loc, "confirm_password_input")
self.add_content_item("confirm_password_input", confirm_password_input)
@ -71,10 +71,10 @@ class ChangePasswordModalWindow(ModalWindowComponent):
self.add_content_item("input_form_error_message", input_form_error_message)
# Добавление кнопок действий
locator_button_save = self.page.get_by_role("button", name="Сохранить")
locator_button_save = page.locator(ModalWindowLocators.CHANDE_PASSWORD_WINDOW_BUTTON_SAVE)
self.add_button(locator_button_save, "save")
locator_button_cancel = self.page.get_by_role("button", name="Отменить")
locator_button_cancel = page.locator(ModalWindowLocators.CHANDE_PASSWORD_WINDOW_BUTTON_CANCEL)
self.add_button(locator_button_cancel, "cancel")
# Alert при успешном добавлении пользователя

View File

@ -34,10 +34,7 @@ class EditUserModalWindow(ModalWindowComponent):
super().__init__(page)
# Локаторы элементов формы
# text_field_locator = ModalWindowLocators.TEXT_FIELD_INPUT_FORM_USER_DATA
text_field_locator = f"xpath={ModalWindowLocators.TEXT_FIELD_INPUT_FORM_USER_DATA}"
input_form_locator = ModalWindowLocators.INPUT_FORM_USER_DATA
label_locator = ModalWindowLocators.LABEL_INPUT_FORM_USER_DATA
# Настройка заголовка и кнопки закрытия
self.window_title = user_name
@ -51,83 +48,71 @@ class EditUserModalWindow(ModalWindowComponent):
self.add_toolbar_button(locator_button_toolbar_close, "close")
# Добавление полей формы
elements_locators = self.get_input_fields_locators(
self.page.locator(ModalWindowLocators.INPUT_FORM_USER_DATA))
# Поле Имя
loc = (
self.page.locator(input_form_locator)
.locator("xpath=div[1]")
.locator(text_field_locator)
)
loc = elements_locators.get("Имя").locator(ModalWindowLocators.INPUT_FORM_USER_DATA_FIELD_NAME)
name_input = TextInput(page, loc, "name_input")
self.add_content_item("name_input", name_input)
# Поле Роль
role_loc = self.page.locator(input_form_locator).get_by_role("combobox").nth(0)
role_loc = elements_locators.get("Роль").get_by_role("combobox").first
role_input = TextInput(page, role_loc, "role_input")
self.add_content_item("role_input", role_input)
self.add_content_item("roles_list", DropdownList(page))
# Поле Комментарий
loc = (
self.page.locator(input_form_locator)
.locator("xpath=div[4]")
.locator(text_field_locator)
)
loc = elements_locators.get("Комментарий").locator(ModalWindowLocators.INPUT_FORM_USER_DATA_FIELD_COMMENT)
commentary_input = TextInput(page, loc, "commentary_input")
self.add_content_item("commentary_input", commentary_input)
# Поле E-mail
loc = (
self.page.locator(input_form_locator)
.locator("xpath=div[5]")
.locator(text_field_locator)
)
loc = elements_locators.get("E-mail").locator(ModalWindowLocators.INPUT_FORM_USER_DATA_FIELD_EMAIL)
email_input = TextInput(page, loc, "email_input")
self.add_content_item("email_input", email_input)
# Поле Номер для СМС
loc = (
self.page.locator(input_form_locator)
.locator("xpath=div[6]")
.locator(text_field_locator)
)
loc = elements_locators.get("Номер для СМС").locator(ModalWindowLocators.INPUT_FORM_USER_DATA_FIELD_SMS)
phone_input = TextInput(page, loc, "phone_input")
self.add_content_item("phone_input", phone_input)
# Добавление чекбоксов и их меток
# Чекбокс "Блокировка" - теперь индекс 0 (т.к. нет Active Directory)
checkbox_1 = Checkbox(
# Метка "Блокировка"
label_blocking_locator = self.page.locator(input_form_locator). \
locator("//label").get_by_text("Блокировка")
label_blocking = Text(
page,
self.page.locator(ModalWindowLocators.INPUT_FORM_USER_DATA)
.get_by_role("checkbox").nth(0),
"blocking"
)
self.add_content_item("blocking_checkbox", checkbox_1)
# Метка "Блокировка" - индекс 0
label_1 = Text(
page,
self.page.locator(label_locator).nth(0),
label_blocking_locator,
"blocking_checkbox_label"
)
self.add_content_item("blocking_checkbox_label", label_1)
# Чекбокс "Подписка на Push-уведомления" - индекс 1
checkbox_2 = Checkbox(
self.add_content_item("blocking_checkbox_label", label_blocking)
# Чекбокс "Блокировка"
checkbox_blocking = Checkbox(
page,
self.page.locator(ModalWindowLocators.INPUT_FORM_USER_DATA)
.get_by_role("checkbox").nth(1),
"push_notification"
page.locator(input_form_locator).locator(ModalWindowLocators.INPUT_FORM_USER_DATA_CHECKBOX_BLOCKED),
"blocking"
)
self.add_content_item("push_notification_checkbox", checkbox_2)
self.add_content_item("blocking_checkbox", checkbox_blocking)
# Метка "Подписка на Push-уведомления" - индекс 1
label_2 = Text(
# Метка "Подписка на Push-уведомления"
label_push_locator = self.page.locator(input_form_locator). \
locator("//label").get_by_text("Подписка на Push-уведомления")
label_push = Text(
page,
self.page.locator(label_locator).nth(1),
label_push_locator,
"push_notification_checkbox_label"
)
self.add_content_item("push_notification_checkbox_label", label_2)
self.add_content_item("push_notification_checkbox_label", label_push)
# Чекбокс "Подписка на Push-уведомления"
checkbox_push = Checkbox(
page,
page.locator(input_form_locator).locator(ModalWindowLocators.INPUT_FORM_USER_DATA_CHECKBOX_PUSH_ACTIVE),
"push_notification"
)
self.add_content_item("push_notification_checkbox", checkbox_push)
# Добавление кнопок действий
locator_button_save = self.page.get_by_role("button", name="Сохранить")
@ -227,16 +212,16 @@ class EditUserModalWindow(ModalWindowComponent):
if "blocking_checked" in fields:
checkbox = self.get_content_item("blocking_checkbox")
if user_data["blocking_checked"]:
checkbox.check()
checkbox.check(force=True)
else:
checkbox.uncheck()
checkbox.uncheck(force=True)
if "push_notification_checked" in fields:
checkbox = self.get_content_item("push_notification_checkbox")
if user_data["push_notification_checked"]:
checkbox.check()
checkbox.check(force=True)
else:
checkbox.uncheck()
checkbox.uncheck(force=True)
save_button = self.get_button_by_name("save")
save_button.click()
@ -263,7 +248,7 @@ class EditUserModalWindow(ModalWindowComponent):
role (str): Ожидаемая роль пользователя
"""
menu_locator = self.page.locator(ModalWindowLocators.MENU_INPUT_FORM_USER_DATA)
menu_locator = self.page.locator(ModalWindowLocators.MENU_ACTIVE_INPUT_FORM)
self.check_by_window_title()
self.check_toolbar_button_visibility("close")

View File

@ -0,0 +1,121 @@
"""Модуль modal_send_test_email содержит класс для работы с модальным окном для посылки тестового E-mail на
базе настроек вкладки 'Уведомления/E-mail'.
Класс SendTestEmailModalWindow наследует базовый функционал ModalWindowComponent
и реализует методы просмотра модального окна отображения задачи.
"""
from playwright.sync_api import Page
from tools.logger import get_logger
from locators.modal_window_locators import ModalWindowLocators
from elements.text_input_element import TextInput
from components.modal_window_component import ModalWindowComponent
from components.alert_component import AlertComponent
logger = get_logger("SEND_TEST_EMAIL_MODAL_WINDOW")
class SendTestEmailModalWindow(ModalWindowComponent):
"""Модальное окно для посылки тестового E-mail.
Наследует ModalWindowComponent и добавляет функционал для:
1. Инициализации модального окна
2. Закрытия модального окна через тулбар
3. Проверки содержимого модального окна
"""
def __init__(self, page: Page):
"""Инициализирует элементы формы модального окна отображения задачи."""
super().__init__(page)
window_locator = page.locator(ModalWindowLocators.MODAL_WINDOW)
self.window_title_locator = window_locator.locator("//div[@class='v-toolbar__title']")
self.add_toolbar_title("Тест")
# Настройка кнопки закрытия
toolbar_button_close_locator = window_locator.locator("//button[@data-testid='E_MAIL_CARD__btn__close']")
self.add_toolbar_button(toolbar_button_close_locator, "close")
# Поле ввода адреса
loc = window_locator.locator("//input[@data-testid='E_MAIL_CARD__text-field_text__email']")
email_input = TextInput(page, loc, "email_input")
self.add_content_item("email_input", email_input)
# Добавление кнопок действий
locator_button_test = window_locator.locator("//button[@data-testid='E_MAIL_CARD__footer_btn__test']")
self.add_button(locator_button_test, "test_button")
locator_button_close = window_locator.locator("//button[@data-testid='E_MAIL_CARD__footer_btn__close']")
self.add_button(locator_button_close, "close_button")
self.alert = AlertComponent(page)
# Действия:
def close_by_toolbar_button(self):
"""Закрывает окно кнопкой на тулбаре."""
self.click_toolbar_close_button()
def close(self):
"""Закрывает окно кнопкой на 'Закрыть'."""
close_button = self.get_button_by_name("close_button")
close_button.click()
def click_test_button(self):
"""Отсылка письма по указанному адресу нажатием кнопки 'Тест'."""
close_button = self.get_button_by_name("test_button")
close_button.click()
def input_email(self, address: str) -> None:
"""Заполнение поля 'E-MAIL'."""
email_input_field = self.get_content_item("email_input")
email_input_field.clear()
email_input_field.input_value(address)
# Проверки:
def check_content(self) -> None:
"""Проверяет наличие элементов окна.
"""
self.check_by_window_title()
self.check_toolbar_button_visibility("close")
self.check_toolbar_button_tooltip("close", "Закрыть")
email_input_field = self.get_content_item("email_input")
email_input_field.check_visibility("E-mail input field is missing")
email_input_field.check_editable_input("E-mail input field should be editable")
self.check_button_visibility("test_button")
self.check_button_visibility("close_button")
def should_be_success_alert(self) -> None:
"""Проверяет наличие сообщения об успешной отправке тестового сообщения.
Raises:
AssertionError: Если тулбар отсутствует.
"""
alert_type = self.alert.get_alert_type()
assert alert_type == "success", f"Expected success alert, but got {alert_type} alert"
self.alert.check_alert_presence('\nТестовое сообщение\nотправлено\n')
self.alert.check_alert_absence('\nТестовое сообщение\nотправлено\n')
def should_be_error_alert(self, alert_text: str) -> None:
"""Проверяет наличие сообщения об неуспешной отправке тестового сообщения.
Raises:
AssertionError: Если тулбар отсутствует.
"""
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(alert_text)
self.alert.check_alert_absence(alert_text)

View File

@ -0,0 +1,109 @@
"""Модуль modal_send_test_sms содержит класс для работы с модальным окном для посылки тестового СМС на
базе настроек вкладки 'Уведомления/СМС'.
Класс SendTestSMSModalWindow наследует базовый функционал ModalWindowComponent
и реализует методы просмотра модального окна отображения задачи.
"""
from playwright.sync_api import Page, expect
from tools.logger import get_logger
from locators.modal_window_locators import ModalWindowLocators
from elements.text_input_element import TextInput
from components.modal_window_component import ModalWindowComponent
# from components.alert_component import AlertComponent
logger = get_logger("SEND_TEST_SMS_MODAL_WINDOW")
class SendTestSMSModalWindow(ModalWindowComponent):
"""Модальное окно для посылки тестового СМС.
Наследует ModalWindowComponent и добавляет функционал для:
1. Инициализации модального окна
2. Закрытия модального окна через тулбар
3. Проверки содержимого модального окна
"""
def __init__(self, page: Page):
"""Инициализирует элементы формы модального окна отображения задачи."""
super().__init__(page)
window_locator = page.locator(ModalWindowLocators.MODAL_WINDOW)
self.window_title_locator = window_locator.locator("//div[@class='v-toolbar__title']")
self.add_toolbar_title("Проверка sms уведомления")
# Настройка кнопки закрытия
toolbar_button_close_locator = window_locator.locator("//button[@data-testid='SMS_TEST_CARD__btn__close']")
self.add_toolbar_button(toolbar_button_close_locator, "close")
# Поле ввода номера телефона
loc = window_locator.locator("//input[@data-testid='SMS_TEST_CARD__text-field_integer__sms_phone']")
sms_phone_input = TextInput(page, loc, "sms_phone_input")
self.add_content_item("sms_phone_input", sms_phone_input)
# Добавление кнопок действий
locator_button_test = window_locator.locator("//button[@data-testid='SMS_TEST_CARD__btn__testSmsSend']")
self.add_button(locator_button_test, "test_button")
# self.alert = AlertComponent(page)
# Действия:
def close_by_toolbar_button(self):
"""Закрывает окно кнопкой на тулбаре."""
self.click_toolbar_close_button()
def click_test_button(self):
"""Отсылка sms по указанному номеру телефона нажатием кнопки 'Тест'."""
close_button = self.get_button_by_name("test_button")
close_button.click()
def get_sms_phone(self) -> str:
"""Возвращает текущее значение поля 'Номер для СМС'."""
sms_phone_input_field = self.get_content_item("sms_phone_input")
return sms_phone_input_field.get_input_value()
def input_sms_phone(self, sms_phone: str) -> None:
"""Заполнение поля 'Номер для СМС'."""
sms_phone_input_field = self.get_content_item("sms_phone_input")
sms_phone_input_field.clear()
sms_phone_input_field.input_value(sms_phone)
# Проверки:
def check_content(self) -> None:
"""Проверяет наличие элементов окна.
"""
self.check_by_window_title()
self.check_toolbar_button_visibility("close")
self.check_toolbar_button_tooltip("close", "Закрыть")
sms_phone_input_field = self.get_content_item("sms_phone_input")
sms_phone_input_field.check_visibility("SMS phone input field is missing")
sms_phone_input_field.check_editable_input("SMS phone input field should be editable")
loc = self.page.locator(ModalWindowLocators.MODAL_WINDOW). \
locator("//input[@data-testid='SMS_TEST_CARD__text-field_integer__sms_phone']")
expect(loc).to_have_attribute("aria-label", "Номер для СМС")
self.check_button_visibility("test_button")
# def should_be_success_alert(self) -> None:
# """Проверяет наличие сообщения об успешной отправке тестового сообщения.
# Raises:
# AssertionError: Если тулбар отсутствует.
# """
# alert_type = self.alert.get_alert_type()
# assert alert_type == "success", f"Expected success alert, but got {alert_type} alert"
# self.alert.check_alert_presence('\nТестовое сообщение\nотправлено\n')
# self.alert.check_alert_absence('\nТестовое сообщение\nотправлено\n')

View File

@ -0,0 +1,82 @@
"""Модуль modal_view_task содержит класс для работы с модальным окном отображения задачи вкладки
Действия панели событий.
Класс ViewTaskModalWindow наследует базовый функционал ModalWindowComponent
и реализует методы просмотра модального окна отображения задачи.
"""
from playwright.sync_api import Page
from tools.logger import get_logger
from locators.modal_window_locators import ModalWindowLocators
from components.table_component import TableComponent
from components.modal_window_component import ModalWindowComponent
logger = get_logger("VIEW_TASK_MODAL_WINDOW")
class ViewTaskModalWindow(ModalWindowComponent):
"""Модальное окно отображения отображения задачи.
Наследует ModalWindowComponent и добавляет функционал для:
1. Инициализации модального окна
2. Закрытия модального окна через тулбар
3. Проверки содержимого модального окна
"""
def __init__(self, page: Page):
"""Инициализирует элементы формы модального окна отображения задачи."""
super().__init__(page)
self.window_title_locator = page.locator(ModalWindowLocators.TASK_MODAL_WINDOW). \
locator("//div[@class='v-toolbar__title']")
# Настройка кнопки закрытия
button_close_locator = page.locator(ModalWindowLocators.TASK_MODAL_WINDOW).get_by_role("button")
self.add_toolbar_button(button_close_locator, "close")
self.task_stages_table_locator = page.locator(ModalWindowLocators.TASK_MODAL_WINDOW). \
locator("//div[@class='scrolltable']/div/table")
self.task_stages_table = TableComponent(page)
# Действия:
def close(self):
"""Закрывает окно кнопкой на тулбаре."""
self.click_toolbar_close_button()
def get_stages_table_content(self) -> list[list[str]]:
"""Возвращает содержимое таблицы, включая заголовки.
Returns:
Двумерный список с содержимым таблицы.
"""
return self.task_stages_table.read(self.task_stages_table_locator)
def get_window_title(self) -> str:
"""Возвращает заголовок окна"""
return self.toolbar.get_toolbar_title_text(self.window_title_locator)
# Проверки:
def check_content(self) -> None:
"""Проверяет наличие элементов окна.
"""
self.toolbar.check_toolbar_presence_by_locator(self.page.locator(ModalWindowLocators.TASK_MODAL_WINDOW). \
locator("//nav"), "Toolbar is missing")
self.check_toolbar_button_visibility("close")
self.check_toolbar_button_tooltip("close", "Закрыть")
self.task_stages_table.check_visibility(self.task_stages_table_locator, "Task stages table is missing")
def check_stages_table_headers(self, actual_headers, expected_headers) -> None:
""" Проверка соответствия заголовка таблицы ожидаемому"""
self.task_stages_table.check_table_headers(actual_headers, expected_headers)
def check_stages_table_row_highlighting(self, row_index: int) -> None:
"""Проверяет выделение указанной строки таблицы.
"""
self.task_stages_table.check_row_highlighting(self.task_stages_table_locator, row_index)

View File

@ -0,0 +1,172 @@
"""Модуль контейнера для пересоздания сертификата во вкладке 'Сертификаты'.
Содержит класс для работы с формой для пересоздания
сертификата во вкладке 'Сертификаты' через Playwright.
"""
from playwright.sync_api import Page
from tools.logger import get_logger
from locators.certificate_locators import CertificateLocators
from elements.text_input_element import TextInput
from elements.text_element import Text
from elements.tooltip_button_element import TooltipButton
from components.toolbar_custom_component import CustomToolbar
from components.base_component import BaseComponent
logger = get_logger("REISSUE_CRTIFICATE_FORM")
class ReissueCertificateForm(BaseComponent):
"""Компонент формы для пересоздания сертификата во вкладке 'Сертификаты'.
Предоставляет методы для взаимодействия с элементами
формы для пересоздания сертификата во вкладке 'Сертификаты'.
"""
def __init__(self, page: Page):
"""Инициализирует компонент формы для пересоздания сертификата во вкладке 'Сертификаты'.
Args:
page: Экземпляр страницы Playwright.
"""
super().__init__(page)
button_locator = page.locator(CertificateLocators.FORM_CONTAINER).get_by_role("button")
self.button_reissue = TooltipButton(page, button_locator, "button_reissue")
self.toolbar_info = CustomToolbar(page)
# поля блока 'Идентификация CA'
identification_title_locator = page.locator(CertificateLocators.BLOCK_HEADER_TEXT). \
filter(has_text='Идентификация CA')
self.identification_title = Text(page, identification_title_locator, "identification_title")
self.identification_cert_name = TextInput(page, CertificateLocators.FIELD_INPUT_CERT_NAME,
"identification_cert_name_field")
self.identification_organization = TextInput(page, CertificateLocators.FIELD_INPUT_ORGANIZATION,
"identification_organization_field")
self.identification_org_unit = TextInput(page, CertificateLocators.FIELD_INPUT_ORG_UNIT,
"identification_org_unit_field")
# поля блока 'Адрес / Местонахождение'
location_title_locator = page.locator(CertificateLocators.BLOCK_HEADER_TEXT). \
filter(has_text='Адрес / Местонахождение')
self.location_title = Text(page, location_title_locator, "location_title")
self.location_country = TextInput(page, CertificateLocators.FIELD_INPUT_COUNTRY, "location_country_field")
self.location_state = TextInput(page, CertificateLocators.FIELD_INPUT_STATE, "location_state_field")
self.location_city = TextInput(page, CertificateLocators.FIELD_INPUT_LOC, "location_city_field")
# Действия:
def get_identification_fields_values(self) -> dict:
"""Возвращает текущее значение полей блока 'Идентификация CA'.
Returns:
dict : Текущее значение полей блока 'Идентификация CA'.
"""
values = {}
values.update({"CN": self.identification_cert_name.get_input_value().strip()})
values.update({"O": self.identification_organization.get_input_value().strip()})
values.update({"OU": self.identification_org_unit.get_input_value().strip()})
return values
def get_location_fields_values(self) -> dict:
"""Возвращает текущее значение полей блока 'Адрес / Местонахождение'.
Returns:
dict : Текущее значение полей блока блока 'Адрес / Местонахождение'.
"""
values = {}
values.update({"C": self.location_country.get_input_value().strip()})
values.update({"ST": self.location_state.get_input_value().strip()})
values.update({"L": self.location_city.get_input_value().strip()})
return values
def input_identification_cert_name_field(self, value: str) -> None:
"""Заполнение поля 'Имя Сертификата' блока 'Идентификация CA'"""
self.identification_cert_name.clear()
self.identification_cert_name.input_value(value)
def input_identification_organization_field(self, value: str) -> None:
"""Заполнение поля 'Организация' блока 'Идентификация CA'"""
self.identification_organization.clear()
self.identification_organization.input_value(value)
def input_identification_org_unit_field(self, value: str) -> None:
"""Заполнение поля 'Подразделение' блока 'Идентификация CA'"""
self.identification_org_unit.clear()
self.identification_org_unit.input_value(value)
def input_location_country_field(self, value: str) -> None:
"""Заполнение поля 'Страна' блока 'Адрес / Местонахождение'"""
self.location_country.clear()
self.location_country.input_value(value)
def input_location_state_field(self, value: str) -> None:
"""Заполнение поля 'Регион / Область' блока 'Адрес / Местонахождение'"""
self.location_state.clear()
self.location_state.input_value(value)
def input_location_city_field(self, value: str) -> None:
"""Заполнение поля 'Город' блока 'Адрес / Местонахождение'"""
self.location_city.clear()
self.location_city.input_value(value)
def _get_label_for_input_field(self, field_locator: str) -> str:
div_loc = f"//div[contains(@class, 'flex')][.{field_locator}]"
label = self.page.locator(div_loc).locator("//preceding-sibling::div[1]").locator("//input")
return label.input_value()
# Проверки:
def check_content(self):
"""Проверяет наличие и корректность всех элементов формы."""
self.button_reissue.check_visibility("Reissue certificate button is missing")
assert self.button_reissue.is_disabled(), "Reissue certificate button should be disabled"
self.button_reissue.check_tooltip_with_text("Пересоздание сертификата (CA)")
# Проверка информационного тулбара
self.toolbar_info.check_toolbar_presence(['Создание нового сертификата',
'Приведет к замене корневого сертификата системы'])
# проверка наличия всех полей формы
self.identification_title.check_visibility("Title 'Идентификация CA' is missing")
cert_name_label = self._get_label_for_input_field(CertificateLocators.FIELD_INPUT_CERT_NAME).strip()
assert cert_name_label == 'ИМЯ СЕРТИФИКАТА (CN)', f"Unexpected field name {cert_name_label} has got"
self.identification_cert_name.check_visibility("Field certificate name input is missing")
organization_label = self._get_label_for_input_field(CertificateLocators.FIELD_INPUT_ORGANIZATION).strip()
assert organization_label == 'ОРГАНИЗАЦИЯ (О)', f"Unexpected field name {organization_label} has got"
self.identification_organization.check_visibility("Field organization input is missing")
org_unit_label = self._get_label_for_input_field(CertificateLocators.FIELD_INPUT_ORG_UNIT).strip()
assert org_unit_label == 'ПОДРАЗДЕЛЕНИЕ (OU)', f"Unexpected field name {org_unit_label} has got"
self.identification_org_unit.check_visibility("Field organization unit input is missing")
self.location_title.check_visibility("Title 'Адрес / Местонахождение' is missing")
country_label = self._get_label_for_input_field(CertificateLocators.FIELD_INPUT_COUNTRY).strip()
assert country_label == 'СТРАНА (С)', f"Unexpected field name {country_label} has got"
self.location_country.check_visibility("Field country input is missing")
state_label = self._get_label_for_input_field(CertificateLocators.FIELD_INPUT_STATE).strip()
assert state_label == 'РЕГИОН / ОБЛАСТЬ (ST)', f"Unexpected field name {state_label} has got"
self.location_state.check_visibility("Field state input is missing")
city_label = self._get_label_for_input_field(CertificateLocators.FIELD_INPUT_LOC).strip()
assert city_label == 'ГОРОД (l)', f"Unexpected field name {city_label} has got"
self.location_city.check_visibility("Field city input is missing")
def is_reissue_button_disabled(self) -> bool:
"""Проверяет доступность кнопки перевыпуска сертификата."""
return self.button_reissue.is_disabled()

View File

@ -27,6 +27,7 @@ class SelectionBarComponent(BaseComponent):
locator_or_text: Локатор панели выбора значения (строка или объект Locator)
или текст для поиска
"""
super().__init__(page)
# Определяем локатор в зависимости от типа параметра
@ -43,15 +44,21 @@ class SelectionBarComponent(BaseComponent):
# При нажатии на панель появляется выпадающий список с параметрами фильтрации для выбора
self.selected_values_list = DropdownList(self.page)
print(self.selection_bar_locator)
# Действия:
def clear_selections(self) -> None:
"""Удаление ранее выбранных значений"""
selected_values = self.get_selected_values()
if len(selected_values) > 0:
clear_button_locator = self.selection_bar_locator.locator(
SelectionBarLocators.CLEAR_SELECTION_BUTTON
)
if clear_button_locator.count() == 0:
clear_button_locator = self.selection_bar_locator.locator("../..").locator(
SelectionBarLocators.CLEAR_SELECTION_BUTTON
)
clear_button_locator.click()
def get_available_options(self) -> list[str]:
@ -60,6 +67,7 @@ class SelectionBarComponent(BaseComponent):
Returns:
list[str]: Список доступных опций
"""
logger.info("Getting available options from dropdown list...")
# Открываем выпадающий список
@ -82,14 +90,26 @@ class SelectionBarComponent(BaseComponent):
def get_selection_bar_title(self) -> str:
"""Возвращает название панели выбора значения"""
title_text = ""
title_locator = self.selection_bar_locator.locator(SelectionBarLocators.TITLE_LOCATOR)
return title_locator.text_content()
if title_locator.count() > 0:
title_text = title_locator.text_content()
else:
title_text = self.selection_bar_locator.get_attribute("placeholder")
return title_text
def get_selected_values(self) -> list[str]:
"""Возвращает список выбранных значений"""
selected_values_locator = self.selection_bar_locator.locator(
SelectionBarLocators.PARAMETERS_SELECTED
)
if selected_values_locator.count() == 0:
selected_values_locator = self.selection_bar_locator.locator("../..").locator(
SelectionBarLocators.PARAMETERS_SELECTED
)
print(selected_values_locator)
selected_values = selected_values_locator.all_inner_texts()
return selected_values[0].splitlines()
@ -100,6 +120,7 @@ class SelectionBarComponent(BaseComponent):
field_name: Название поля для очистки
field_locator: Локатор поля combobox
"""
logger.info(f"Clearing combobox field '{field_name}' using close button...")
# Находим поле по локатору
@ -132,6 +153,7 @@ class SelectionBarComponent(BaseComponent):
def open_values_list(self) -> None:
"""Открытие выпадающего списка путем нажатия на панель выбора значения"""
expect(self.selection_bar_locator).to_be_visible()
# Проверяем, не открыт ли уже список
@ -145,30 +167,32 @@ class SelectionBarComponent(BaseComponent):
self.selection_bar_locator.click(force=True)
# Ждем появления выпадающего списка
self.wait_for_timeout(1500)
if self.page.locator(SelectionBarLocators.LIST_ACTIVE).count() == 0:
assert False, "Values list is empty"
if self.page.locator(SelectionBarLocators.LIST_ACTIVE).count() > 1:
self.page.locator(SelectionBarLocators.LIST_ACTIVE).last.wait_for(state="attached")
else:
self.page.locator(SelectionBarLocators.LIST_ACTIVE).wait_for(state="attached")
#self.page.locator(SelectionBarLocators.LIST_ACTIVE).wait_for(state="attached")
# self.wait_for_timeout(1500)
def select_value(self, name: str) -> None:
"""Выбор значения из списка"""
self.selected_values_list.check_item_with_text(name)
self.selected_values_list.click_item_with_text(name)
def wait_for_timeout(self, timeout: int) -> None:
"""Ожидает указанное количество миллисекунд.
Args:
timeout: Время ожидания в миллисекундах
"""
self.page.wait_for_timeout(timeout)
# Проверки:
def check_field_highlighted_error(self, field_name: str, field_locator: str) -> None:
def check_field_error_highlighted(self, field_name: str, field_locator: str) -> None:
"""Проверяет, что поле подсвечено цветом ошибки (валидация не пройдена).
Args:
field_name: Название поля для проверки
field_locator: Локатор поля для проверки
"""
logger.info(f"Checking field '{field_name}' for error highlighting...")
field_element = self.page.locator(field_locator).first
@ -183,18 +207,18 @@ class SelectionBarComponent(BaseComponent):
if parent_container.count() > 0:
has_error = parent_container.locator(SelectionBarLocators.ERROR_CSS_SELECTORS).count() > 0
if not has_error:
raise AssertionError(f"Field '{field_name}' is not highlighted with error color")
assert has_error, f"Field '{field_name}' is not highlighted with error color"
logger.info(f"Field '{field_name}' is correctly highlighted with error color")
def check_field_not_highlighted_error(self, field_name: str, field_locator: str) -> None:
def check_field_error_not_highlighted(self, field_name: str, field_locator: str) -> None:
"""Проверяет, что поле НЕ подсвечено цветом ошибки (валидация успешна).
Args:
field_name: Название поля для проверки
field_locator: Локатор поля для проверки
"""
logger.info(f"Checking field '{field_name}' for absence of error highlighting...")
field_element = self.page.locator(field_locator).first
@ -205,11 +229,47 @@ class SelectionBarComponent(BaseComponent):
# Ищем родительский контейнер
parent_container = field_element.locator(SelectionBarLocators.INPUT_PARENT_CONTAINER).first
# Проверяем отсутствие классов ошибки с использованием локатора из SelectionBarLocators
# Проверяем отсутствие классов ошибки
if parent_container.count() > 0:
has_error = parent_container.locator(SelectionBarLocators.ERROR_CSS_SELECTORS).count() > 0
if has_error:
raise AssertionError(f"Field '{field_name}' is highlighted with error")
assert not has_error, f"Field '{field_name}' is highlighted with error"
logger.info(f"Field '{field_name}' correctly has no error highlighting")
def check_field_visibility(self, msg: str) -> None:
"""Проверка видимости элемента на странице.
Args:
msg: сообщение об ошибке при неудачной проверке.
Raises:
AssertionError: если элемент не виден на странице.
"""
self.check_visibility(self.selection_bar_locator, msg)
def should_be_clear_selection_button(self) -> None:
"""Проверяет наличие кнопки отмены выбранного значения.
Raises:
AssertionError: Если кнопка отсутствует.
"""
clear_button_locator = self.selection_bar_locator.locator(
SelectionBarLocators.CLEAR_SELECTION_BUTTON
)
expect(clear_button_locator).to_be_visible(), "Clear selection button is missing"
def should_be_open_list_button(self) -> None:
"""Проверяет наличие кнопки раскрытия списка параметров.
Raises:
AssertionError: Если кнопка отсутствует.
"""
open_list_button_locator = self.selection_bar_locator.locator(
SelectionBarLocators.OPEN_PARAMETERS_LIST_BUTTON
)
expect(open_list_button_locator).to_be_visible(), "Open parameters list button is missing"

View File

@ -94,4 +94,4 @@ class SettingsFormComponent(BaseComponent):
"""
self.toolbar.check_toolbar_presence_by_locator_and_title(SettingsFormLocators.SETTTINGS_FORM_SCROLL_CONTAINER,
"Session settings form toolbar is missing")
"Settings form toolbar is missing")

View File

@ -15,7 +15,6 @@ from components_derived.modal_change_password import ChangePasswordModalWindow
logger = get_logger("USER_CARD")
class UserCard(BaseComponent):
"""Компонент карточка.
@ -36,37 +35,37 @@ class UserCard(BaseComponent):
# Обновленные локаторы согласно новой структуре карточки
self.current_user_name = Text(
page,
card_locator.locator("xpath=/div/div[1]"), # Изменено с div[2] на div[1]
card_locator.locator("xpath=/div[@class='v-card__text']/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]
card_locator.locator("xpath=/div[@class='v-card__text']/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]
card_locator.locator("xpath=/div[@class='v-card__text']/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]
card_locator.locator("xpath=/div[@class='v-card__text']/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="Выйти"),
card_locator.locator(UserCardLocators.BUTTON_LOGOUT),
"logout button"
)
self.change_password_button = Button(
page,
page.get_by_role("button", name="Изменить пароль"),
card_locator.locator(UserCardLocators.BUTTON_CHANGE_PASSWORD),
"change password button"
)
self.close_button = Button(
page,
page.get_by_role("button", name="Закрыть"),
card_locator.locator(UserCardLocators.BUTTON_CLOSE),
"close button"
)
@ -127,7 +126,7 @@ class UserCard(BaseComponent):
"Expected text 'Время входа:' is missing in user card"
)
session_time_str = self.session_time.get_text(0)
assert session_time_str.find("Время сессии:") != -1, (
assert session_time_str.find("Время сеанса:") != -1, (
"Expected text 'Время сессии:' is missing in user card"
)
@ -148,6 +147,6 @@ class UserCard(BaseComponent):
Raises:
AssertionError: Если карточка пользователя все еще открыта.
"""
card_locator = self.page.locator(UserCardLocators.CARD_USER).locator("xpath=../..")
card_locator = self.page.locator(UserCardLocators.CARD_USER).locator("..")
class_attr = card_locator.get_attribute('class')
assert 'menuable__content__active' not in class_attr, "User card should be closed"

View File

@ -0,0 +1,267 @@
"""Модуль контейнера для отображения сертификата во вкладке 'Сертификаты'.
Содержит класс для работы с формой для отображения данных
сертификата во вкладке 'Сертификаты' через Playwright.
"""
from pathlib import Path
import os
from playwright.sync_api import Page
from tools.logger import get_logger
from locators.certificate_locators import CertificateLocators
from elements.text_input_element import TextInput
from elements.text_element import Text
from elements.tooltip_button_element import TooltipButton
from components.base_component import BaseComponent
logger = get_logger("VIEW_CRTIFICATE_FORM")
class ViewCertificateForm(BaseComponent):
"""Компонент формы для отображения данных сертификата во вкладке 'Сертификаты'.
Предоставляет методы для взаимодействия с элементами
формы для отображения данных сертификата во вкладке 'Сертификаты'.
"""
def __init__(self, page: Page):
"""Инициализирует компонент формы для отображения данных сертификата во вкладке 'Сертификаты'.
Args:
page: Экземпляр страницы Playwright.
"""
super().__init__(page)
button_locator = page.locator(CertificateLocators.FORM_CONTAINER).get_by_role("button")
self.button_export = TooltipButton(page, button_locator, "button_export")
# поля блока 'Основная информация'
base_info_title_locator = page.locator(CertificateLocators.BLOCK_HEADER_TEXT). \
filter(has_text='Основная информация')
self.base_info_title = Text(page, base_info_title_locator, "base_info_title")
self.base_info_version = TextInput(page, CertificateLocators.FIELD_VERSION, "base_info_version_field")
self.base_info_serial_number = TextInput(page, CertificateLocators.FIELD_SERIAL_NUMBER,
"base_info_serial_number_field")
self.base_info_signature_algorithm = TextInput(page, CertificateLocators.FIELD_SIGNATURE_ALGORITHM,
"base_info_signature_algorithm_field")
# поля блока 'Срок действия'
validity_title_locator = page.locator(CertificateLocators.BLOCK_HEADER_TEXT). \
filter(has_text='Срок действия')
self.validity_title = Text(page, validity_title_locator, "validity_title")
self.validity = TextInput(page, CertificateLocators.FIELD_VALIDITY, "validity_validity_field")
self.validity_not_before = TextInput(page, CertificateLocators.FIELD_NOT_BEFORE, "validity_not_before_field")
self.validity_not_after = TextInput(page, CertificateLocators.FIELD_NOT_AFTER, "validity_not_after_field")
# поля блока 'Издатель / Субъект'
subject_title_locator = page.locator(CertificateLocators.BLOCK_HEADER_TEXT). \
filter(has_text='Издатель / Субъект')
self.subject_title = Text(page, subject_title_locator, "subject_title")
self.subject_cert_name = TextInput(page, CertificateLocators.FIELD_CERT_NAME, "subject_cert_name_field")
self.subject_organization = TextInput(page, CertificateLocators.FIELD_ORGANIZATION,
"subject_organization_field")
self.subject_org_unit = TextInput(page, CertificateLocators.FIELD_ORG_UNIT, "subject_org_unit_field")
self.subject_country = TextInput(page, CertificateLocators.FIELD_COUNTRY, "subject_country_field")
self.subject_state = TextInput(page, CertificateLocators.FIELD_STATE, "subject_state_field")
self.subject_location = TextInput(page, CertificateLocators.FIELD_LOC, "subject_location_field")
# поля блока 'Ключ и отпечаток'
fingerprint_title_locator = page.locator(CertificateLocators.BLOCK_HEADER_TEXT). \
filter(has_text='Ключ и отпечаток')
self.fingerprint_title = Text(page, fingerprint_title_locator, "fingerprint_title")
self.fingerprint_public_key = TextInput(page, CertificateLocators.FIELD_PUBLIC_KEY_FINGERPRINT,
"fingerprint_public_key_field")
self.fingerprint_algorithm = TextInput(page, CertificateLocators.FIELD_ALGORITHM,
"fingerprint_algorithm_field")
self.fingerprint_key_size = TextInput(page, CertificateLocators.FIELD_KEY_SIZE,
"fingerprint_key_size_field")
# Действия:
def get_certificate(self) -> dict:
""" Возвращает значания полей отображаемого сертификата"""
certificate = {}
base_info_dict = {}
val = self.base_info_version.get_input_value().strip()
base_info_dict.update({"version": val})
val = self.base_info_serial_number.get_input_value().strip()
base_info_dict.update({"serialNumber": val})
val = self.base_info_signature_algorithm.get_input_value().strip()
base_info_dict.update({"signatureAlgorithm": val})
validity_dict = {}
val = self.validity.get_input_value().strip()
validity_dict.update({"status": val})
val = self.validity_not_before.get_input_value().strip()
validity_dict.update({"notBefore": val})
val = self.validity_not_after.get_input_value().strip()
validity_dict.update({"notAfter": val})
fingerprint_dict = {}
val = self.fingerprint_public_key.get_input_value().strip()
fingerprint_dict.update({"publicKeyFingerprint": val})
val = self.fingerprint_algorithm.get_input_value().strip()
fingerprint_dict.update({"algorithm": val})
val = self.fingerprint_key_size.get_input_value().strip()
fingerprint_dict.update({"keySize": int(val)})
subject_dict = {}
if self.subject_country.get_locator().count() != 0:
val = self.subject_country.get_input_value().strip()
subject_dict.update({"C": val})
if self.subject_state.get_locator().count() != 0:
val = self.subject_state.get_input_value().strip()
subject_dict.update({"ST": val})
if self.subject_location.get_locator().count() != 0:
val = self.subject_location.get_input_value().strip()
subject_dict.update({"L": val})
if self.subject_organization.get_locator().count() != 0:
val = self.subject_organization.get_input_value().strip()
subject_dict.update({"O": val})
if self.subject_org_unit.get_locator().count() != 0:
val = self.subject_org_unit.get_input_value().strip()
subject_dict.update({"OU": val})
if self.subject_cert_name.get_locator().count() != 0:
val = self.subject_cert_name.get_input_value().strip()
subject_dict.update({"CN": val})
certificate["baseInfo"] = base_info_dict
certificate["validity"] = validity_dict
certificate["fingerprint"] = fingerprint_dict
certificate["subject"] = subject_dict
return certificate
def export_certificate(self) -> str:
"""Нажатие кнопки 'Экспорт сертификата (CA)' в форме отображения сертификата и
скачивание текущего корневого сертификата.
Returns:
str : Полный путь к скачанному файлу.
"""
path_to_download = Path.home() / "Downloads"
self.button_export.check_visibility("Export certificate button is missing")
with self.page.expect_download() as download_info:
self.button_export.click()
download = download_info.value
download_error = download.failure()
assert not download_error, f"Download certificate error: {download_error}"
file_to_download = os.path.join(path_to_download, download.suggested_filename)
download.save_as(file_to_download)
assert os.path.exists(file_to_download), f"The certificate file '{file_to_download}' not found"
assert os.path.getsize(file_to_download) > 0, f"The certificate file '{file_to_download}' is empty"
return file_to_download
def _get_label_for_input_field(self, field_locator: str) -> str:
div_loc = f"//div[contains(@class, 'flex')][.{field_locator}]"
label = self.page.locator(div_loc).locator("//preceding-sibling::div[1]").locator("//input")
return label.input_value()
# Проверки:
def check_content(self):
"""Проверяет наличие и корректность всех элементов формы."""
self.button_export.check_visibility("Export certificate button is missing")
self.button_export.check_tooltip_with_text("Экспорт сертификата CA")
# проверка наличия всех полей формы
self.base_info_title.check_visibility("Title 'Основная информация' is missing")
version_label = self._get_label_for_input_field(CertificateLocators.FIELD_VERSION).strip()
assert version_label == 'ВЕРСИЯ (Version)', f"Unexpected field name {version_label} has got"
self.base_info_version.check_visibility("Field version value is missing")
serial_number_label = self._get_label_for_input_field(CertificateLocators.FIELD_SERIAL_NUMBER).strip()
assert serial_number_label == 'СЕРИЙНЫЙ НОМЕР (Serial Number)',\
f"Unexpected field name {serial_number_label} has got"
self.base_info_serial_number.check_visibility("Field serial number value is missing")
signature_algorithm_label = self._get_label_for_input_field(CertificateLocators.FIELD_SIGNATURE_ALGORITHM). \
strip()
assert signature_algorithm_label == 'АЛГОРИТМ ПОДПИСИ (Signature Algorithm)',\
f"Unexpected field name {signature_algorithm_label} has got"
self.base_info_signature_algorithm.check_visibility("Field signature algorithm value is missing")
self.validity_title.check_visibility("Title 'Срок действия' is missing")
validity_label = self._get_label_for_input_field(CertificateLocators.FIELD_VALIDITY).strip()
assert validity_label == 'СТАТУС (Validity)',\
f"Unexpected field name {validity_label} has got"
self.validity.check_visibility("Field validity value is missing")
validity_not_before_label = self._get_label_for_input_field(CertificateLocators.FIELD_NOT_BEFORE).strip()
assert validity_not_before_label == 'ДЕЙСТВИТЕЛЕН С (Not Before)',\
f"Unexpected field name {validity_not_before_label} has got"
self.validity_not_before.check_visibility("Field validity not before value is missing")
validity_not_after_label = self._get_label_for_input_field(CertificateLocators.FIELD_NOT_AFTER).strip()
assert validity_not_after_label == 'ДЕЙСТВИТЕЛЕН ДО (Not After)',\
f"Unexpected field name {validity_not_after_label} has got"
self.validity_not_after.check_visibility("Field validity not after value is missing")
self.subject_title.check_visibility("Title 'Издатель / Субъект' is missing")
if self.page.locator(CertificateLocators.FIELD_CERT_NAME).count() != 0:
cert_name_label = self._get_label_for_input_field(CertificateLocators.FIELD_CERT_NAME).strip()
assert cert_name_label == 'ИМЯ СЕРТИФИКАТА (CN)',\
f"Unexpected field name {cert_name_label} has got"
self.subject_cert_name.check_visibility("Field certificate name value is missing")
if self.page.locator(CertificateLocators.FIELD_ORGANIZATION).count() != 0:
organization_label = self._get_label_for_input_field(CertificateLocators.FIELD_ORGANIZATION).strip()
assert organization_label == 'ОРГАНИЗАЦИЯ (О)',\
f"Unexpected field name {organization_label} has got"
self.subject_organization.check_visibility("Field organization value is missing")
if self.page.locator(CertificateLocators.FIELD_ORG_UNIT).count() != 0:
org_unit_label = self._get_label_for_input_field(CertificateLocators.FIELD_ORG_UNIT).strip()
assert org_unit_label == 'ПОДРАЗДЕЛЕНИЕ (OU)',\
f"Unexpected field name {org_unit_label} has got"
self.subject_org_unit.check_visibility("Field organization unit value is missing")
if self.page.locator(CertificateLocators.FIELD_COUNTRY).count() != 0:
country_label = self._get_label_for_input_field(CertificateLocators.FIELD_COUNTRY).strip()
assert country_label == 'СТРАНА (С)',\
f"Unexpected field name {country_label} has got"
self.subject_country.check_visibility("Field country value is missing")
if self.page.locator(CertificateLocators.FIELD_STATE).count() != 0:
state_label = self._get_label_for_input_field(CertificateLocators.FIELD_STATE).strip()
assert state_label == 'РЕГИОН / ОБЛАСТЬ (ST)',\
f"Unexpected field name {state_label} has got"
self.subject_state.check_visibility("Field state value is missing")
if self.page.locator(CertificateLocators.FIELD_LOC).count() != 0:
location_label = self._get_label_for_input_field(CertificateLocators.FIELD_LOC).strip()
assert location_label == 'ГОРОД (l)',\
f"Unexpected field name {location_label} has got"
self.subject_location.check_visibility("Field location value is missing")
self.fingerprint_title.check_visibility("Title 'Ключ и отпечаток' is missing")
public_key_label = self._get_label_for_input_field(CertificateLocators.FIELD_PUBLIC_KEY_FINGERPRINT).strip()
assert public_key_label == 'ПУБЛИЧНЫЙ ОТПЕЧАТОК (PublicKeyFingerprint)',\
f"Unexpected field name {public_key_label} has got"
self.fingerprint_public_key.check_visibility("Field public key value is missing")
algorithm_label = self._get_label_for_input_field(CertificateLocators.FIELD_ALGORITHM).strip()
assert algorithm_label == 'АЛГОРИТМ (Algorithm)',\
f"Unexpected field name {algorithm_label} has got"
self.fingerprint_algorithm.check_visibility("Field algorithm value is missing")
key_size_label = self._get_label_for_input_field(CertificateLocators.FIELD_KEY_SIZE).strip()
assert key_size_label == 'ДЛИНА КЛЮЧА (Key Size)',\
f"Unexpected field name {key_size_label} has got"
self.fingerprint_key_size.check_visibility("Field key size value is missing")

View File

@ -20,8 +20,8 @@ class Environment:
DEVELOP: str = 'develop'
URLS: Dict[str, str] = {
TEST: 'http://192.168.2.76/',
DEVELOP: 'http://192.168.2.69/'
TEST: 'https://192.168.236.12/',
DEVELOP: 'https://192.168.2.69/'
}
def __init__(self) -> None:

View File

@ -14,7 +14,18 @@ help:
.PHONY: help Makefile
# Custom targets for documentation management
.PHONY: clean-docs rebuild-docs
clean-docs:
rm -rf $(BUILDDIR)/
find $(SOURCEDIR) -name "*.rst" ! -name "index.rst" ! -name "sphinx_guide.rst" -delete
rebuild-docs: clean-docs
sphinx-apidoc -o $(SOURCEDIR) .. -f
@$(SPHINXBUILD) -M html "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)

4
docs/build/html/.buildinfo.bak vendored Normal file
View File

@ -0,0 +1,4 @@
# Sphinx build info version 1
# This file records the configuration used when building these files. When it is not found, a full rebuild will be done.
config: 3c1e20399f1a6eba1e2cff02a3427139
tags: 645f666f9bcd5a90fca523b33c5a78b7

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,512 @@
<!DOCTYPE html>
<html class="writer-html5" lang="ru" data-content_root="../../">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>components_derived.interactive_dropdown_list &mdash; документация e-nms-qa-automation 0.1.0</title>
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../../_static/css/theme.css?v=e59714d7" />
<script src="../../_static/jquery.js?v=5d32c60e"></script>
<script src="../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../../_static/documentation_options.js?v=6ff560e8"></script>
<script src="../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../_static/translations.js?v=cd1d70c9"></script>
<script src="../../_static/js/theme.js"></script>
<link rel="index" title="Алфавитный указатель" href="../../genindex.html" />
<link rel="search" title="Поиск" href="../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../index.html" class="icon icon-home">
e-nms-qa-automation
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
<input type="text" name="q" placeholder="Поиск в документации" aria-label="Поиск в документации" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Меню навигации">
<p class="caption" role="heading"><span class="caption-text">Содержание:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../sphinx_guide.html">Sphinx Руководство</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id2">Расположение документа</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id3">Преимущества Sphinx</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id4">Подготовка зависимостей</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id5">Инициализация Sphinx</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id6">Настройка конфигурации</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id7">Конвертация контента</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#markdown-restructuredtext">Markdown → reStructuredText</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#id8">Таблицы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id9">Автогенерация документации из кода</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id10">Настройка главной страницы</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id11">Сборка и деплой</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id12">Полезные команды</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id13">Особенности Sphinx</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#docstrings">Поддержка docstrings</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#id14">Кастомные директивы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id15">Решение проблем</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#id16">Проблема: Модули не находятся</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#id17">Проблема: Не генерируются docstrings</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#id18">Проблема: Тема не применяется</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id19">Дополнительные возможности</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">e-nms_qa_automation</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../../components.html">components package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.alert_component">components.alert_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.alert_component.AlertComponent"><code class="docutils literal notranslate"><span class="pre">AlertComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.base_component">components.base_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.base_component.BaseComponent"><code class="docutils literal notranslate"><span class="pre">BaseComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.card_component">components.card_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.card_component.CardComponent"><code class="docutils literal notranslate"><span class="pre">CardComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.confirm_component">components.confirm_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.confirm_component.ConfirmComponent"><code class="docutils literal notranslate"><span class="pre">ConfirmComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.date_picker_component">components.date_picker_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.date_picker_component.DatePickerComponent"><code class="docutils literal notranslate"><span class="pre">DatePickerComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.dropdown_list_component">components.dropdown_list_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.dropdown_list_component.DropdownList"><code class="docutils literal notranslate"><span class="pre">DropdownList</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.eventbar_component">components.eventbar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.eventbar_component.EventPanelComponent"><code class="docutils literal notranslate"><span class="pre">EventPanelComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.events_container_component">components.events_container_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.events_container_component.EventsContainerComponent"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.json_container_component">components.json_container_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.json_container_component.JsonContainerComponent"><code class="docutils literal notranslate"><span class="pre">JsonContainerComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.modal_window_component">components.modal_window_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.modal_window_component.ModalWindowComponent"><code class="docutils literal notranslate"><span class="pre">ModalWindowComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.navbar_component">components.navbar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.navbar_component.NavigationPanelComponent"><code class="docutils literal notranslate"><span class="pre">NavigationPanelComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.table_component">components.table_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.table_component.TableComponent"><code class="docutils literal notranslate"><span class="pre">TableComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.toolbar_component">components.toolbar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.toolbar_component.ToolbarComponent"><code class="docutils literal notranslate"><span class="pre">ToolbarComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../components_derived.html">components_derived package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived.container_system_log_events">components_derived.container_system_log_events module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components_derived.html#components_derived.container_system_log_events.SystemLogEventsContainer"><code class="docutils literal notranslate"><span class="pre">SystemLogEventsContainer</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived.date_input_component">components_derived.date_input_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components_derived.html#components_derived.date_input_component.DateInput"><code class="docutils literal notranslate"><span class="pre">DateInput</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived.interactive_dropdown_list">components_derived.interactive_dropdown_list module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components_derived.html#components_derived.interactive_dropdown_list.InteractiveDropdownList"><code class="docutils literal notranslate"><span class="pre">InteractiveDropdownList</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived.modal_add_AD_user">components_derived.modal_add_AD_user module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components_derived.html#components_derived.modal_add_AD_user.AddADUserModalWindow"><code class="docutils literal notranslate"><span class="pre">AddADUserModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived.modal_add_local_user">components_derived.modal_add_local_user module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components_derived.html#components_derived.modal_add_local_user.AddLocalUserModalWindow"><code class="docutils literal notranslate"><span class="pre">AddLocalUserModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived.modal_change_password">components_derived.modal_change_password module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components_derived.html#components_derived.modal_change_password.ChangePasswordModalWindow"><code class="docutils literal notranslate"><span class="pre">ChangePasswordModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived.modal_edit_user">components_derived.modal_edit_user module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components_derived.html#components_derived.modal_edit_user.EditUserModalWindow"><code class="docutils literal notranslate"><span class="pre">EditUserModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived.modal_view_template">components_derived.modal_view_template module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components_derived.html#components_derived.modal_view_template.ViewTemplateModalWindow"><code class="docutils literal notranslate"><span class="pre">ViewTemplateModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived.modal_view_ztp_template">components_derived.modal_view_ztp_template module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components_derived.html#components_derived.modal_view_ztp_template.ViewZTPTemplateModalWindow"><code class="docutils literal notranslate"><span class="pre">ViewZTPTemplateModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived.selection_bar_component">components_derived.selection_bar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components_derived.html#components_derived.selection_bar_component.SelectionBarComponent"><code class="docutils literal notranslate"><span class="pre">SelectionBarComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived.settings_form_component">components_derived.settings_form_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components_derived.html#components_derived.settings_form_component.SettingsFormComponent"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived.sidebar_filter_component">components_derived.sidebar_filter_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components_derived.html#components_derived.sidebar_filter_component.SidebarFilterComponent"><code class="docutils literal notranslate"><span class="pre">SidebarFilterComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived.user_card">components_derived.user_card module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components_derived.html#components_derived.user_card.UserCard"><code class="docutils literal notranslate"><span class="pre">UserCard</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../conftest.html">conftest module</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../conftest.html#conftest.pytest_sessionfinish"><code class="docutils literal notranslate"><span class="pre">pytest_sessionfinish()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../conftest.html#conftest.pytest_addoption"><code class="docutils literal notranslate"><span class="pre">pytest_addoption()</span></code></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../data.html">data package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../data.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../data.html#module-data.constants">data.constants module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../data.html#data.constants.Constants"><code class="docutils literal notranslate"><span class="pre">Constants</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../data.html#module-data.environment">data.environment module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../data.html#data.environment.Environment"><code class="docutils literal notranslate"><span class="pre">Environment</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../data.html#module-data.roles_dict">data.roles_dict module</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../data.html#module-data">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../elements.html">elements package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../elements.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../elements.html#module-elements.base_element">elements.base_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../elements.html#elements.base_element.BaseElement"><code class="docutils literal notranslate"><span class="pre">BaseElement</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../elements.html#module-elements.button_element">elements.button_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../elements.html#elements.button_element.Button"><code class="docutils literal notranslate"><span class="pre">Button</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../elements.html#module-elements.checkbox_element">elements.checkbox_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../elements.html#elements.checkbox_element.Checkbox"><code class="docutils literal notranslate"><span class="pre">Checkbox</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../elements.html#module-elements.icon_element">elements.icon_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../elements.html#elements.icon_element.Icon"><code class="docutils literal notranslate"><span class="pre">Icon</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../elements.html#module-elements.tab_button_element">elements.tab_button_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../elements.html#elements.tab_button_element.TabButton"><code class="docutils literal notranslate"><span class="pre">TabButton</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../elements.html#module-elements.text_element">elements.text_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../elements.html#elements.text_element.Text"><code class="docutils literal notranslate"><span class="pre">Text</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../elements.html#module-elements.text_input_element">elements.text_input_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../elements.html#elements.text_input_element.TextInput"><code class="docutils literal notranslate"><span class="pre">TextInput</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../elements.html#module-elements.tooltip_button_element">elements.tooltip_button_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../elements.html#elements.tooltip_button_element.TooltipButton"><code class="docutils literal notranslate"><span class="pre">TooltipButton</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../elements.html#module-elements">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../fixtures.html">fixtures package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../fixtures.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../fixtures.html#module-fixtures.pages">fixtures.pages module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../fixtures.html#fixtures.pages.pytest_addoption"><code class="docutils literal notranslate"><span class="pre">pytest_addoption()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="../../fixtures.html#fixtures.pages.browser"><code class="docutils literal notranslate"><span class="pre">browser()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="../../fixtures.html#fixtures.pages.get_firefox_browser"><code class="docutils literal notranslate"><span class="pre">get_firefox_browser()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="../../fixtures.html#fixtures.pages.get_chrome_browser"><code class="docutils literal notranslate"><span class="pre">get_chrome_browser()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="../../fixtures.html#fixtures.pages.get_remote_chrome"><code class="docutils literal notranslate"><span class="pre">get_remote_chrome()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="../../fixtures.html#fixtures.pages.get_context"><code class="docutils literal notranslate"><span class="pre">get_context()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="../../fixtures.html#fixtures.pages.return_back"><code class="docutils literal notranslate"><span class="pre">return_back()</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../fixtures.html#module-fixtures">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../pages.html">pages package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#module-pages.base_page">pages.base_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../pages.html#pages.base_page.BasePage"><code class="docutils literal notranslate"><span class="pre">BasePage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#module-pages.current_session_tab">pages.current_session_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../pages.html#pages.current_session_tab.CurrentSessionsTab"><code class="docutils literal notranslate"><span class="pre">CurrentSessionsTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#module-pages.license_tab">pages.license_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../pages.html#pages.license_tab.LicenseTab"><code class="docutils literal notranslate"><span class="pre">LicenseTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#module-pages.login_page">pages.login_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../pages.html#pages.login_page.LoginPage"><code class="docutils literal notranslate"><span class="pre">LoginPage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#module-pages.main_page">pages.main_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../pages.html#pages.main_page.MainPage"><code class="docutils literal notranslate"><span class="pre">MainPage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#module-pages.push_notifications_settings_tab">pages.push_notifications_settings_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab"><code class="docutils literal notranslate"><span class="pre">PushNotificationsSettingsTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#module-pages.service_status_tab">pages.service_status_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../pages.html#pages.service_status_tab.ServiceStatusTab"><code class="docutils literal notranslate"><span class="pre">ServiceStatusTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#module-pages.session_settings_tab">pages.session_settings_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../pages.html#pages.session_settings_tab.SessionSettingsTab"><code class="docutils literal notranslate"><span class="pre">SessionSettingsTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#module-pages.templates_tab">pages.templates_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../pages.html#pages.templates_tab.TemplatesTab"><code class="docutils literal notranslate"><span class="pre">TemplatesTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#module-pages.users_tab">pages.users_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../pages.html#pages.users_tab.UsersTab"><code class="docutils literal notranslate"><span class="pre">UsersTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#module-pages.ztp_config_tab">pages.ztp_config_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../pages.html#pages.ztp_config_tab.ZTPConfigTab"><code class="docutils literal notranslate"><span class="pre">ZTPConfigTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#module-pages.ztp_templates_tab">pages.ztp_templates_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../pages.html#pages.ztp_templates_tab.ZTPTemplatesTab"><code class="docutils literal notranslate"><span class="pre">ZTPTemplatesTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#module-pages">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../tools.html">tools package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../tools.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../tools.html#module-tools.fix_python_project">tools.fix_python_project module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../tools.html#tools.fix_python_project.ProjectFixer"><code class="docutils literal notranslate"><span class="pre">ProjectFixer</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../tools.html#module-tools.logger">tools.logger module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../tools.html#tools.logger.get_logger"><code class="docutils literal notranslate"><span class="pre">get_logger()</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../tools.html#module-tools">Module contents</a></li>
</ul>
</li>
</ul>
</li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Разработка и документация:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../sphinx_guide.html">Sphinx Руководство</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id2">Расположение документа</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id3">Преимущества Sphinx</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id4">Подготовка зависимостей</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id5">Инициализация Sphinx</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id6">Настройка конфигурации</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id7">Конвертация контента</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#markdown-restructuredtext">Markdown → reStructuredText</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#id8">Таблицы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id9">Автогенерация документации из кода</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id10">Настройка главной страницы</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id11">Сборка и деплой</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id12">Полезные команды</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id13">Особенности Sphinx</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#docstrings">Поддержка docstrings</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#id14">Кастомные директивы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id15">Решение проблем</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#id16">Проблема: Модули не находятся</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#id17">Проблема: Не генерируются docstrings</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#id18">Проблема: Тема не применяется</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id19">Дополнительные возможности</a></li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Меню навигации для мобильных устройств" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../index.html">e-nms-qa-automation</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Навигация по страницам">
<ul class="wy-breadcrumbs">
<li><a href="../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="../index.html">Код модуля</a></li>
<li class="breadcrumb-item active">components_derived.interactive_dropdown_list</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>Исходный код components_derived.interactive_dropdown_list</h1><div class="highlight"><pre>
<span></span><span class="sd">&quot;&quot;&quot;Модуль interactive_dropdown_list_component содержит класс для работы с интерактивными выпадающими списками,</span>
<span class="sd">позволяющими сделать выбор нескольких элементов.</span>
<span class="sd">Класс InteractiveDropdownList наследует базовый функционал BaseComponent и добавляет</span>
<span class="sd">методы для взаимодействия с интерактивными выпадающими списками на странице.</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">playwright.sync_api</span><span class="w"> </span><span class="kn">import</span> <span class="n">Page</span><span class="p">,</span> <span class="n">Locator</span><span class="p">,</span> <span class="n">expect</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">tools.logger</span><span class="w"> </span><span class="kn">import</span> <span class="n">get_logger</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">components.base_component</span><span class="w"> </span><span class="kn">import</span> <span class="n">BaseComponent</span>
<span class="n">logger</span> <span class="o">=</span> <span class="n">get_logger</span><span class="p">(</span><span class="s2">&quot;INTERACTIVE_DROPDOWN_LIST&quot;</span><span class="p">)</span>
<div class="viewcode-block" id="InteractiveDropdownList">
<a class="viewcode-back" href="../../components_derived.html#components_derived.interactive_dropdown_list.InteractiveDropdownList">[документация]</a>
<span class="k">class</span><span class="w"> </span><span class="nc">InteractiveDropdownList</span><span class="p">(</span><span class="n">BaseComponent</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Класс для работы с выпадающими списками.</span>
<span class="sd"> Наследует функциональность BaseElement и добавляет специфичные</span>
<span class="sd"> методы для выбора и проверки элементов списка.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<div class="viewcode-block" id="InteractiveDropdownList.__init__">
<a class="viewcode-back" href="../../components_derived.html#components_derived.interactive_dropdown_list.InteractiveDropdownList.__init__">[документация]</a>
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">page</span><span class="p">:</span> <span class="n">Page</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Инициализирует компонент интерактивного выпадающего списка.</span>
<span class="sd"> Args:</span>
<span class="sd"> page: Экземпляр страницы Playwright.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">page</span><span class="p">)</span></div>
<span class="c1"># Действия:</span>
<div class="viewcode-block" id="InteractiveDropdownList.get_checkbox_locator">
<a class="viewcode-back" href="../../components_derived.html#components_derived.interactive_dropdown_list.InteractiveDropdownList.get_checkbox_locator">[документация]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">get_checkbox_locator</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Locator</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Возвращает локатор чек-бокса для элемента списка с указанным текстом.</span>
<span class="sd"> Args:</span>
<span class="sd"> text (str): Текст элемента для выбора.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">checkbox_locator</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_locator</span><span class="p">(</span><span class="s1">&#39;div.v-list__tile__title&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">get_by_text</span><span class="p">(</span><span class="n">text</span><span class="p">)</span><span class="o">.</span> \
<span class="n">locator</span><span class="p">(</span><span class="s2">&quot;../..&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">locator</span><span class="p">(</span><span class="s2">&quot;//input[@role=&#39;checkbox&#39;]&quot;</span><span class="p">)</span>
<span class="n">expect</span><span class="p">(</span><span class="n">checkbox_locator</span><span class="p">)</span><span class="o">.</span><span class="n">to_be_visible</span><span class="p">(),</span> \
<span class="sa">f</span><span class="s2">&quot;Checkbox for dropdown list item with text </span><span class="si">{</span><span class="n">text</span><span class="si">}</span><span class="s2"> is missing&quot;</span>
<span class="k">return</span> <span class="n">checkbox_locator</span></div>
<div class="viewcode-block" id="InteractiveDropdownList.deselect_item_with_text">
<a class="viewcode-back" href="../../components_derived.html#components_derived.interactive_dropdown_list.InteractiveDropdownList.deselect_item_with_text">[документация]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">deselect_item_with_text</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Выбирает элемент списка по указанному тексту.</span>
<span class="sd"> Args:</span>
<span class="sd"> text (str): Текст элемента для выбора.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">get_checkbox_locator</span><span class="p">(</span><span class="n">text</span><span class="p">)</span><span class="o">.</span><span class="n">uncheck</span><span class="p">(</span><span class="n">force</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></div>
<div class="viewcode-block" id="InteractiveDropdownList.select_item_with_text">
<a class="viewcode-back" href="../../components_derived.html#components_derived.interactive_dropdown_list.InteractiveDropdownList.select_item_with_text">[документация]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">select_item_with_text</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Выбирает элемент списка по указанному тексту.</span>
<span class="sd"> Args:</span>
<span class="sd"> text (str): Текст элемента для выбора.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">get_checkbox_locator</span><span class="p">(</span><span class="n">text</span><span class="p">)</span><span class="o">.</span><span class="n">check</span><span class="p">(</span><span class="n">force</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></div>
<div class="viewcode-block" id="InteractiveDropdownList.get_selected_items">
<a class="viewcode-back" href="../../components_derived.html#components_derived.interactive_dropdown_list.InteractiveDropdownList.get_selected_items">[документация]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">get_selected_items</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">locator</span><span class="p">:</span> <span class="nb">str</span><span class="o">|</span><span class="n">Locator</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Возвращает список отмеченных элементов.&quot;&quot;&quot;</span>
<span class="n">selected_items</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">list_locator</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_locator</span><span class="p">(</span><span class="n">locator</span><span class="p">)</span>
<span class="n">items</span> <span class="o">=</span> <span class="n">list_locator</span><span class="o">.</span><span class="n">get_by_role</span><span class="p">(</span><span class="s2">&quot;listitem&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
<span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">items</span><span class="p">:</span>
<span class="k">if</span> <span class="n">item</span><span class="o">.</span><span class="n">get_by_role</span><span class="p">(</span><span class="s2">&quot;checkbox&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">is_checked</span><span class="p">():</span>
<span class="n">item_text</span> <span class="o">=</span> <span class="n">item</span><span class="o">.</span><span class="n">text_content</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
<span class="k">if</span> <span class="n">item_text</span><span class="p">:</span>
<span class="n">selected_items</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">item_text</span><span class="p">)</span>
<span class="k">return</span> <span class="n">selected_items</span></div>
</div>
<span class="c1"># Проверки:</span>
</pre></div>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; Авторские права 2025, NPO KIS. </p>
</div>
Собрано при помощи <a href="https://www.sphinx-doc.org/">Sphinx</a> с использованием
<a href="https://github.com/readthedocs/sphinx_rtd_theme">темы,</a>
предоставленной <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

View File

@ -0,0 +1,552 @@
<!DOCTYPE html>
<html class="writer-html5" lang="ru" data-content_root="../../">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>components_derived.settings_form_component &mdash; документация e-nms-qa-automation 0.1.0</title>
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../../_static/css/theme.css?v=e59714d7" />
<script src="../../_static/jquery.js?v=5d32c60e"></script>
<script src="../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../../_static/documentation_options.js?v=6ff560e8"></script>
<script src="../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../_static/translations.js?v=cd1d70c9"></script>
<script src="../../_static/js/theme.js"></script>
<link rel="index" title="Алфавитный указатель" href="../../genindex.html" />
<link rel="search" title="Поиск" href="../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../index.html" class="icon icon-home">
e-nms-qa-automation
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
<input type="text" name="q" placeholder="Поиск в документации" aria-label="Поиск в документации" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Меню навигации">
<p class="caption" role="heading"><span class="caption-text">Содержание:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../sphinx_guide.html">Sphinx Руководство</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id2">Расположение документа</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id3">Преимущества Sphinx</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id4">Подготовка зависимостей</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id5">Инициализация Sphinx</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id6">Настройка конфигурации</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id7">Конвертация контента</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#markdown-restructuredtext">Markdown → reStructuredText</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#id8">Таблицы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id9">Автогенерация документации из кода</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id10">Настройка главной страницы</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id11">Сборка и деплой</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id12">Полезные команды</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id13">Особенности Sphinx</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#docstrings">Поддержка docstrings</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#id14">Кастомные директивы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id15">Решение проблем</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#id16">Проблема: Модули не находятся</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#id17">Проблема: Не генерируются docstrings</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#id18">Проблема: Тема не применяется</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id19">Дополнительные возможности</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">e-nms_qa_automation</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../../components.html">components package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.alert_component">components.alert_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.alert_component.AlertComponent"><code class="docutils literal notranslate"><span class="pre">AlertComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.base_component">components.base_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.base_component.BaseComponent"><code class="docutils literal notranslate"><span class="pre">BaseComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.card_component">components.card_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.card_component.CardComponent"><code class="docutils literal notranslate"><span class="pre">CardComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.confirm_component">components.confirm_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.confirm_component.ConfirmComponent"><code class="docutils literal notranslate"><span class="pre">ConfirmComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.date_picker_component">components.date_picker_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.date_picker_component.DatePickerComponent"><code class="docutils literal notranslate"><span class="pre">DatePickerComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.dropdown_list_component">components.dropdown_list_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.dropdown_list_component.DropdownList"><code class="docutils literal notranslate"><span class="pre">DropdownList</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.eventbar_component">components.eventbar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.eventbar_component.EventPanelComponent"><code class="docutils literal notranslate"><span class="pre">EventPanelComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.events_container_component">components.events_container_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.events_container_component.EventsContainerComponent"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.json_container_component">components.json_container_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.json_container_component.JsonContainerComponent"><code class="docutils literal notranslate"><span class="pre">JsonContainerComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.modal_window_component">components.modal_window_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.modal_window_component.ModalWindowComponent"><code class="docutils literal notranslate"><span class="pre">ModalWindowComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.navbar_component">components.navbar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.navbar_component.NavigationPanelComponent"><code class="docutils literal notranslate"><span class="pre">NavigationPanelComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.table_component">components.table_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.table_component.TableComponent"><code class="docutils literal notranslate"><span class="pre">TableComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.toolbar_component">components.toolbar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.toolbar_component.ToolbarComponent"><code class="docutils literal notranslate"><span class="pre">ToolbarComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../components_derived.html">components_derived package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived.container_system_log_events">components_derived.container_system_log_events module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components_derived.html#components_derived.container_system_log_events.SystemLogEventsContainer"><code class="docutils literal notranslate"><span class="pre">SystemLogEventsContainer</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived.date_input_component">components_derived.date_input_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components_derived.html#components_derived.date_input_component.DateInput"><code class="docutils literal notranslate"><span class="pre">DateInput</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived.interactive_dropdown_list">components_derived.interactive_dropdown_list module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components_derived.html#components_derived.interactive_dropdown_list.InteractiveDropdownList"><code class="docutils literal notranslate"><span class="pre">InteractiveDropdownList</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived.modal_add_AD_user">components_derived.modal_add_AD_user module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components_derived.html#components_derived.modal_add_AD_user.AddADUserModalWindow"><code class="docutils literal notranslate"><span class="pre">AddADUserModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived.modal_add_local_user">components_derived.modal_add_local_user module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components_derived.html#components_derived.modal_add_local_user.AddLocalUserModalWindow"><code class="docutils literal notranslate"><span class="pre">AddLocalUserModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived.modal_change_password">components_derived.modal_change_password module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components_derived.html#components_derived.modal_change_password.ChangePasswordModalWindow"><code class="docutils literal notranslate"><span class="pre">ChangePasswordModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived.modal_edit_user">components_derived.modal_edit_user module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components_derived.html#components_derived.modal_edit_user.EditUserModalWindow"><code class="docutils literal notranslate"><span class="pre">EditUserModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived.modal_view_template">components_derived.modal_view_template module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components_derived.html#components_derived.modal_view_template.ViewTemplateModalWindow"><code class="docutils literal notranslate"><span class="pre">ViewTemplateModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived.modal_view_ztp_template">components_derived.modal_view_ztp_template module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components_derived.html#components_derived.modal_view_ztp_template.ViewZTPTemplateModalWindow"><code class="docutils literal notranslate"><span class="pre">ViewZTPTemplateModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived.selection_bar_component">components_derived.selection_bar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components_derived.html#components_derived.selection_bar_component.SelectionBarComponent"><code class="docutils literal notranslate"><span class="pre">SelectionBarComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived.settings_form_component">components_derived.settings_form_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components_derived.html#components_derived.settings_form_component.SettingsFormComponent"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived.sidebar_filter_component">components_derived.sidebar_filter_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components_derived.html#components_derived.sidebar_filter_component.SidebarFilterComponent"><code class="docutils literal notranslate"><span class="pre">SidebarFilterComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived.user_card">components_derived.user_card module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components_derived.html#components_derived.user_card.UserCard"><code class="docutils literal notranslate"><span class="pre">UserCard</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../conftest.html">conftest module</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../conftest.html#conftest.pytest_sessionfinish"><code class="docutils literal notranslate"><span class="pre">pytest_sessionfinish()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../conftest.html#conftest.pytest_addoption"><code class="docutils literal notranslate"><span class="pre">pytest_addoption()</span></code></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../data.html">data package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../data.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../data.html#module-data.constants">data.constants module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../data.html#data.constants.Constants"><code class="docutils literal notranslate"><span class="pre">Constants</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../data.html#module-data.environment">data.environment module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../data.html#data.environment.Environment"><code class="docutils literal notranslate"><span class="pre">Environment</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../data.html#module-data.roles_dict">data.roles_dict module</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../data.html#module-data">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../elements.html">elements package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../elements.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../elements.html#module-elements.base_element">elements.base_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../elements.html#elements.base_element.BaseElement"><code class="docutils literal notranslate"><span class="pre">BaseElement</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../elements.html#module-elements.button_element">elements.button_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../elements.html#elements.button_element.Button"><code class="docutils literal notranslate"><span class="pre">Button</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../elements.html#module-elements.checkbox_element">elements.checkbox_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../elements.html#elements.checkbox_element.Checkbox"><code class="docutils literal notranslate"><span class="pre">Checkbox</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../elements.html#module-elements.icon_element">elements.icon_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../elements.html#elements.icon_element.Icon"><code class="docutils literal notranslate"><span class="pre">Icon</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../elements.html#module-elements.tab_button_element">elements.tab_button_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../elements.html#elements.tab_button_element.TabButton"><code class="docutils literal notranslate"><span class="pre">TabButton</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../elements.html#module-elements.text_element">elements.text_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../elements.html#elements.text_element.Text"><code class="docutils literal notranslate"><span class="pre">Text</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../elements.html#module-elements.text_input_element">elements.text_input_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../elements.html#elements.text_input_element.TextInput"><code class="docutils literal notranslate"><span class="pre">TextInput</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../elements.html#module-elements.tooltip_button_element">elements.tooltip_button_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../elements.html#elements.tooltip_button_element.TooltipButton"><code class="docutils literal notranslate"><span class="pre">TooltipButton</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../elements.html#module-elements">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../fixtures.html">fixtures package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../fixtures.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../fixtures.html#module-fixtures.pages">fixtures.pages module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../fixtures.html#fixtures.pages.pytest_addoption"><code class="docutils literal notranslate"><span class="pre">pytest_addoption()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="../../fixtures.html#fixtures.pages.browser"><code class="docutils literal notranslate"><span class="pre">browser()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="../../fixtures.html#fixtures.pages.get_firefox_browser"><code class="docutils literal notranslate"><span class="pre">get_firefox_browser()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="../../fixtures.html#fixtures.pages.get_chrome_browser"><code class="docutils literal notranslate"><span class="pre">get_chrome_browser()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="../../fixtures.html#fixtures.pages.get_remote_chrome"><code class="docutils literal notranslate"><span class="pre">get_remote_chrome()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="../../fixtures.html#fixtures.pages.get_context"><code class="docutils literal notranslate"><span class="pre">get_context()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="../../fixtures.html#fixtures.pages.return_back"><code class="docutils literal notranslate"><span class="pre">return_back()</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../fixtures.html#module-fixtures">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../pages.html">pages package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#module-pages.base_page">pages.base_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../pages.html#pages.base_page.BasePage"><code class="docutils literal notranslate"><span class="pre">BasePage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#module-pages.current_session_tab">pages.current_session_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../pages.html#pages.current_session_tab.CurrentSessionsTab"><code class="docutils literal notranslate"><span class="pre">CurrentSessionsTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#module-pages.license_tab">pages.license_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../pages.html#pages.license_tab.LicenseTab"><code class="docutils literal notranslate"><span class="pre">LicenseTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#module-pages.login_page">pages.login_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../pages.html#pages.login_page.LoginPage"><code class="docutils literal notranslate"><span class="pre">LoginPage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#module-pages.main_page">pages.main_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../pages.html#pages.main_page.MainPage"><code class="docutils literal notranslate"><span class="pre">MainPage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#module-pages.push_notifications_settings_tab">pages.push_notifications_settings_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab"><code class="docutils literal notranslate"><span class="pre">PushNotificationsSettingsTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#module-pages.service_status_tab">pages.service_status_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../pages.html#pages.service_status_tab.ServiceStatusTab"><code class="docutils literal notranslate"><span class="pre">ServiceStatusTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#module-pages.session_settings_tab">pages.session_settings_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../pages.html#pages.session_settings_tab.SessionSettingsTab"><code class="docutils literal notranslate"><span class="pre">SessionSettingsTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#module-pages.templates_tab">pages.templates_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../pages.html#pages.templates_tab.TemplatesTab"><code class="docutils literal notranslate"><span class="pre">TemplatesTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#module-pages.users_tab">pages.users_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../pages.html#pages.users_tab.UsersTab"><code class="docutils literal notranslate"><span class="pre">UsersTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#module-pages.ztp_config_tab">pages.ztp_config_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../pages.html#pages.ztp_config_tab.ZTPConfigTab"><code class="docutils literal notranslate"><span class="pre">ZTPConfigTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#module-pages.ztp_templates_tab">pages.ztp_templates_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../pages.html#pages.ztp_templates_tab.ZTPTemplatesTab"><code class="docutils literal notranslate"><span class="pre">ZTPTemplatesTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#module-pages">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../tools.html">tools package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../tools.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../tools.html#module-tools.fix_python_project">tools.fix_python_project module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../tools.html#tools.fix_python_project.ProjectFixer"><code class="docutils literal notranslate"><span class="pre">ProjectFixer</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../tools.html#module-tools.logger">tools.logger module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../tools.html#tools.logger.get_logger"><code class="docutils literal notranslate"><span class="pre">get_logger()</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../tools.html#module-tools">Module contents</a></li>
</ul>
</li>
</ul>
</li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Разработка и документация:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../sphinx_guide.html">Sphinx Руководство</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id2">Расположение документа</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id3">Преимущества Sphinx</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id4">Подготовка зависимостей</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id5">Инициализация Sphinx</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id6">Настройка конфигурации</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id7">Конвертация контента</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#markdown-restructuredtext">Markdown → reStructuredText</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#id8">Таблицы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id9">Автогенерация документации из кода</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id10">Настройка главной страницы</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id11">Сборка и деплой</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id12">Полезные команды</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id13">Особенности Sphinx</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#docstrings">Поддержка docstrings</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#id14">Кастомные директивы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id15">Решение проблем</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#id16">Проблема: Модули не находятся</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#id17">Проблема: Не генерируются docstrings</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#id18">Проблема: Тема не применяется</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id19">Дополнительные возможности</a></li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Меню навигации для мобильных устройств" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../index.html">e-nms-qa-automation</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Навигация по страницам">
<ul class="wy-breadcrumbs">
<li><a href="../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="../index.html">Код модуля</a></li>
<li class="breadcrumb-item active">components_derived.settings_form_component</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>Исходный код components_derived.settings_form_component</h1><div class="highlight"><pre>
<span></span><span class="sd">&quot;&quot;&quot;Модуль компонента формы ввода и отображения полей настроек. Содержит класс для работы с формами ввода</span>
<span class="sd">и отображения полей настроек,их элементами и проверками.&quot;&quot;&quot;</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">playwright.sync_api</span><span class="w"> </span><span class="kn">import</span> <span class="n">Page</span><span class="p">,</span> <span class="n">Locator</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">tools.logger</span><span class="w"> </span><span class="kn">import</span> <span class="n">get_logger</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">locators.settings_form_locators</span><span class="w"> </span><span class="kn">import</span> <span class="n">SettingsFormLocators</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">elements.tooltip_button_element</span><span class="w"> </span><span class="kn">import</span> <span class="n">TooltipButton</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">elements.button_element</span><span class="w"> </span><span class="kn">import</span> <span class="n">Button</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">components.toolbar_component</span><span class="w"> </span><span class="kn">import</span> <span class="n">ToolbarComponent</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">components.base_component</span><span class="w"> </span><span class="kn">import</span> <span class="n">BaseComponent</span>
<span class="n">logger</span> <span class="o">=</span> <span class="n">get_logger</span><span class="p">(</span><span class="s2">&quot;SETTINGS_FORM&quot;</span><span class="p">)</span>
<div class="viewcode-block" id="SettingsFormComponent">
<a class="viewcode-back" href="../../components_derived.html#components_derived.settings_form_component.SettingsFormComponent">[документация]</a>
<span class="k">class</span><span class="w"> </span><span class="nc">SettingsFormComponent</span><span class="p">(</span><span class="n">BaseComponent</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Компонент формы ввода и отображения полей настроек. Предоставляет методы для взаимодействия с формой,</span>
<span class="sd"> ее содержимым и проверок.&quot;&quot;&quot;</span>
<div class="viewcode-block" id="SettingsFormComponent.__init__">
<a class="viewcode-back" href="../../components_derived.html#components_derived.settings_form_component.SettingsFormComponent.__init__">[документация]</a>
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">page</span><span class="p">:</span> <span class="n">Page</span><span class="p">):</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">page</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">toolbar</span> <span class="o">=</span> <span class="n">ToolbarComponent</span><span class="p">(</span><span class="n">page</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">content_items</span> <span class="o">=</span> <span class="p">{}</span>
<span class="bp">self</span><span class="o">.</span><span class="n">buttons</span> <span class="o">=</span> <span class="p">[]</span></div>
<span class="c1"># Действия:</span>
<div class="viewcode-block" id="SettingsFormComponent.add_content_item">
<a class="viewcode-back" href="../../components_derived.html#components_derived.settings_form_component.SettingsFormComponent.add_content_item">[документация]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">add_content_item</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">item</span><span class="p">:</span> <span class="nb">object</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Добавляет элемент содержимого в форму по заданному имени.&quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">content_items</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">item</span></div>
<div class="viewcode-block" id="SettingsFormComponent.get_content_item">
<a class="viewcode-back" href="../../components_derived.html#components_derived.settings_form_component.SettingsFormComponent.get_content_item">[документация]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">get_content_item</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">object</span> <span class="o">|</span> <span class="kc">None</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Возвращает элемент содержимого по имени или None, если не найден.&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">content_items</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">name</span><span class="p">)</span></div>
<div class="viewcode-block" id="SettingsFormComponent.add_toolbar_title">
<a class="viewcode-back" href="../../components_derived.html#components_derived.settings_form_component.SettingsFormComponent.add_toolbar_title">[документация]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">add_toolbar_title</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">title</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Добавляет заголовок в панель инструментов модального окна.&quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">toolbar</span><span class="o">.</span><span class="n">add_title</span><span class="p">(</span><span class="n">title</span><span class="p">)</span></div>
<div class="viewcode-block" id="SettingsFormComponent.add_button">
<a class="viewcode-back" href="../../components_derived.html#components_derived.settings_form_component.SettingsFormComponent.add_button">[документация]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">add_button</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">locator</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Добавляет кнопку в форму.&quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">buttons</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">Button</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">page</span><span class="p">,</span> <span class="n">locator</span><span class="p">,</span> <span class="n">name</span><span class="p">))</span></div>
<div class="viewcode-block" id="SettingsFormComponent.add_tooltip_button">
<a class="viewcode-back" href="../../components_derived.html#components_derived.settings_form_component.SettingsFormComponent.add_tooltip_button">[документация]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">add_tooltip_button</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">locator</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Добавляет кнопку в форму.&quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">buttons</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">TooltipButton</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">page</span><span class="p">,</span> <span class="n">locator</span><span class="p">,</span> <span class="n">name</span><span class="p">))</span></div>
<div class="viewcode-block" id="SettingsFormComponent.get_button_by_name">
<a class="viewcode-back" href="../../components_derived.html#components_derived.settings_form_component.SettingsFormComponent.get_button_by_name">[документация]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">get_button_by_name</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Button</span> <span class="o">|</span> <span class="n">TooltipButton</span> <span class="o">|</span> <span class="kc">None</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Ищет и возвращает кнопку по имени или None, если не найдена.&quot;&quot;&quot;</span>
<span class="k">for</span> <span class="n">button</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">buttons</span><span class="p">:</span>
<span class="k">if</span> <span class="n">button</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="n">name</span><span class="p">:</span>
<span class="k">return</span> <span class="n">button</span>
<span class="k">return</span> <span class="kc">None</span></div>
<div class="viewcode-block" id="SettingsFormComponent.click_button">
<a class="viewcode-back" href="../../components_derived.html#components_derived.settings_form_component.SettingsFormComponent.click_button">[документация]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">click_button</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Кликает по кнопке с заданным именем. Вызывает ошибку, если не найдена.&quot;&quot;&quot;</span>
<span class="n">button</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_button_by_name</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
<span class="k">if</span> <span class="n">button</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">assert</span> <span class="kc">False</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;Button with name &#39;</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">&#39; not found&quot;</span>
<span class="n">button</span><span class="o">.</span><span class="n">click</span><span class="p">()</span></div>
<span class="c1"># Проверки:</span>
<div class="viewcode-block" id="SettingsFormComponent.check_vertical_scrolling">
<a class="viewcode-back" href="../../components_derived.html#components_derived.settings_form_component.SettingsFormComponent.check_vertical_scrolling">[документация]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">check_vertical_scrolling</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">locator</span><span class="p">:</span> <span class="nb">str</span><span class="o">|</span> <span class="n">Locator</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Проверяет возможность вертикальной прокрутки формы.&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_scrollable_vertically</span><span class="p">(</span><span class="n">locator</span><span class="p">)</span></div>
<div class="viewcode-block" id="SettingsFormComponent.check_button_tooltip">
<a class="viewcode-back" href="../../components_derived.html#components_derived.settings_form_component.SettingsFormComponent.check_button_tooltip">[документация]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">check_button_tooltip</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">tooltip</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Проверяет текст подсказки кнопки. &quot;&quot;&quot;</span>
<span class="n">button</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_button_by_name</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
<span class="k">if</span> <span class="n">button</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">AssertionError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported button name </span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="n">button</span><span class="o">.</span><span class="n">check_tooltip_with_text</span><span class="p">(</span><span class="n">tooltip</span><span class="p">)</span></div>
<div class="viewcode-block" id="SettingsFormComponent.check_button_visibility">
<a class="viewcode-back" href="../../components_derived.html#components_derived.settings_form_component.SettingsFormComponent.check_button_visibility">[документация]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">check_button_visibility</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Проверяет наличие кнопки по имени. Вызывает ошибку, если не найдена.&quot;&quot;&quot;</span>
<span class="n">button</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_button_by_name</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
<span class="k">if</span> <span class="n">button</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">assert</span> <span class="kc">False</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;Button with name &#39;</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">&#39; not found&quot;</span>
<span class="n">button</span><span class="o">.</span><span class="n">check_visibility</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Button with name &#39;</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">&#39; is missing&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="SettingsFormComponent.should_be_toolbar">
<a class="viewcode-back" href="../../components_derived.html#components_derived.settings_form_component.SettingsFormComponent.should_be_toolbar">[документация]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">should_be_toolbar</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Проверяет наличие тулбара.</span>
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: Если тулбар или кнопка редактирования отсутствуют.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">toolbar</span><span class="o">.</span><span class="n">check_toolbar_presence_by_locator_and_title</span><span class="p">(</span><span class="n">SettingsFormLocators</span><span class="o">.</span><span class="n">SETTTINGS_FORM_SCROLL_CONTAINER</span><span class="p">,</span>
<span class="s2">&quot;Session settings form toolbar is missing&quot;</span><span class="p">)</span></div>
</div>
</pre></div>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; Авторские права 2025, NPO KIS. </p>
</div>
Собрано при помощи <a href="https://www.sphinx-doc.org/">Sphinx</a> с использованием
<a href="https://github.com/readthedocs/sphinx_rtd_theme">темы,</a>
предоставленной <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

View File

@ -89,10 +89,6 @@
<li class="toctree-l4"><a class="reference internal" href="../components.html#components.navbar_component.NavigationPanelComponent"><code class="docutils literal notranslate"><span class="pre">NavigationPanelComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../components.html#module-components.settings_form_component">components.settings_form_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../components.html#components.settings_form_component.SettingsFormComponent"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../components.html#module-components.table_component">components.table_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../components.html#components.table_component.TableComponent"><code class="docutils literal notranslate"><span class="pre">TableComponent</span></code></a></li>
</ul>
@ -114,6 +110,10 @@
<li class="toctree-l4"><a class="reference internal" href="../components_derived.html#components_derived.date_input_component.DateInput"><code class="docutils literal notranslate"><span class="pre">DateInput</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../components_derived.html#module-components_derived.interactive_dropdown_list">components_derived.interactive_dropdown_list module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../components_derived.html#components_derived.interactive_dropdown_list.InteractiveDropdownList"><code class="docutils literal notranslate"><span class="pre">InteractiveDropdownList</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../components_derived.html#module-components_derived.modal_add_AD_user">components_derived.modal_add_AD_user module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../components_derived.html#components_derived.modal_add_AD_user.AddADUserModalWindow"><code class="docutils literal notranslate"><span class="pre">AddADUserModalWindow</span></code></a></li>
</ul>
@ -142,6 +142,10 @@
<li class="toctree-l4"><a class="reference internal" href="../components_derived.html#components_derived.selection_bar_component.SelectionBarComponent"><code class="docutils literal notranslate"><span class="pre">SelectionBarComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../components_derived.html#module-components_derived.settings_form_component">components_derived.settings_form_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../components_derived.html#components_derived.settings_form_component.SettingsFormComponent"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../components_derived.html#module-components_derived.sidebar_filter_component">components_derived.sidebar_filter_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../components_derived.html#components_derived.sidebar_filter_component.SidebarFilterComponent"><code class="docutils literal notranslate"><span class="pre">SidebarFilterComponent</span></code></a></li>
</ul>
@ -238,10 +242,6 @@
<li class="toctree-l4"><a class="reference internal" href="../pages.html#pages.license_tab.LicenseTab"><code class="docutils literal notranslate"><span class="pre">LicenseTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../pages.html#module-pages.location_page">pages.location_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../pages.html#pages.location_page.LocationPage"><code class="docutils literal notranslate"><span class="pre">LocationPage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../pages.html#module-pages.login_page">pages.login_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../pages.html#pages.login_page.LoginPage"><code class="docutils literal notranslate"><span class="pre">LoginPage</span></code></a></li>
</ul>
@ -250,6 +250,10 @@
<li class="toctree-l4"><a class="reference internal" href="../pages.html#pages.main_page.MainPage"><code class="docutils literal notranslate"><span class="pre">MainPage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../pages.html#module-pages.push_notifications_settings_tab">pages.push_notifications_settings_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab"><code class="docutils literal notranslate"><span class="pre">PushNotificationsSettingsTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../pages.html#module-pages.service_status_tab">pages.service_status_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../pages.html#pages.service_status_tab.ServiceStatusTab"><code class="docutils literal notranslate"><span class="pre">ServiceStatusTab</span></code></a></li>
</ul>
@ -292,6 +296,60 @@
</li>
</ul>
</li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Документация и руководства:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../sphinx_guide.html">Руководство по документации тестов с помощью Sphinx</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../sphinx_guide.html#id2">1 Расположение документа</a></li>
<li class="toctree-l2"><a class="reference internal" href="../sphinx_guide.html#id3">2 Первичная настройка для нового проекта</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../sphinx_guide.html#id4">2.1 Подготовка зависимостей</a></li>
<li class="toctree-l3"><a class="reference internal" href="../sphinx_guide.html#id5">2.2 Инициализация Sphinx</a></li>
<li class="toctree-l3"><a class="reference internal" href="../sphinx_guide.html#id6">2.3 Настройка конфигурации</a></li>
<li class="toctree-l3"><a class="reference internal" href="../sphinx_guide.html#id7">2.4 Настройка главной страницы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../sphinx_guide.html#id8">3 Работа с существующим проектом</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../sphinx_guide.html#id9">3.1 Установка зависимостей</a></li>
<li class="toctree-l3"><a class="reference internal" href="../sphinx_guide.html#id10">3.2 Генерация документации</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../sphinx_guide.html#id11">3.2.1 Базовая генерация</a></li>
<li class="toctree-l4"><a class="reference internal" href="../sphinx_guide.html#id12">3.2.2 Генерация с исключениями</a></li>
<li class="toctree-l4"><a class="reference internal" href="../sphinx_guide.html#id13">3.2.3 Принудительная перегенерация</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../sphinx_guide.html#id14">3.3 Очистка документации</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../sphinx_guide.html#id15">3.3.1 Команды очистки</a></li>
<li class="toctree-l4"><a class="reference internal" href="../sphinx_guide.html#id16">3.3.2 Автоматизация очистки</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../sphinx_guide.html#id17">3.4 Сборка и деплой</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../sphinx_guide.html#id18">3.4.1 Локальная сборка</a></li>
<li class="toctree-l4"><a class="reference internal" href="../sphinx_guide.html#id19">3.4.2 Проверка качества</a></li>
<li class="toctree-l4"><a class="reference internal" href="../sphinx_guide.html#id20">3.4.3 Сборка для публикации</a></li>
<li class="toctree-l4"><a class="reference internal" href="../sphinx_guide.html#ci-cd">3.4.4 Настройка для CI/CD</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../sphinx_guide.html#mkdocs-sphinx">4 Конвертация контента из MkDocs в Sphinx</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../sphinx_guide.html#id21">4.1 Текст</a></li>
<li class="toctree-l3"><a class="reference internal" href="../sphinx_guide.html#id22">4.2 Таблицы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../sphinx_guide.html#id23">5 Особенности Sphinx</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../sphinx_guide.html#docstrings">5.1 Поддержка docstrings</a></li>
<li class="toctree-l3"><a class="reference internal" href="../sphinx_guide.html#id24">5.2 Кастомные директивы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../sphinx_guide.html#id25">6 Решение проблем</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../sphinx_guide.html#id26">6.1 Проблема: Модули не находятся</a></li>
<li class="toctree-l3"><a class="reference internal" href="../sphinx_guide.html#id27">6.2 Проблема: Не генерируются docstrings</a></li>
<li class="toctree-l3"><a class="reference internal" href="../sphinx_guide.html#id28">6.3 Проблема: Тема не применяется</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../sphinx_guide.html#id29">7 Дополнительные возможности</a></li>
<li class="toctree-l2"><a class="reference internal" href="../sphinx_guide.html#version-history">История версий</a></li>
</ul>
</li>
</ul>
</div>
@ -329,11 +387,11 @@
<li><a href="components/json_container_component.html">components.json_container_component</a></li>
<li><a href="components/modal_window_component.html">components.modal_window_component</a></li>
<li><a href="components/navbar_component.html">components.navbar_component</a></li>
<li><a href="components/settings_form_component.html">components.settings_form_component</a></li>
<li><a href="components/table_component.html">components.table_component</a></li>
<li><a href="components/toolbar_component.html">components.toolbar_component</a></li>
<li><a href="components_derived/container_system_log_events.html">components_derived.container_system_log_events</a></li>
<li><a href="components_derived/date_input_component.html">components_derived.date_input_component</a></li>
<li><a href="components_derived/interactive_dropdown_list.html">components_derived.interactive_dropdown_list</a></li>
<li><a href="components_derived/modal_add_AD_user.html">components_derived.modal_add_AD_user</a></li>
<li><a href="components_derived/modal_add_local_user.html">components_derived.modal_add_local_user</a></li>
<li><a href="components_derived/modal_change_password.html">components_derived.modal_change_password</a></li>
@ -341,6 +399,7 @@
<li><a href="components_derived/modal_view_template.html">components_derived.modal_view_template</a></li>
<li><a href="components_derived/modal_view_ztp_template.html">components_derived.modal_view_ztp_template</a></li>
<li><a href="components_derived/selection_bar_component.html">components_derived.selection_bar_component</a></li>
<li><a href="components_derived/settings_form_component.html">components_derived.settings_form_component</a></li>
<li><a href="components_derived/sidebar_filter_component.html">components_derived.sidebar_filter_component</a></li>
<li><a href="components_derived/user_card.html">components_derived.user_card</a></li>
<li><a href="conftest.html">conftest</a></li>
@ -358,9 +417,9 @@
<li><a href="pages/base_page.html">pages.base_page</a></li>
<li><a href="pages/current_session_tab.html">pages.current_session_tab</a></li>
<li><a href="pages/license_tab.html">pages.license_tab</a></li>
<li><a href="pages/location_page.html">pages.location_page</a></li>
<li><a href="pages/login_page.html">pages.login_page</a></li>
<li><a href="pages/main_page.html">pages.main_page</a></li>
<li><a href="pages/push_notifications_settings_tab.html">pages.push_notifications_settings_tab</a></li>
<li><a href="pages/service_status_tab.html">pages.service_status_tab</a></li>
<li><a href="pages/session_settings_tab.html">pages.session_settings_tab</a></li>
<li><a href="pages/templates_tab.html">pages.templates_tab</a></li>

View File

@ -0,0 +1,650 @@
<!DOCTYPE html>
<html class="writer-html5" lang="ru" data-content_root="../../">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>pages.push_notifications_settings_tab &mdash; документация e-nms-qa-automation 0.1.0</title>
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../../_static/css/theme.css?v=e59714d7" />
<script src="../../_static/jquery.js?v=5d32c60e"></script>
<script src="../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../../_static/documentation_options.js?v=6ff560e8"></script>
<script src="../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../_static/translations.js?v=cd1d70c9"></script>
<script src="../../_static/js/theme.js"></script>
<link rel="index" title="Алфавитный указатель" href="../../genindex.html" />
<link rel="search" title="Поиск" href="../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../index.html" class="icon icon-home">
e-nms-qa-automation
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
<input type="text" name="q" placeholder="Поиск в документации" aria-label="Поиск в документации" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Меню навигации">
<p class="caption" role="heading"><span class="caption-text">Содержание:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../sphinx_guide.html">Sphinx Руководство</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id2">Расположение документа</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id3">Преимущества Sphinx</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id4">Подготовка зависимостей</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id5">Инициализация Sphinx</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id6">Настройка конфигурации</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id7">Конвертация контента</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#markdown-restructuredtext">Markdown → reStructuredText</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#id8">Таблицы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id9">Автогенерация документации из кода</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id10">Настройка главной страницы</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id11">Сборка и деплой</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id12">Полезные команды</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id13">Особенности Sphinx</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#docstrings">Поддержка docstrings</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#id14">Кастомные директивы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id15">Решение проблем</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#id16">Проблема: Модули не находятся</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#id17">Проблема: Не генерируются docstrings</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#id18">Проблема: Тема не применяется</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id19">Дополнительные возможности</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">e-nms_qa_automation</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../../components.html">components package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.alert_component">components.alert_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.alert_component.AlertComponent"><code class="docutils literal notranslate"><span class="pre">AlertComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.base_component">components.base_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.base_component.BaseComponent"><code class="docutils literal notranslate"><span class="pre">BaseComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.card_component">components.card_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.card_component.CardComponent"><code class="docutils literal notranslate"><span class="pre">CardComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.confirm_component">components.confirm_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.confirm_component.ConfirmComponent"><code class="docutils literal notranslate"><span class="pre">ConfirmComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.date_picker_component">components.date_picker_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.date_picker_component.DatePickerComponent"><code class="docutils literal notranslate"><span class="pre">DatePickerComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.dropdown_list_component">components.dropdown_list_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.dropdown_list_component.DropdownList"><code class="docutils literal notranslate"><span class="pre">DropdownList</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.eventbar_component">components.eventbar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.eventbar_component.EventPanelComponent"><code class="docutils literal notranslate"><span class="pre">EventPanelComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.events_container_component">components.events_container_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.events_container_component.EventsContainerComponent"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.json_container_component">components.json_container_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.json_container_component.JsonContainerComponent"><code class="docutils literal notranslate"><span class="pre">JsonContainerComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.modal_window_component">components.modal_window_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.modal_window_component.ModalWindowComponent"><code class="docutils literal notranslate"><span class="pre">ModalWindowComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.navbar_component">components.navbar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.navbar_component.NavigationPanelComponent"><code class="docutils literal notranslate"><span class="pre">NavigationPanelComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.table_component">components.table_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.table_component.TableComponent"><code class="docutils literal notranslate"><span class="pre">TableComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.toolbar_component">components.toolbar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.toolbar_component.ToolbarComponent"><code class="docutils literal notranslate"><span class="pre">ToolbarComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../components_derived.html">components_derived package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived.container_system_log_events">components_derived.container_system_log_events module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components_derived.html#components_derived.container_system_log_events.SystemLogEventsContainer"><code class="docutils literal notranslate"><span class="pre">SystemLogEventsContainer</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived.date_input_component">components_derived.date_input_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components_derived.html#components_derived.date_input_component.DateInput"><code class="docutils literal notranslate"><span class="pre">DateInput</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived.interactive_dropdown_list">components_derived.interactive_dropdown_list module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components_derived.html#components_derived.interactive_dropdown_list.InteractiveDropdownList"><code class="docutils literal notranslate"><span class="pre">InteractiveDropdownList</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived.modal_add_AD_user">components_derived.modal_add_AD_user module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components_derived.html#components_derived.modal_add_AD_user.AddADUserModalWindow"><code class="docutils literal notranslate"><span class="pre">AddADUserModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived.modal_add_local_user">components_derived.modal_add_local_user module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components_derived.html#components_derived.modal_add_local_user.AddLocalUserModalWindow"><code class="docutils literal notranslate"><span class="pre">AddLocalUserModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived.modal_change_password">components_derived.modal_change_password module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components_derived.html#components_derived.modal_change_password.ChangePasswordModalWindow"><code class="docutils literal notranslate"><span class="pre">ChangePasswordModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived.modal_edit_user">components_derived.modal_edit_user module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components_derived.html#components_derived.modal_edit_user.EditUserModalWindow"><code class="docutils literal notranslate"><span class="pre">EditUserModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived.modal_view_template">components_derived.modal_view_template module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components_derived.html#components_derived.modal_view_template.ViewTemplateModalWindow"><code class="docutils literal notranslate"><span class="pre">ViewTemplateModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived.modal_view_ztp_template">components_derived.modal_view_ztp_template module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components_derived.html#components_derived.modal_view_ztp_template.ViewZTPTemplateModalWindow"><code class="docutils literal notranslate"><span class="pre">ViewZTPTemplateModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived.selection_bar_component">components_derived.selection_bar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components_derived.html#components_derived.selection_bar_component.SelectionBarComponent"><code class="docutils literal notranslate"><span class="pre">SelectionBarComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived.settings_form_component">components_derived.settings_form_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components_derived.html#components_derived.settings_form_component.SettingsFormComponent"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived.sidebar_filter_component">components_derived.sidebar_filter_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components_derived.html#components_derived.sidebar_filter_component.SidebarFilterComponent"><code class="docutils literal notranslate"><span class="pre">SidebarFilterComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived.user_card">components_derived.user_card module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components_derived.html#components_derived.user_card.UserCard"><code class="docutils literal notranslate"><span class="pre">UserCard</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../conftest.html">conftest module</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../conftest.html#conftest.pytest_sessionfinish"><code class="docutils literal notranslate"><span class="pre">pytest_sessionfinish()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../conftest.html#conftest.pytest_addoption"><code class="docutils literal notranslate"><span class="pre">pytest_addoption()</span></code></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../data.html">data package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../data.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../data.html#module-data.constants">data.constants module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../data.html#data.constants.Constants"><code class="docutils literal notranslate"><span class="pre">Constants</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../data.html#module-data.environment">data.environment module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../data.html#data.environment.Environment"><code class="docutils literal notranslate"><span class="pre">Environment</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../data.html#module-data.roles_dict">data.roles_dict module</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../data.html#module-data">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../elements.html">elements package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../elements.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../elements.html#module-elements.base_element">elements.base_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../elements.html#elements.base_element.BaseElement"><code class="docutils literal notranslate"><span class="pre">BaseElement</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../elements.html#module-elements.button_element">elements.button_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../elements.html#elements.button_element.Button"><code class="docutils literal notranslate"><span class="pre">Button</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../elements.html#module-elements.checkbox_element">elements.checkbox_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../elements.html#elements.checkbox_element.Checkbox"><code class="docutils literal notranslate"><span class="pre">Checkbox</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../elements.html#module-elements.icon_element">elements.icon_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../elements.html#elements.icon_element.Icon"><code class="docutils literal notranslate"><span class="pre">Icon</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../elements.html#module-elements.tab_button_element">elements.tab_button_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../elements.html#elements.tab_button_element.TabButton"><code class="docutils literal notranslate"><span class="pre">TabButton</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../elements.html#module-elements.text_element">elements.text_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../elements.html#elements.text_element.Text"><code class="docutils literal notranslate"><span class="pre">Text</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../elements.html#module-elements.text_input_element">elements.text_input_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../elements.html#elements.text_input_element.TextInput"><code class="docutils literal notranslate"><span class="pre">TextInput</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../elements.html#module-elements.tooltip_button_element">elements.tooltip_button_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../elements.html#elements.tooltip_button_element.TooltipButton"><code class="docutils literal notranslate"><span class="pre">TooltipButton</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../elements.html#module-elements">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../fixtures.html">fixtures package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../fixtures.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../fixtures.html#module-fixtures.pages">fixtures.pages module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../fixtures.html#fixtures.pages.pytest_addoption"><code class="docutils literal notranslate"><span class="pre">pytest_addoption()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="../../fixtures.html#fixtures.pages.browser"><code class="docutils literal notranslate"><span class="pre">browser()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="../../fixtures.html#fixtures.pages.get_firefox_browser"><code class="docutils literal notranslate"><span class="pre">get_firefox_browser()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="../../fixtures.html#fixtures.pages.get_chrome_browser"><code class="docutils literal notranslate"><span class="pre">get_chrome_browser()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="../../fixtures.html#fixtures.pages.get_remote_chrome"><code class="docutils literal notranslate"><span class="pre">get_remote_chrome()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="../../fixtures.html#fixtures.pages.get_context"><code class="docutils literal notranslate"><span class="pre">get_context()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="../../fixtures.html#fixtures.pages.return_back"><code class="docutils literal notranslate"><span class="pre">return_back()</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../fixtures.html#module-fixtures">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../pages.html">pages package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#module-pages.base_page">pages.base_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../pages.html#pages.base_page.BasePage"><code class="docutils literal notranslate"><span class="pre">BasePage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#module-pages.current_session_tab">pages.current_session_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../pages.html#pages.current_session_tab.CurrentSessionsTab"><code class="docutils literal notranslate"><span class="pre">CurrentSessionsTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#module-pages.license_tab">pages.license_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../pages.html#pages.license_tab.LicenseTab"><code class="docutils literal notranslate"><span class="pre">LicenseTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#module-pages.login_page">pages.login_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../pages.html#pages.login_page.LoginPage"><code class="docutils literal notranslate"><span class="pre">LoginPage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#module-pages.main_page">pages.main_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../pages.html#pages.main_page.MainPage"><code class="docutils literal notranslate"><span class="pre">MainPage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#module-pages.push_notifications_settings_tab">pages.push_notifications_settings_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab"><code class="docutils literal notranslate"><span class="pre">PushNotificationsSettingsTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#module-pages.service_status_tab">pages.service_status_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../pages.html#pages.service_status_tab.ServiceStatusTab"><code class="docutils literal notranslate"><span class="pre">ServiceStatusTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#module-pages.session_settings_tab">pages.session_settings_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../pages.html#pages.session_settings_tab.SessionSettingsTab"><code class="docutils literal notranslate"><span class="pre">SessionSettingsTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#module-pages.templates_tab">pages.templates_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../pages.html#pages.templates_tab.TemplatesTab"><code class="docutils literal notranslate"><span class="pre">TemplatesTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#module-pages.users_tab">pages.users_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../pages.html#pages.users_tab.UsersTab"><code class="docutils literal notranslate"><span class="pre">UsersTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#module-pages.ztp_config_tab">pages.ztp_config_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../pages.html#pages.ztp_config_tab.ZTPConfigTab"><code class="docutils literal notranslate"><span class="pre">ZTPConfigTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#module-pages.ztp_templates_tab">pages.ztp_templates_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../pages.html#pages.ztp_templates_tab.ZTPTemplatesTab"><code class="docutils literal notranslate"><span class="pre">ZTPTemplatesTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#module-pages">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../tools.html">tools package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../tools.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../tools.html#module-tools.fix_python_project">tools.fix_python_project module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../tools.html#tools.fix_python_project.ProjectFixer"><code class="docutils literal notranslate"><span class="pre">ProjectFixer</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../tools.html#module-tools.logger">tools.logger module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../tools.html#tools.logger.get_logger"><code class="docutils literal notranslate"><span class="pre">get_logger()</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../tools.html#module-tools">Module contents</a></li>
</ul>
</li>
</ul>
</li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Разработка и документация:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../sphinx_guide.html">Sphinx Руководство</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id2">Расположение документа</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id3">Преимущества Sphinx</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id4">Подготовка зависимостей</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id5">Инициализация Sphinx</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id6">Настройка конфигурации</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id7">Конвертация контента</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#markdown-restructuredtext">Markdown → reStructuredText</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#id8">Таблицы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id9">Автогенерация документации из кода</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id10">Настройка главной страницы</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id11">Сборка и деплой</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id12">Полезные команды</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id13">Особенности Sphinx</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#docstrings">Поддержка docstrings</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#id14">Кастомные директивы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id15">Решение проблем</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#id16">Проблема: Модули не находятся</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#id17">Проблема: Не генерируются docstrings</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#id18">Проблема: Тема не применяется</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id19">Дополнительные возможности</a></li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Меню навигации для мобильных устройств" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../index.html">e-nms-qa-automation</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Навигация по страницам">
<ul class="wy-breadcrumbs">
<li><a href="../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="../index.html">Код модуля</a></li>
<li class="breadcrumb-item active">pages.push_notifications_settings_tab</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>Исходный код pages.push_notifications_settings_tab</h1><div class="highlight"><pre>
<span></span><span class="sd">&quot;&quot;&quot;Модуль вкладки настройки Push уведомлений.</span>
<span class="sd">Содержит класс PushNotificationsSettings для работы с вкладкой настройки Push уведомлений.</span>
<span class="sd">Позволяет проверять состояние и взаимодействовать с элементами вкладки.</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">re</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">playwright.sync_api</span><span class="w"> </span><span class="kn">import</span> <span class="n">Page</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">locators.settings_form_locators</span><span class="w"> </span><span class="kn">import</span> <span class="n">SettingsFormLocators</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">elements.text_input_element</span><span class="w"> </span><span class="kn">import</span> <span class="n">TextInput</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">elements.text_element</span><span class="w"> </span><span class="kn">import</span> <span class="n">Text</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">components.toolbar_component</span><span class="w"> </span><span class="kn">import</span> <span class="n">ToolbarComponent</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">components.alert_component</span><span class="w"> </span><span class="kn">import</span> <span class="n">AlertComponent</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">components_derived.settings_form_component</span><span class="w"> </span><span class="kn">import</span> <span class="n">SettingsFormComponent</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">components_derived.interactive_dropdown_list</span><span class="w"> </span><span class="kn">import</span> <span class="n">InteractiveDropdownList</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">pages.base_page</span><span class="w"> </span><span class="kn">import</span> <span class="n">BasePage</span>
<div class="viewcode-block" id="PushNotificationsSettingsTab">
<a class="viewcode-back" href="../../pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab">[документация]</a>
<span class="k">class</span><span class="w"> </span><span class="nc">PushNotificationsSettingsTab</span><span class="p">(</span><span class="n">BasePage</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Класс для работы с вкладкой настройки Push уведомлений.</span>
<span class="sd"> Предоставляет методы для взаимодействия с вкладкой настройки Push уведомлений.</span>
<span class="sd"> Args:</span>
<span class="sd"> page: Экземпляр страницы Playwright.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<div class="viewcode-block" id="PushNotificationsSettingsTab.__init__">
<a class="viewcode-back" href="../../pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab.__init__">[документация]</a>
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">page</span><span class="p">:</span> <span class="n">Page</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Инициализирует компоненты вкладки настройки Push уведомлений.&quot;&quot;&quot;</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">page</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">toolbar</span> <span class="o">=</span> <span class="n">ToolbarComponent</span><span class="p">(</span><span class="n">page</span><span class="p">,</span> <span class="s2">&quot;Push уведомления&quot;</span><span class="p">)</span>
<span class="c1"># Форма для отображения/редактирования полей настроек Push уведомлений</span>
<span class="bp">self</span><span class="o">.</span><span class="n">settings_form</span> <span class="o">=</span> <span class="n">SettingsFormComponent</span><span class="p">(</span><span class="n">page</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">settings_form</span><span class="o">.</span><span class="n">add_toolbar_title</span><span class="p">(</span><span class="s2">&quot;Общие&quot;</span><span class="p">)</span>
<span class="n">message_setting_label</span> <span class="o">=</span> <span class="n">Text</span><span class="p">(</span><span class="n">page</span><span class="p">,</span>
<span class="n">page</span><span class="o">.</span><span class="n">locator</span><span class="p">(</span><span class="n">SettingsFormLocators</span><span class="o">.</span><span class="n">SETTTINGS_FORM_SCROLL_CONTAINER</span><span class="p">)</span><span class="o">.</span>\
<span class="n">get_by_text</span><span class="p">(</span><span class="s1">&#39;Сообщение&#39;</span><span class="p">),</span>
<span class="s2">&quot;message_setting_label&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">settings_form</span><span class="o">.</span><span class="n">add_content_item</span><span class="p">(</span><span class="s2">&quot;message_setting_label&quot;</span><span class="p">,</span> <span class="n">message_setting_label</span><span class="p">)</span>
<span class="n">loc_message_input</span> <span class="o">=</span> <span class="n">page</span><span class="o">.</span><span class="n">locator</span><span class="p">(</span><span class="n">SettingsFormLocators</span><span class="o">.</span><span class="n">SETTTINGS_FORM_SCROLL_CONTAINER</span><span class="p">)</span><span class="o">.</span>\
<span class="n">get_by_label</span><span class="p">(</span><span class="s1">&#39;Сообщение&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">nth</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="n">message_setting_input</span> <span class="o">=</span> <span class="n">TextInput</span><span class="p">(</span><span class="n">page</span><span class="p">,</span> <span class="n">loc_message_input</span><span class="p">,</span> <span class="s2">&quot;message_setting_input&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">settings_form</span><span class="o">.</span><span class="n">add_content_item</span><span class="p">(</span><span class="s2">&quot;message_setting_input&quot;</span><span class="p">,</span> <span class="n">message_setting_input</span><span class="p">)</span>
<span class="n">users_settings_locator</span> <span class="o">=</span> <span class="n">page</span><span class="o">.</span><span class="n">locator</span><span class="p">(</span><span class="n">SettingsFormLocators</span><span class="o">.</span><span class="n">SETTTINGS_FORM_SCROLL_CONTAINER</span><span class="p">)</span><span class="o">.</span>\
<span class="n">get_by_label</span><span class="p">(</span><span class="s1">&#39;Пользователи&#39;</span><span class="p">)</span>
<span class="n">users_setting_label</span> <span class="o">=</span> <span class="n">Text</span><span class="p">(</span><span class="n">page</span><span class="p">,</span> <span class="n">users_settings_locator</span><span class="p">,</span> <span class="s2">&quot;users_setting_label&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">settings_form</span><span class="o">.</span><span class="n">add_content_item</span><span class="p">(</span><span class="s2">&quot;users_setting_label&quot;</span><span class="p">,</span> <span class="n">users_setting_label</span><span class="p">)</span>
<span class="n">users_setting_input</span> <span class="o">=</span> <span class="n">TextInput</span><span class="p">(</span><span class="n">page</span><span class="p">,</span>
<span class="n">page</span><span class="o">.</span><span class="n">locator</span><span class="p">(</span><span class="n">SettingsFormLocators</span><span class="o">.</span><span class="n">SETTTINGS_FORM_SCROLL_CONTAINER</span><span class="p">)</span><span class="o">.</span>\
<span class="n">get_by_role</span><span class="p">(</span><span class="s2">&quot;combobox&quot;</span><span class="p">),</span>
<span class="s2">&quot;users_setting_input&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">settings_form</span><span class="o">.</span><span class="n">add_content_item</span><span class="p">(</span><span class="s2">&quot;users_setting_input&quot;</span><span class="p">,</span> <span class="n">users_setting_input</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">settings_form</span><span class="o">.</span><span class="n">add_content_item</span><span class="p">(</span><span class="s2">&quot;users_list&quot;</span><span class="p">,</span> <span class="n">InteractiveDropdownList</span><span class="p">(</span><span class="n">page</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">settings_form</span><span class="o">.</span><span class="n">add_tooltip_button</span><span class="p">(</span><span class="n">page</span><span class="o">.</span><span class="n">locator</span><span class="p">(</span><span class="n">SettingsFormLocators</span><span class="o">.</span><span class="n">SETTTINGS_FORM_SCROLL_CONTAINER</span><span class="p">)</span><span class="o">.</span>\
<span class="n">get_by_role</span><span class="p">(</span><span class="s2">&quot;button&quot;</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="s1">&#39;Отправить&#39;</span><span class="p">),</span>
<span class="s2">&quot;submit_button&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">alert</span> <span class="o">=</span> <span class="n">AlertComponent</span><span class="p">(</span><span class="n">page</span><span class="p">)</span></div>
<span class="c1"># Действия:</span>
<div class="viewcode-block" id="PushNotificationsSettingsTab.clear_users_setting_value">
<a class="viewcode-back" href="../../pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab.clear_users_setting_value">[документация]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">clear_users_setting_value</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Очищает текущее значение поля настроек &#39;Пользователи&#39;.&quot;&quot;&quot;</span>
<span class="n">selected_users</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_users_setting_value</span><span class="p">()</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">selected_users</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">clear_selection_button</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">page</span><span class="o">.</span><span class="n">locator</span><span class="p">(</span><span class="n">SettingsFormLocators</span><span class="o">.</span><span class="n">SETTTINGS_FORM_SCROLL_CONTAINER</span><span class="p">)</span><span class="o">.</span>\
<span class="n">get_by_role</span><span class="p">(</span><span class="s2">&quot;combobox&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">locator</span><span class="p">(</span><span class="n">SettingsFormLocators</span><span class="o">.</span><span class="n">CLEAR_SELECTION_BUTTON</span><span class="p">)</span>
<span class="n">clear_selection_button</span><span class="o">.</span><span class="n">click</span><span class="p">()</span></div>
<div class="viewcode-block" id="PushNotificationsSettingsTab.click_submit_button">
<a class="viewcode-back" href="../../pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab.click_submit_button">[документация]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">click_submit_button</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Нажатие кнопки &#39;Отправить&#39; в форме ввода настроек.&quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">settings_form</span><span class="o">.</span><span class="n">check_button_visibility</span><span class="p">(</span><span class="s2">&quot;submit_button&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">settings_form</span><span class="o">.</span><span class="n">get_button_by_name</span><span class="p">(</span><span class="s2">&quot;submit_button&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">click</span><span class="p">()</span></div>
<div class="viewcode-block" id="PushNotificationsSettingsTab.get_message_setting_value">
<a class="viewcode-back" href="../../pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab.get_message_setting_value">[документация]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">get_message_setting_value</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Возвращает текущее значение поля настроек &#39;Сообщение&#39;.</span>
<span class="sd"> Returns:</span>
<span class="sd"> str : Текущее значение поля настроек &#39;Сообщение&#39;.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">input_field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings_form</span><span class="o">.</span><span class="n">get_content_item</span><span class="p">(</span><span class="s2">&quot;message_setting_input&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">input_field</span><span class="o">.</span><span class="n">get_input_value</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span></div>
<div class="viewcode-block" id="PushNotificationsSettingsTab.get_users_setting_value">
<a class="viewcode-back" href="../../pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab.get_users_setting_value">[документация]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">get_users_setting_value</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Возвращает текущее значение поля настроек &#39;Пользователи&#39;.</span>
<span class="sd"> Returns:</span>
<span class="sd"> str : Текущее значение поля настроек &#39;Пользователи&#39;.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">users_setting_field_loc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">page</span><span class="o">.</span><span class="n">locator</span><span class="p">(</span><span class="n">SettingsFormLocators</span><span class="o">.</span><span class="n">SETTTINGS_FORM_SCROLL_CONTAINER</span><span class="p">)</span><span class="o">.</span>\
<span class="n">get_by_role</span><span class="p">(</span><span class="s2">&quot;combobox&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">locator</span><span class="p">(</span><span class="n">SettingsFormLocators</span><span class="o">.</span><span class="n">SELECTED_VALUES</span><span class="p">)</span>
<span class="k">return</span> <span class="n">users_setting_field_loc</span><span class="o">.</span><span class="n">text_content</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span></div>
<div class="viewcode-block" id="PushNotificationsSettingsTab.input_message">
<a class="viewcode-back" href="../../pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab.input_message">[документация]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">input_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Заполнение поля &#39;Сообщение&#39;.&quot;&quot;&quot;</span>
<span class="n">message_input</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings_form</span><span class="o">.</span><span class="n">get_content_item</span><span class="p">(</span><span class="s2">&quot;message_setting_input&quot;</span><span class="p">)</span>
<span class="n">message_input</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
<span class="n">message_input</span><span class="o">.</span><span class="n">input_value</span><span class="p">(</span><span class="n">text</span><span class="p">)</span></div>
<div class="viewcode-block" id="PushNotificationsSettingsTab.deselect_users">
<a class="viewcode-back" href="../../pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab.deselect_users">[документация]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">deselect_users</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">users</span><span class="p">:</span> <span class="nb">list</span><span class="p">[</span><span class="nb">str</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Изменение значения поля &#39;Пользователи&#39; путем отмены выбора из выпадающего списка заданных имен.&quot;&quot;&quot;</span>
<span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">users</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">,</span> <span class="s2">&quot;Users list should not be empty&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">settings_form</span><span class="o">.</span><span class="n">get_content_item</span><span class="p">(</span><span class="s2">&quot;users_setting_input&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">click</span><span class="p">()</span>
<span class="n">users_list</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings_form</span><span class="o">.</span><span class="n">get_content_item</span><span class="p">(</span><span class="s2">&quot;users_list&quot;</span><span class="p">)</span>
<span class="k">for</span> <span class="n">user</span> <span class="ow">in</span> <span class="n">users</span><span class="p">:</span>
<span class="n">users_list</span><span class="o">.</span><span class="n">deselect_item_with_text</span><span class="p">(</span><span class="n">user</span><span class="p">)</span>
<span class="c1"># Закрываем выпадающий список (кликаем вне его)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">page</span><span class="o">.</span><span class="n">mouse</span><span class="o">.</span><span class="n">click</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="mi">10</span><span class="p">)</span></div>
<div class="viewcode-block" id="PushNotificationsSettingsTab.select_users">
<a class="viewcode-back" href="../../pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab.select_users">[документация]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">select_users</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">users</span><span class="p">:</span> <span class="nb">list</span><span class="p">[</span><span class="nb">str</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Заполнение поля &#39;Пользователи&#39; путем выбора из выпадающего списка заданных имен.&quot;&quot;&quot;</span>
<span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">users</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">,</span> <span class="s2">&quot;Users list should not be empty&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">settings_form</span><span class="o">.</span><span class="n">get_content_item</span><span class="p">(</span><span class="s2">&quot;users_setting_input&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">click</span><span class="p">()</span>
<span class="n">users_list</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings_form</span><span class="o">.</span><span class="n">get_content_item</span><span class="p">(</span><span class="s2">&quot;users_list&quot;</span><span class="p">)</span>
<span class="k">for</span> <span class="n">user</span> <span class="ow">in</span> <span class="n">users</span><span class="p">:</span>
<span class="n">users_list</span><span class="o">.</span><span class="n">select_item_with_text</span><span class="p">(</span><span class="n">user</span><span class="p">)</span>
<span class="c1"># Закрываем выпадающий список (кликаем вне его)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">page</span><span class="o">.</span><span class="n">mouse</span><span class="o">.</span><span class="n">click</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="mi">10</span><span class="p">)</span></div>
<span class="c1"># Проверки:</span>
<div class="viewcode-block" id="PushNotificationsSettingsTab.check_content">
<a class="viewcode-back" href="../../pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab.check_content">[документация]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">check_content</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Проверяет наличие и корректность всех элементов страницы.&quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">should_be_toolbar</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">should_be_form_toolbar</span><span class="p">()</span>
<span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings_form</span><span class="o">.</span><span class="n">content_items</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
<span class="k">if</span> <span class="n">name</span> <span class="o">==</span> <span class="s2">&quot;users_list&quot;</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">settings_form</span><span class="o">.</span><span class="n">get_content_item</span><span class="p">(</span><span class="s2">&quot;users_setting_input&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">click</span><span class="p">()</span>
<span class="n">users_list</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings_form</span><span class="o">.</span><span class="n">get_content_item</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
<span class="n">selected_users</span> <span class="o">=</span> <span class="n">users_list</span><span class="o">.</span><span class="n">get_selected_items</span><span class="p">(</span><span class="n">SettingsFormLocators</span><span class="o">.</span><span class="n">DROPDOWN_LIST</span><span class="p">)</span>
<span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">selected_users</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">,</span> <span class="s2">&quot;There should be no selected users&quot;</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">item</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings_form</span><span class="o">.</span><span class="n">get_content_item</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
<span class="n">item</span><span class="o">.</span><span class="n">check_visibility</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;Push notifications settings input form item with name &#39;</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">&#39; is missing&quot;</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">settings_form</span><span class="o">.</span><span class="n">check_button_visibility</span><span class="p">(</span><span class="s2">&quot;submit_button&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">settings_form</span><span class="o">.</span><span class="n">check_button_tooltip</span><span class="p">(</span><span class="s2">&quot;submit_button&quot;</span><span class="p">,</span> <span class="s2">&quot;Отправить Push уведомление&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="PushNotificationsSettingsTab.should_be_toolbar">
<a class="viewcode-back" href="../../pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab.should_be_toolbar">[документация]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">should_be_toolbar</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Проверяет наличие тулбара страницы.</span>
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: Если тулбар или кнопка редактирования отсутствуют.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">loc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">page</span><span class="o">.</span><span class="n">get_by_role</span><span class="p">(</span><span class="s2">&quot;navigation&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
<span class="n">has_text</span><span class="o">=</span><span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="s2">&quot;Push уведомления&quot;</span><span class="p">))</span><span class="o">.</span><span class="n">locator</span><span class="p">(</span><span class="s2">&quot;div&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">nth</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">toolbar</span><span class="o">.</span><span class="n">check_toolbar_presence_by_locator</span><span class="p">(</span><span class="n">loc</span><span class="p">,</span> <span class="s2">&quot;Toolbar with title &#39;Push уведомления&#39; is missing&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="PushNotificationsSettingsTab.should_be_form_toolbar">
<a class="viewcode-back" href="../../pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab.should_be_form_toolbar">[документация]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">should_be_form_toolbar</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Проверяет наличие тулбара формы редактирования настроек.</span>
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: Если тулбар отсутствует.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">settings_form</span><span class="o">.</span><span class="n">should_be_toolbar</span><span class="p">()</span></div>
<div class="viewcode-block" id="PushNotificationsSettingsTab.should_be_success_alert">
<a class="viewcode-back" href="../../pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab.should_be_success_alert">[документация]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">should_be_success_alert</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Проверяет наличие сообщения об успешной отправке push-уведомления.</span>
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: Если тулбар отсутствует.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">alert_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">alert</span><span class="o">.</span><span class="n">get_alert_type</span><span class="p">()</span>
<span class="k">assert</span> <span class="n">alert_type</span> <span class="o">==</span> <span class="s2">&quot;success&quot;</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;Expected success alert, but got </span><span class="si">{</span><span class="n">alert_type</span><span class="si">}</span><span class="s2"> alert&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">alert</span><span class="o">.</span><span class="n">check_alert_presence</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">Push-уведомление</span><span class="se">\n</span><span class="s1">успешно отправлено</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">alert</span><span class="o">.</span><span class="n">check_alert_absence</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">Push-уведомление</span><span class="se">\n</span><span class="s1">успешно отправлено</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span></div>
</div>
</pre></div>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; Авторские права 2025, NPO KIS. </p>
</div>
Собрано при помощи <a href="https://www.sphinx-doc.org/">Sphinx</a> с использованием
<a href="https://github.com/readthedocs/sphinx_rtd_theme">темы,</a>
предоставленной <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

View File

@ -40,8 +40,315 @@
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Меню навигации">
<!-- Local TOC -->
<div class="local-toc"></div>
<p class="caption" role="heading"><span class="caption-text">Содержание:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../sphinx_guide.html">Sphinx Руководство</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id2">Расположение документа</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id3">Преимущества Sphinx</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id4">Подготовка зависимостей</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id5">Инициализация Sphinx</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id6">Настройка конфигурации</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id7">Конвертация контента</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#markdown-restructuredtext">Markdown → reStructuredText</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#id8">Таблицы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id9">Автогенерация документации из кода</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id10">Настройка главной страницы</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id11">Сборка и деплой</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id12">Полезные команды</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id13">Особенности Sphinx</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#docstrings">Поддержка docstrings</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#id14">Кастомные директивы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id15">Решение проблем</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#id16">Проблема: Модули не находятся</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#id17">Проблема: Не генерируются docstrings</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#id18">Проблема: Тема не применяется</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id19">Дополнительные возможности</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">e-nms_qa_automation</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../../components.html">components package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.alert_component">components.alert_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.alert_component.AlertComponent"><code class="docutils literal notranslate"><span class="pre">AlertComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.base_component">components.base_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.base_component.BaseComponent"><code class="docutils literal notranslate"><span class="pre">BaseComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.card_component">components.card_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.card_component.CardComponent"><code class="docutils literal notranslate"><span class="pre">CardComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.confirm_component">components.confirm_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.confirm_component.ConfirmComponent"><code class="docutils literal notranslate"><span class="pre">ConfirmComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.date_picker_component">components.date_picker_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.date_picker_component.DatePickerComponent"><code class="docutils literal notranslate"><span class="pre">DatePickerComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.dropdown_list_component">components.dropdown_list_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.dropdown_list_component.DropdownList"><code class="docutils literal notranslate"><span class="pre">DropdownList</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.eventbar_component">components.eventbar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.eventbar_component.EventPanelComponent"><code class="docutils literal notranslate"><span class="pre">EventPanelComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.events_container_component">components.events_container_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.events_container_component.EventsContainerComponent"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.json_container_component">components.json_container_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.json_container_component.JsonContainerComponent"><code class="docutils literal notranslate"><span class="pre">JsonContainerComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.modal_window_component">components.modal_window_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.modal_window_component.ModalWindowComponent"><code class="docutils literal notranslate"><span class="pre">ModalWindowComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.navbar_component">components.navbar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.navbar_component.NavigationPanelComponent"><code class="docutils literal notranslate"><span class="pre">NavigationPanelComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#components-settings-form-component-module">components.settings_form_component module</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.table_component">components.table_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.table_component.TableComponent"><code class="docutils literal notranslate"><span class="pre">TableComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components.toolbar_component">components.toolbar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components.html#components.toolbar_component.ToolbarComponent"><code class="docutils literal notranslate"><span class="pre">ToolbarComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components.html#module-components">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../components_derived.html">components_derived package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived.container_system_log_events">components_derived.container_system_log_events module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components_derived.html#components_derived.container_system_log_events.SystemLogEventsContainer"><code class="docutils literal notranslate"><span class="pre">SystemLogEventsContainer</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived.date_input_component">components_derived.date_input_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components_derived.html#components_derived.date_input_component.DateInput"><code class="docutils literal notranslate"><span class="pre">DateInput</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived.modal_add_AD_user">components_derived.modal_add_AD_user module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components_derived.html#components_derived.modal_add_AD_user.AddADUserModalWindow"><code class="docutils literal notranslate"><span class="pre">AddADUserModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived.modal_add_local_user">components_derived.modal_add_local_user module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components_derived.html#components_derived.modal_add_local_user.AddLocalUserModalWindow"><code class="docutils literal notranslate"><span class="pre">AddLocalUserModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived.modal_change_password">components_derived.modal_change_password module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components_derived.html#components_derived.modal_change_password.ChangePasswordModalWindow"><code class="docutils literal notranslate"><span class="pre">ChangePasswordModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived.modal_edit_user">components_derived.modal_edit_user module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components_derived.html#components_derived.modal_edit_user.EditUserModalWindow"><code class="docutils literal notranslate"><span class="pre">EditUserModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived.modal_view_template">components_derived.modal_view_template module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components_derived.html#components_derived.modal_view_template.ViewTemplateModalWindow"><code class="docutils literal notranslate"><span class="pre">ViewTemplateModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived.modal_view_ztp_template">components_derived.modal_view_ztp_template module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components_derived.html#components_derived.modal_view_ztp_template.ViewZTPTemplateModalWindow"><code class="docutils literal notranslate"><span class="pre">ViewZTPTemplateModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived.selection_bar_component">components_derived.selection_bar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components_derived.html#components_derived.selection_bar_component.SelectionBarComponent"><code class="docutils literal notranslate"><span class="pre">SelectionBarComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived.sidebar_filter_component">components_derived.sidebar_filter_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components_derived.html#components_derived.sidebar_filter_component.SidebarFilterComponent"><code class="docutils literal notranslate"><span class="pre">SidebarFilterComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived.user_card">components_derived.user_card module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../components_derived.html#components_derived.user_card.UserCard"><code class="docutils literal notranslate"><span class="pre">UserCard</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../components_derived.html#module-components_derived">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../conftest.html">conftest module</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../conftest.html#conftest.pytest_sessionfinish"><code class="docutils literal notranslate"><span class="pre">pytest_sessionfinish()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../../conftest.html#conftest.pytest_addoption"><code class="docutils literal notranslate"><span class="pre">pytest_addoption()</span></code></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../data.html">data package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../data.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../data.html#module-data.constants">data.constants module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../data.html#data.constants.Constants"><code class="docutils literal notranslate"><span class="pre">Constants</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../data.html#module-data.environment">data.environment module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../data.html#data.environment.Environment"><code class="docutils literal notranslate"><span class="pre">Environment</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../data.html#module-data.roles_dict">data.roles_dict module</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../data.html#module-data">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../elements.html">elements package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../elements.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../elements.html#module-elements.base_element">elements.base_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../elements.html#elements.base_element.BaseElement"><code class="docutils literal notranslate"><span class="pre">BaseElement</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../elements.html#module-elements.button_element">elements.button_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../elements.html#elements.button_element.Button"><code class="docutils literal notranslate"><span class="pre">Button</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../elements.html#module-elements.checkbox_element">elements.checkbox_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../elements.html#elements.checkbox_element.Checkbox"><code class="docutils literal notranslate"><span class="pre">Checkbox</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../elements.html#module-elements.icon_element">elements.icon_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../elements.html#elements.icon_element.Icon"><code class="docutils literal notranslate"><span class="pre">Icon</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../elements.html#module-elements.tab_button_element">elements.tab_button_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../elements.html#elements.tab_button_element.TabButton"><code class="docutils literal notranslate"><span class="pre">TabButton</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../elements.html#module-elements.text_element">elements.text_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../elements.html#elements.text_element.Text"><code class="docutils literal notranslate"><span class="pre">Text</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../elements.html#module-elements.text_input_element">elements.text_input_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../elements.html#elements.text_input_element.TextInput"><code class="docutils literal notranslate"><span class="pre">TextInput</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../elements.html#module-elements.tooltip_button_element">elements.tooltip_button_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../elements.html#elements.tooltip_button_element.TooltipButton"><code class="docutils literal notranslate"><span class="pre">TooltipButton</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../elements.html#module-elements">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../fixtures.html">fixtures package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../fixtures.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../fixtures.html#module-fixtures.pages">fixtures.pages module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../fixtures.html#fixtures.pages.pytest_addoption"><code class="docutils literal notranslate"><span class="pre">pytest_addoption()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="../../fixtures.html#fixtures.pages.browser"><code class="docutils literal notranslate"><span class="pre">browser()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="../../fixtures.html#fixtures.pages.get_firefox_browser"><code class="docutils literal notranslate"><span class="pre">get_firefox_browser()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="../../fixtures.html#fixtures.pages.get_chrome_browser"><code class="docutils literal notranslate"><span class="pre">get_chrome_browser()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="../../fixtures.html#fixtures.pages.get_remote_chrome"><code class="docutils literal notranslate"><span class="pre">get_remote_chrome()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="../../fixtures.html#fixtures.pages.get_context"><code class="docutils literal notranslate"><span class="pre">get_context()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="../../fixtures.html#fixtures.pages.return_back"><code class="docutils literal notranslate"><span class="pre">return_back()</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../fixtures.html#module-fixtures">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../pages.html">pages package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#module-pages.base_page">pages.base_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../pages.html#pages.base_page.BasePage"><code class="docutils literal notranslate"><span class="pre">BasePage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#module-pages.current_session_tab">pages.current_session_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../pages.html#pages.current_session_tab.CurrentSessionsTab"><code class="docutils literal notranslate"><span class="pre">CurrentSessionsTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#module-pages.license_tab">pages.license_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../pages.html#pages.license_tab.LicenseTab"><code class="docutils literal notranslate"><span class="pre">LicenseTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#pages-location-page-module">pages.location_page module</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#module-pages.login_page">pages.login_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../pages.html#pages.login_page.LoginPage"><code class="docutils literal notranslate"><span class="pre">LoginPage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#module-pages.main_page">pages.main_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../pages.html#pages.main_page.MainPage"><code class="docutils literal notranslate"><span class="pre">MainPage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#module-pages.service_status_tab">pages.service_status_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../pages.html#pages.service_status_tab.ServiceStatusTab"><code class="docutils literal notranslate"><span class="pre">ServiceStatusTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#module-pages.session_settings_tab">pages.session_settings_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../pages.html#pages.session_settings_tab.SessionSettingsTab"><code class="docutils literal notranslate"><span class="pre">SessionSettingsTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#module-pages.templates_tab">pages.templates_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../pages.html#pages.templates_tab.TemplatesTab"><code class="docutils literal notranslate"><span class="pre">TemplatesTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#module-pages.users_tab">pages.users_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../pages.html#pages.users_tab.UsersTab"><code class="docutils literal notranslate"><span class="pre">UsersTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#module-pages.ztp_config_tab">pages.ztp_config_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../pages.html#pages.ztp_config_tab.ZTPConfigTab"><code class="docutils literal notranslate"><span class="pre">ZTPConfigTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#module-pages.ztp_templates_tab">pages.ztp_templates_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../pages.html#pages.ztp_templates_tab.ZTPTemplatesTab"><code class="docutils literal notranslate"><span class="pre">ZTPTemplatesTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../pages.html#module-pages">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../tools.html">tools package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../tools.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../tools.html#module-tools.fix_python_project">tools.fix_python_project module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../tools.html#tools.fix_python_project.ProjectFixer"><code class="docutils literal notranslate"><span class="pre">ProjectFixer</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../tools.html#module-tools.logger">tools.logger module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../../tools.html#tools.logger.get_logger"><code class="docutils literal notranslate"><span class="pre">get_logger()</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../../tools.html#module-tools">Module contents</a></li>
</ul>
</li>
</ul>
</li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Разработка и документация:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../sphinx_guide.html">Sphinx Руководство</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id2">Расположение документа</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id3">Преимущества Sphinx</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id4">Подготовка зависимостей</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id5">Инициализация Sphinx</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id6">Настройка конфигурации</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id7">Конвертация контента</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#markdown-restructuredtext">Markdown → reStructuredText</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#id8">Таблицы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id9">Автогенерация документации из кода</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id10">Настройка главной страницы</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id11">Сборка и деплой</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id12">Полезные команды</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id13">Особенности Sphinx</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#docstrings">Поддержка docstrings</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#id14">Кастомные директивы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id15">Решение проблем</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#id16">Проблема: Модули не находятся</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#id17">Проблема: Не генерируются docstrings</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../sphinx_guide.html#id18">Проблема: Тема не применяется</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../sphinx_guide.html#id19">Дополнительные возможности</a></li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
@ -78,8 +385,8 @@
<span class="kn">from</span><span class="w"> </span><span class="nn">elements.text_input_element</span><span class="w"> </span><span class="kn">import</span> <span class="n">TextInput</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">elements.text_element</span><span class="w"> </span><span class="kn">import</span> <span class="n">Text</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">components.toolbar_component</span><span class="w"> </span><span class="kn">import</span> <span class="n">ToolbarComponent</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">components.settings_form_component</span><span class="w"> </span><span class="kn">import</span> <span class="n">SettingsFormComponent</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">components.alert_component</span><span class="w"> </span><span class="kn">import</span> <span class="n">AlertComponent</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">components_derived.settings_form_component</span><span class="w"> </span><span class="kn">import</span> <span class="n">SettingsFormComponent</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">pages.base_page</span><span class="w"> </span><span class="kn">import</span> <span class="n">BasePage</span>

View File

@ -92,14 +92,6 @@ components.navbar\_component module
:show-inheritance:
:undoc-members:
components.settings\_form\_component module
-------------------------------------------
.. automodule:: components.settings_form_component
:members:
:show-inheritance:
:undoc-members:
components.table\_component module
----------------------------------

View File

@ -20,6 +20,14 @@ components\_derived.date\_input\_component module
:show-inheritance:
:undoc-members:
components\_derived.interactive\_dropdown\_list module
------------------------------------------------------
.. automodule:: components_derived.interactive_dropdown_list
:members:
:show-inheritance:
:undoc-members:
components\_derived.modal\_add\_AD\_user module
-----------------------------------------------
@ -76,6 +84,14 @@ components\_derived.selection\_bar\_component module
:show-inheritance:
:undoc-members:
components\_derived.settings\_form\_component module
----------------------------------------------------
.. automodule:: components_derived.settings_form_component
:members:
:show-inheritance:
:undoc-members:
components\_derived.sidebar\_filter\_component module
-----------------------------------------------------

View File

@ -27,6 +27,24 @@
* **Фикстуры (Fixtures)** - подготовка данных
* **Утилиты (Tools)** - вспомогательные функции
Инструкции и процессы
---------------------
.. toctree::
:maxdepth: 2
:caption: Документация и руководства:
sphinx_guide
Быстрый старт
-------------
Для начала работы с проектом:
1. Установите зависимости: ``pip install -e .``
2. Запустите тесты: ``pytest tests/``
3. Соберите документацию: ``sphinx-build docs/source docs/build``
Индексы и поиск
================

View File

@ -28,14 +28,6 @@ pages.license\_tab module
:show-inheritance:
:undoc-members:
pages.location\_page module
---------------------------
.. automodule:: pages.location_page
:members:
:show-inheritance:
:undoc-members:
pages.login\_page module
------------------------
@ -52,6 +44,14 @@ pages.main\_page module
:show-inheritance:
:undoc-members:
pages.push\_notifications\_settings\_tab module
-----------------------------------------------
.. automodule:: pages.push_notifications_settings_tab
:members:
:show-inheritance:
:undoc-members:
pages.service\_status\_tab module
---------------------------------

View File

@ -0,0 +1,378 @@
Руководство по документации тестов с помощью Sphinx
====================================================
**Версия документа:** 1.0
**Дата последнего обновления:** 2025-11-27
.. contents:: Содержание
:depth: 3
:local:
1 Расположение документа
-------------------------
Данное руководство расположено в структуре проекта по пути:
.. code-block:: text
project_root/
├── docs/
│ ├── source/
│ │ ├── conf.py
│ │ ├── index.rst
│ │ ├── sphinx_guide.rst <-- Этот файл
│ │ └── modules.rst
│ └── build/
├── src/
│ └── your_package/
└── pyproject.toml
2 Первичная настройка для нового проекта
-----------------------------------------
2.1 Подготовка зависимостей
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block:: bash
# Установка Sphinx и тем
pip install sphinx sphinx-rtd-theme myst-parser
# Добавление в pyproject.toml
echo [project.optional-dependencies] >> pyproject.toml
echo docs = [ >> pyproject.toml
echo "sphinx>=8.2.3", >> pyproject.toml
echo "sphinx-rtd-theme>=2.0.0", >> pyproject.toml
echo "myst-parser>=2.0.0" >> pyproject.toml
echo ] >> pyproject.toml
2.2 Инициализация Sphinx
~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block:: bash
# Создание структуры документации
sphinx-quickstart docs --sep -p "PROJECT_NAME" -a "TEAM_NAME" -l ru --ext-autodoc --ext-viewcode --makefile --no-batchfile
2.3 Настройка конфигурации
~~~~~~~~~~~~~~~~~~~~~~~~~~
Обновите ``docs/source/conf.py``:
.. code-block:: python
import os
import sys
sys.path.insert(0, os.path.abspath('../..'))
extensions = [
'sphinx.ext.autodoc',
'sphinx.ext.napoleon',
'sphinx.ext.viewcode',
'sphinx.ext.intersphinx',
'sphinx_rtd_theme',
]
autodoc_default_options = {
'members': True,
'member-order': 'bysource',
'special-members': '__init__',
'undoc-members': True,
'exclude-members': '__weakref__'
}
autodoc_typehints = 'description'
napoleon_google_docstring = True
napoleon_numpy_docstring = False
html_theme = 'sphinx_rtd_theme'
2.4 Настройка главной страницы
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Обновите ``docs/source/index.rst``:
.. code-block:: rst
Документация проекта
====================
.. toctree::
:maxdepth: 3
:caption: Содержание:
modules
Инструкции и процессы
---------------------
.. toctree::
:maxdepth: 2
:caption: Документация и руководства:
sphinx_guide
Описание
-----------
Основная документация проекта.
Индексы
=======
* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`
3 Работа с существующим проектом
---------------------------------
**Примечание:** Для работы с существующим проектом требуется установка Sphinx на локальной машине.
3.1 Установка зависимостей
~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block:: bash
# Установка Sphinx и необходимых расширений
pip install sphinx sphinx-rtd-theme myst-parser
# Или установка из зависимостей проекта (если настроено в pyproject.toml)
pip install -e ".[docs]"
3.2 Генерация документации
~~~~~~~~~~~~~~~~~~~~~~~~~~~
3.2.1 Базовая генерация
^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: bash
# Генерация .rst файлов из структуры проекта
sphinx-apidoc -o docs/source . -f
# Сборка HTML документации
sphinx-build -b html docs/source docs/build/html
3.2.2 Генерация с исключениями
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: bash
# Исключение определенных папок из документации
sphinx-apidoc -o docs/source . -f --exclude tests/ --exclude migrations/
3.2.3 Принудительная перегенерация
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: bash
# Принудительная перезапись существующих файлов
sphinx-apidoc -o docs/source . -f --force
3.3 Очистка документации
~~~~~~~~~~~~~~~~~~~~~~~~~
Когда требуется очистка:
- **После удаления модулей** - чтобы убрать ссылки на несуществующие файлы
- **После переименования пакетов** - для актуализации структуры
- **При изменении архитектуры проекта** - для отражения новых модулей
- **При появлении предупреждений** о несуществующих модулях
3.3.1 Команды очистки
^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: bash
# Удаление старых сгенерированных .rst файлов кроме основных
rm docs/source/modules.rst
rm docs/source/pages.rst
rm docs/source/components.rst
# Удаление всех .rst файлов кроме основных (Linux/Mac)
find docs/source -name "*.rst" ! -name "index.rst" ! -name "sphinx_guide.rst" -delete
# Удаление всех .rst файлов кроме основных (Windows PowerShell)
Get-ChildItem docs/source -Filter "*.rst" | Where-Object { $_.Name -notin @("index.rst", "sphinx_guide.rst") } | Remove-Item
3.3.2 Автоматизация очистки
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: makefile
.PHONY: clean-docs rebuild-docs
clean-docs:
rm -rf docs/build/
find docs/source -name "*.rst" ! -name "index.rst" ! -name "sphinx_guide.rst" -delete
rebuild-docs: clean-docs
sphinx-apidoc -o docs/source . -f
sphinx-build -b html docs/source docs/build/html
3.4 Сборка и деплой
~~~~~~~~~~~~~~~~~~~~
3.4.1 Локальная сборка
^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: bash
# Базовая сборка HTML
sphinx-build -b html docs/source docs/build/html
# Сборка с автоматическим обновлением
sphinx-autobuild docs/source docs/build/html
3.4.2 Проверка качества
^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: bash
# Проверка ссылок
sphinx-build -b linkcheck docs/source docs/build/linkcheck
# Проверка орфографии (требуется установка sphinxcontrib-spelling)
sphinx-build -b spelling docs/source docs/build/spelling
3.4.3 Сборка для публикации
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: bash
# Сборка PDF (требуется LaTeX)
sphinx-build -b latex docs/source docs/build/latex
# Сборка EPUB
sphinx-build -b epub docs/source docs/build/epub
3.4.4 Настройка для CI/CD
^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: bash
# Игнорирование билд-папки в Git
echo "docs/_build/html/" >> .gitignore
echo "docs/_build/latex/" >> .gitignore
4 Конвертация контента из MkDocs в Sphinx
------------------------------------------
4.1 Текст
~~~~~~~~~~
**MkDocs (markdown):**
.. code-block:: markdown
# Заголовок
Текст с **жирным** шрифтом.
- Элемент списка 1
- Элемент списка 2
**Sphinx (reStructuredText):**
.. code-block:: rst
Заголовок
=========
Текст с **жирным** шрифтом.
* Элемент списка 1
* Элемент списка 2
4.2 Таблицы
~~~~~~~~~~~~
**MkDocs:**
.. code-block:: markdown
| Заголовок 1 | Заголовок 2 |
|-------------|-------------|
| Данные 1 | Данные 2 |
**Sphinx:**
.. code-block:: rst
+-------------+-------------+
| Заголовок 1 | Заголовок 2 |
+=============+=============+
| Данные 1 | Данные 2 |
+-------------+-------------+
5 Особенности Sphinx
---------------------
5.1 Поддержка docstrings
~~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block:: python
def my_function(param1: str, param2: int) -> bool:
"""
Краткое описание функции.
Args:
param1: Описание параметра 1
param2: Описание параметра 2
Returns:
bool: Описание возвращаемого значения
Example:
>>> my_function("test", 5)
True
"""
return True
5.2 Кастомные директивы
~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block:: rst
.. note::
Это важное примечание.
.. warning::
Это предупреждение.
.. code-block:: python
def example():
print("Hello Sphinx!")
6 Решение проблем
------------------
6.1 Проблема: Модули не находятся
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**Решение:** Проверьте ``sys.path`` в ``conf.py``
6.2 Проблема: Не генерируются docstrings
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**Решение:** Убедитесь, что установлены расширения ``autodoc`` и ``napoleon``
6.3 Проблема: Тема не применяется
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**Решение:** Проверьте ``html_theme`` в ``conf.py``
7 Дополнительные возможности
-----------------------------
- **Autosummary** - автоматические summary таблицы
- **Intersphinx** - ссылки между проектами
- **Custom domains** - домены для специфичной документации
.. _version-history:
История версий
--------------
+---------+------------+-----------------------------------+
| Версия | Дата | Изменения |
+=========+============+===================================+
| 1.0 | 2025-11-27 | Первоначальная версия руководства |
+---------+------------+-----------------------------------+

View File

@ -19,7 +19,9 @@
<script src="_static/translations.js?v=cd1d70c9"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="Алфавитный указатель" href="genindex.html" />
<link rel="search" title="Поиск" href="search.html" />
<link rel="search" title="Поиск" href="search.html" />
<link rel="next" title="components_derived package" href="components_derived.html" />
<link rel="prev" title="e-nms_qa_automation" href="modules.html" />
</head>
<body class="wy-body-for-nav">
@ -41,275 +43,318 @@
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Меню навигации">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">components package</a><ul>
<li><a class="reference internal" href="#submodules">Submodules</a></li>
<li><a class="reference internal" href="#module-components.alert_component">components.alert_component module</a><ul>
<li><a class="reference internal" href="#components.alert_component.AlertComponent"><code class="docutils literal notranslate"><span class="pre">AlertComponent</span></code></a><ul>
<li><a class="reference internal" href="#components.alert_component.AlertComponent.__init__"><code class="docutils literal notranslate"><span class="pre">AlertComponent.__init__()</span></code></a></li>
<li><a class="reference internal" href="#components.alert_component.AlertComponent.close_alert_by_text"><code class="docutils literal notranslate"><span class="pre">AlertComponent.close_alert_by_text()</span></code></a></li>
<li><a class="reference internal" href="#components.alert_component.AlertComponent.get_alert_type"><code class="docutils literal notranslate"><span class="pre">AlertComponent.get_alert_type()</span></code></a></li>
<li><a class="reference internal" href="#components.alert_component.AlertComponent.get_text"><code class="docutils literal notranslate"><span class="pre">AlertComponent.get_text()</span></code></a></li>
<li><a class="reference internal" href="#components.alert_component.AlertComponent.check_alert_absence"><code class="docutils literal notranslate"><span class="pre">AlertComponent.check_alert_absence()</span></code></a></li>
<li><a class="reference internal" href="#components.alert_component.AlertComponent.check_alert_presence"><code class="docutils literal notranslate"><span class="pre">AlertComponent.check_alert_presence()</span></code></a></li>
<li><a class="reference internal" href="#components.alert_component.AlertComponent.check_text"><code class="docutils literal notranslate"><span class="pre">AlertComponent.check_text()</span></code></a></li>
<p class="caption" role="heading"><span class="caption-text">Содержание:</span></p>
<ul class="current">
<li class="toctree-l1 current"><a class="reference internal" href="modules.html">e-nms_qa_automation</a><ul class="current">
<li class="toctree-l2 current"><a class="current reference internal" href="#">components package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="#module-components.alert_component">components.alert_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#components.alert_component.AlertComponent"><code class="docutils literal notranslate"><span class="pre">AlertComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-components.base_component">components.base_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#components.base_component.BaseComponent"><code class="docutils literal notranslate"><span class="pre">BaseComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-components.card_component">components.card_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#components.card_component.CardComponent"><code class="docutils literal notranslate"><span class="pre">CardComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-components.confirm_component">components.confirm_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#components.confirm_component.ConfirmComponent"><code class="docutils literal notranslate"><span class="pre">ConfirmComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-components.date_picker_component">components.date_picker_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#components.date_picker_component.DatePickerComponent"><code class="docutils literal notranslate"><span class="pre">DatePickerComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-components.dropdown_list_component">components.dropdown_list_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#components.dropdown_list_component.DropdownList"><code class="docutils literal notranslate"><span class="pre">DropdownList</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-components.eventbar_component">components.eventbar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#components.eventbar_component.EventPanelComponent"><code class="docutils literal notranslate"><span class="pre">EventPanelComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-components.events_container_component">components.events_container_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#components.events_container_component.EventsContainerComponent"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-components.json_container_component">components.json_container_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#components.json_container_component.JsonContainerComponent"><code class="docutils literal notranslate"><span class="pre">JsonContainerComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-components.modal_window_component">components.modal_window_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#components.modal_window_component.ModalWindowComponent"><code class="docutils literal notranslate"><span class="pre">ModalWindowComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-components.navbar_component">components.navbar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#components.navbar_component.NavigationPanelComponent"><code class="docutils literal notranslate"><span class="pre">NavigationPanelComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-components.table_component">components.table_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#components.table_component.TableComponent"><code class="docutils literal notranslate"><span class="pre">TableComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-components.toolbar_component">components.toolbar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#components.toolbar_component.ToolbarComponent"><code class="docutils literal notranslate"><span class="pre">ToolbarComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-components">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="components_derived.html">components_derived package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.container_system_log_events">components_derived.container_system_log_events module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.container_system_log_events.SystemLogEventsContainer"><code class="docutils literal notranslate"><span class="pre">SystemLogEventsContainer</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.date_input_component">components_derived.date_input_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.date_input_component.DateInput"><code class="docutils literal notranslate"><span class="pre">DateInput</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.interactive_dropdown_list">components_derived.interactive_dropdown_list module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.interactive_dropdown_list.InteractiveDropdownList"><code class="docutils literal notranslate"><span class="pre">InteractiveDropdownList</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_add_AD_user">components_derived.modal_add_AD_user module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_add_AD_user.AddADUserModalWindow"><code class="docutils literal notranslate"><span class="pre">AddADUserModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_add_local_user">components_derived.modal_add_local_user module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_add_local_user.AddLocalUserModalWindow"><code class="docutils literal notranslate"><span class="pre">AddLocalUserModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_change_password">components_derived.modal_change_password module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_change_password.ChangePasswordModalWindow"><code class="docutils literal notranslate"><span class="pre">ChangePasswordModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_edit_user">components_derived.modal_edit_user module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_edit_user.EditUserModalWindow"><code class="docutils literal notranslate"><span class="pre">EditUserModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_view_template">components_derived.modal_view_template module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_view_template.ViewTemplateModalWindow"><code class="docutils literal notranslate"><span class="pre">ViewTemplateModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_view_ztp_template">components_derived.modal_view_ztp_template module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_view_ztp_template.ViewZTPTemplateModalWindow"><code class="docutils literal notranslate"><span class="pre">ViewZTPTemplateModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.selection_bar_component">components_derived.selection_bar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.selection_bar_component.SelectionBarComponent"><code class="docutils literal notranslate"><span class="pre">SelectionBarComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.settings_form_component">components_derived.settings_form_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.settings_form_component.SettingsFormComponent"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.sidebar_filter_component">components_derived.sidebar_filter_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.sidebar_filter_component.SidebarFilterComponent"><code class="docutils literal notranslate"><span class="pre">SidebarFilterComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.user_card">components_derived.user_card module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.user_card.UserCard"><code class="docutils literal notranslate"><span class="pre">UserCard</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="conftest.html">conftest module</a><ul>
<li class="toctree-l3"><a class="reference internal" href="conftest.html#conftest.pytest_sessionfinish"><code class="docutils literal notranslate"><span class="pre">pytest_sessionfinish()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="conftest.html#conftest.pytest_addoption"><code class="docutils literal notranslate"><span class="pre">pytest_addoption()</span></code></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="data.html">data package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="data.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="data.html#module-data.constants">data.constants module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="data.html#data.constants.Constants"><code class="docutils literal notranslate"><span class="pre">Constants</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="data.html#module-data.environment">data.environment module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="data.html#data.environment.Environment"><code class="docutils literal notranslate"><span class="pre">Environment</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="data.html#module-data.roles_dict">data.roles_dict module</a></li>
<li class="toctree-l3"><a class="reference internal" href="data.html#module-data">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="elements.html">elements package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="elements.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.base_element">elements.base_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.base_element.BaseElement"><code class="docutils literal notranslate"><span class="pre">BaseElement</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.button_element">elements.button_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.button_element.Button"><code class="docutils literal notranslate"><span class="pre">Button</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.checkbox_element">elements.checkbox_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.checkbox_element.Checkbox"><code class="docutils literal notranslate"><span class="pre">Checkbox</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.icon_element">elements.icon_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.icon_element.Icon"><code class="docutils literal notranslate"><span class="pre">Icon</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.tab_button_element">elements.tab_button_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.tab_button_element.TabButton"><code class="docutils literal notranslate"><span class="pre">TabButton</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.text_element">elements.text_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.text_element.Text"><code class="docutils literal notranslate"><span class="pre">Text</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.text_input_element">elements.text_input_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.text_input_element.TextInput"><code class="docutils literal notranslate"><span class="pre">TextInput</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.tooltip_button_element">elements.tooltip_button_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.tooltip_button_element.TooltipButton"><code class="docutils literal notranslate"><span class="pre">TooltipButton</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="fixtures.html">fixtures package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="fixtures.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="fixtures.html#module-fixtures.pages">fixtures.pages module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.pytest_addoption"><code class="docutils literal notranslate"><span class="pre">pytest_addoption()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.browser"><code class="docutils literal notranslate"><span class="pre">browser()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.get_firefox_browser"><code class="docutils literal notranslate"><span class="pre">get_firefox_browser()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.get_chrome_browser"><code class="docutils literal notranslate"><span class="pre">get_chrome_browser()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.get_remote_chrome"><code class="docutils literal notranslate"><span class="pre">get_remote_chrome()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.get_context"><code class="docutils literal notranslate"><span class="pre">get_context()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.return_back"><code class="docutils literal notranslate"><span class="pre">return_back()</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="fixtures.html#module-fixtures">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="pages.html">pages package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="pages.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.base_page">pages.base_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.base_page.BasePage"><code class="docutils literal notranslate"><span class="pre">BasePage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.current_session_tab">pages.current_session_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.current_session_tab.CurrentSessionsTab"><code class="docutils literal notranslate"><span class="pre">CurrentSessionsTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.license_tab">pages.license_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.license_tab.LicenseTab"><code class="docutils literal notranslate"><span class="pre">LicenseTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.login_page">pages.login_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.login_page.LoginPage"><code class="docutils literal notranslate"><span class="pre">LoginPage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.main_page">pages.main_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.main_page.MainPage"><code class="docutils literal notranslate"><span class="pre">MainPage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.push_notifications_settings_tab">pages.push_notifications_settings_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab"><code class="docutils literal notranslate"><span class="pre">PushNotificationsSettingsTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.service_status_tab">pages.service_status_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.service_status_tab.ServiceStatusTab"><code class="docutils literal notranslate"><span class="pre">ServiceStatusTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.session_settings_tab">pages.session_settings_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.session_settings_tab.SessionSettingsTab"><code class="docutils literal notranslate"><span class="pre">SessionSettingsTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.templates_tab">pages.templates_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.templates_tab.TemplatesTab"><code class="docutils literal notranslate"><span class="pre">TemplatesTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.users_tab">pages.users_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.users_tab.UsersTab"><code class="docutils literal notranslate"><span class="pre">UsersTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.ztp_config_tab">pages.ztp_config_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.ztp_config_tab.ZTPConfigTab"><code class="docutils literal notranslate"><span class="pre">ZTPConfigTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.ztp_templates_tab">pages.ztp_templates_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.ztp_templates_tab.ZTPTemplatesTab"><code class="docutils literal notranslate"><span class="pre">ZTPTemplatesTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="tools.html">tools package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="tools.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="tools.html#module-tools.fix_python_project">tools.fix_python_project module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="tools.html#tools.fix_python_project.ProjectFixer"><code class="docutils literal notranslate"><span class="pre">ProjectFixer</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="tools.html#module-tools.logger">tools.logger module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="tools.html#tools.logger.get_logger"><code class="docutils literal notranslate"><span class="pre">get_logger()</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="tools.html#module-tools">Module contents</a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#module-components.base_component">components.base_component module</a><ul>
<li><a class="reference internal" href="#components.base_component.BaseComponent"><code class="docutils literal notranslate"><span class="pre">BaseComponent</span></code></a><ul>
<li><a class="reference internal" href="#components.base_component.BaseComponent.__init__"><code class="docutils literal notranslate"><span class="pre">BaseComponent.__init__()</span></code></a></li>
<li><a class="reference internal" href="#components.base_component.BaseComponent.get_locator"><code class="docutils literal notranslate"><span class="pre">BaseComponent.get_locator()</span></code></a></li>
<li><a class="reference internal" href="#components.base_component.BaseComponent.check_absence"><code class="docutils literal notranslate"><span class="pre">BaseComponent.check_absence()</span></code></a></li>
<li><a class="reference internal" href="#components.base_component.BaseComponent.check_visibility"><code class="docutils literal notranslate"><span class="pre">BaseComponent.check_visibility()</span></code></a></li>
<li><a class="reference internal" href="#components.base_component.BaseComponent.is_scrollable_vertically"><code class="docutils literal notranslate"><span class="pre">BaseComponent.is_scrollable_vertically()</span></code></a></li>
<li><a class="reference internal" href="#components.base_component.BaseComponent.is_scrollable_horizontally"><code class="docutils literal notranslate"><span class="pre">BaseComponent.is_scrollable_horizontally()</span></code></a></li>
<li><a class="reference internal" href="#components.base_component.BaseComponent.scroll_up"><code class="docutils literal notranslate"><span class="pre">BaseComponent.scroll_up()</span></code></a></li>
<li><a class="reference internal" href="#components.base_component.BaseComponent.scroll_down"><code class="docutils literal notranslate"><span class="pre">BaseComponent.scroll_down()</span></code></a></li>
<li><a class="reference internal" href="#components.base_component.BaseComponent.scroll_left"><code class="docutils literal notranslate"><span class="pre">BaseComponent.scroll_left()</span></code></a></li>
<li><a class="reference internal" href="#components.base_component.BaseComponent.scroll_right"><code class="docutils literal notranslate"><span class="pre">BaseComponent.scroll_right()</span></code></a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Документация и руководства:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="sphinx_guide.html">Руководство по документации тестов с помощью Sphinx</a><ul>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id2">1 Расположение документа</a></li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id3">2 Первичная настройка для нового проекта</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id4">2.1 Подготовка зависимостей</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id5">2.2 Инициализация Sphinx</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id6">2.3 Настройка конфигурации</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id7">2.4 Настройка главной страницы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id8">3 Работа с существующим проектом</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id9">3.1 Установка зависимостей</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id10">3.2 Генерация документации</a><ul>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id11">3.2.1 Базовая генерация</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id12">3.2.2 Генерация с исключениями</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id13">3.2.3 Принудительная перегенерация</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id14">3.3 Очистка документации</a><ul>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id15">3.3.1 Команды очистки</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id16">3.3.2 Автоматизация очистки</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id17">3.4 Сборка и деплой</a><ul>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id18">3.4.1 Локальная сборка</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id19">3.4.2 Проверка качества</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id20">3.4.3 Сборка для публикации</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#ci-cd">3.4.4 Настройка для CI/CD</a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#module-components.card_component">components.card_component module</a><ul>
<li><a class="reference internal" href="#components.card_component.CardComponent"><code class="docutils literal notranslate"><span class="pre">CardComponent</span></code></a><ul>
<li><a class="reference internal" href="#components.card_component.CardComponent.__init__"><code class="docutils literal notranslate"><span class="pre">CardComponent.__init__()</span></code></a></li>
<li><a class="reference internal" href="#components.card_component.CardComponent.click_logout_button"><code class="docutils literal notranslate"><span class="pre">CardComponent.click_logout_button()</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#mkdocs-sphinx">4 Конвертация контента из MkDocs в Sphinx</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id21">4.1 Текст</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id22">4.2 Таблицы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id23">5 Особенности Sphinx</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#docstrings">5.1 Поддержка docstrings</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id24">5.2 Кастомные директивы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id25">6 Решение проблем</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id26">6.1 Проблема: Модули не находятся</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id27">6.2 Проблема: Не генерируются docstrings</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id28">6.3 Проблема: Тема не применяется</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id29">7 Дополнительные возможности</a></li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#version-history">История версий</a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#module-components.confirm_component">components.confirm_component module</a><ul>
<li><a class="reference internal" href="#components.confirm_component.ConfirmComponent"><code class="docutils literal notranslate"><span class="pre">ConfirmComponent</span></code></a><ul>
<li><a class="reference internal" href="#components.confirm_component.ConfirmComponent.__init__"><code class="docutils literal notranslate"><span class="pre">ConfirmComponent.__init__()</span></code></a></li>
<li><a class="reference internal" href="#components.confirm_component.ConfirmComponent.click_allow_button"><code class="docutils literal notranslate"><span class="pre">ConfirmComponent.click_allow_button()</span></code></a></li>
<li><a class="reference internal" href="#components.confirm_component.ConfirmComponent.click_cancel_button"><code class="docutils literal notranslate"><span class="pre">ConfirmComponent.click_cancel_button()</span></code></a></li>
<li><a class="reference internal" href="#components.confirm_component.ConfirmComponent.click_close_button"><code class="docutils literal notranslate"><span class="pre">ConfirmComponent.click_close_button()</span></code></a></li>
<li><a class="reference internal" href="#components.confirm_component.ConfirmComponent.scroll_window_left"><code class="docutils literal notranslate"><span class="pre">ConfirmComponent.scroll_window_left()</span></code></a></li>
<li><a class="reference internal" href="#components.confirm_component.ConfirmComponent.scroll_window_right"><code class="docutils literal notranslate"><span class="pre">ConfirmComponent.scroll_window_right()</span></code></a></li>
<li><a class="reference internal" href="#components.confirm_component.ConfirmComponent.check_title"><code class="docutils literal notranslate"><span class="pre">ConfirmComponent.check_title()</span></code></a></li>
<li><a class="reference internal" href="#components.confirm_component.ConfirmComponent.check_text"><code class="docutils literal notranslate"><span class="pre">ConfirmComponent.check_text()</span></code></a></li>
<li><a class="reference internal" href="#components.confirm_component.ConfirmComponent.check_window_horizontal_scrolling"><code class="docutils literal notranslate"><span class="pre">ConfirmComponent.check_window_horizontal_scrolling()</span></code></a></li>
<li><a class="reference internal" href="#components.confirm_component.ConfirmComponent.should_be_cancel_button"><code class="docutils literal notranslate"><span class="pre">ConfirmComponent.should_be_cancel_button()</span></code></a></li>
<li><a class="reference internal" href="#components.confirm_component.ConfirmComponent.should_be_allow_button"><code class="docutils literal notranslate"><span class="pre">ConfirmComponent.should_be_allow_button()</span></code></a></li>
<li><a class="reference internal" href="#components.confirm_component.ConfirmComponent.check_cancel_button_text"><code class="docutils literal notranslate"><span class="pre">ConfirmComponent.check_cancel_button_text()</span></code></a></li>
<li><a class="reference internal" href="#components.confirm_component.ConfirmComponent.check_allow_button_text"><code class="docutils literal notranslate"><span class="pre">ConfirmComponent.check_allow_button_text()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#module-components.date_picker_component">components.date_picker_component module</a><ul>
<li><a class="reference internal" href="#components.date_picker_component.DatePickerComponent"><code class="docutils literal notranslate"><span class="pre">DatePickerComponent</span></code></a><ul>
<li><a class="reference internal" href="#components.date_picker_component.DatePickerComponent.__init__"><code class="docutils literal notranslate"><span class="pre">DatePickerComponent.__init__()</span></code></a></li>
<li><a class="reference internal" href="#components.date_picker_component.DatePickerComponent.click_prev_month_button"><code class="docutils literal notranslate"><span class="pre">DatePickerComponent.click_prev_month_button()</span></code></a></li>
<li><a class="reference internal" href="#components.date_picker_component.DatePickerComponent.click_next_month_button"><code class="docutils literal notranslate"><span class="pre">DatePickerComponent.click_next_month_button()</span></code></a></li>
<li><a class="reference internal" href="#components.date_picker_component.DatePickerComponent.click_year_button"><code class="docutils literal notranslate"><span class="pre">DatePickerComponent.click_year_button()</span></code></a></li>
<li><a class="reference internal" href="#components.date_picker_component.DatePickerComponent.get_year"><code class="docutils literal notranslate"><span class="pre">DatePickerComponent.get_year()</span></code></a></li>
<li><a class="reference internal" href="#components.date_picker_component.DatePickerComponent.get_month_year"><code class="docutils literal notranslate"><span class="pre">DatePickerComponent.get_month_year()</span></code></a></li>
<li><a class="reference internal" href="#components.date_picker_component.DatePickerComponent.get_day"><code class="docutils literal notranslate"><span class="pre">DatePickerComponent.get_day()</span></code></a></li>
<li><a class="reference internal" href="#components.date_picker_component.DatePickerComponent.select_day"><code class="docutils literal notranslate"><span class="pre">DatePickerComponent.select_day()</span></code></a></li>
<li><a class="reference internal" href="#components.date_picker_component.DatePickerComponent.select_year_and_month"><code class="docutils literal notranslate"><span class="pre">DatePickerComponent.select_year_and_month()</span></code></a></li>
<li><a class="reference internal" href="#components.date_picker_component.DatePickerComponent.check_prev_month_button_visibility"><code class="docutils literal notranslate"><span class="pre">DatePickerComponent.check_prev_month_button_visibility()</span></code></a></li>
<li><a class="reference internal" href="#components.date_picker_component.DatePickerComponent.check_next_month_button_visibility"><code class="docutils literal notranslate"><span class="pre">DatePickerComponent.check_next_month_button_visibility()</span></code></a></li>
<li><a class="reference internal" href="#components.date_picker_component.DatePickerComponent.check_year_button_visibility"><code class="docutils literal notranslate"><span class="pre">DatePickerComponent.check_year_button_visibility()</span></code></a></li>
<li><a class="reference internal" href="#components.date_picker_component.DatePickerComponent.check_content"><code class="docutils literal notranslate"><span class="pre">DatePickerComponent.check_content()</span></code></a></li>
<li><a class="reference internal" href="#components.date_picker_component.DatePickerComponent._is_leap_year"><code class="docutils literal notranslate"><span class="pre">DatePickerComponent._is_leap_year()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#module-components.dropdown_list_component">components.dropdown_list_component module</a><ul>
<li><a class="reference internal" href="#components.dropdown_list_component.DropdownList"><code class="docutils literal notranslate"><span class="pre">DropdownList</span></code></a><ul>
<li><a class="reference internal" href="#components.dropdown_list_component.DropdownList.__init__"><code class="docutils literal notranslate"><span class="pre">DropdownList.__init__()</span></code></a></li>
<li><a class="reference internal" href="#components.dropdown_list_component.DropdownList.click_item_with_text"><code class="docutils literal notranslate"><span class="pre">DropdownList.click_item_with_text()</span></code></a></li>
<li><a class="reference internal" href="#components.dropdown_list_component.DropdownList.get_combobox_options"><code class="docutils literal notranslate"><span class="pre">DropdownList.get_combobox_options()</span></code></a></li>
<li><a class="reference internal" href="#components.dropdown_list_component.DropdownList.get_item_names"><code class="docutils literal notranslate"><span class="pre">DropdownList.get_item_names()</span></code></a></li>
<li><a class="reference internal" href="#components.dropdown_list_component.DropdownList.get_selected_combobox_value"><code class="docutils literal notranslate"><span class="pre">DropdownList.get_selected_combobox_value()</span></code></a></li>
<li><a class="reference internal" href="#components.dropdown_list_component.DropdownList.open_combobox"><code class="docutils literal notranslate"><span class="pre">DropdownList.open_combobox()</span></code></a></li>
<li><a class="reference internal" href="#components.dropdown_list_component.DropdownList.scroll_until_end"><code class="docutils literal notranslate"><span class="pre">DropdownList.scroll_until_end()</span></code></a></li>
<li><a class="reference internal" href="#components.dropdown_list_component.DropdownList.check_item_with_text"><code class="docutils literal notranslate"><span class="pre">DropdownList.check_item_with_text()</span></code></a></li>
<li><a class="reference internal" href="#components.dropdown_list_component.DropdownList.check_vertical_scrolling"><code class="docutils literal notranslate"><span class="pre">DropdownList.check_vertical_scrolling()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#module-components.eventbar_component">components.eventbar_component module</a><ul>
<li><a class="reference internal" href="#components.eventbar_component.EventPanelComponent"><code class="docutils literal notranslate"><span class="pre">EventPanelComponent</span></code></a><ul>
<li><a class="reference internal" href="#components.eventbar_component.EventPanelComponent.__init__"><code class="docutils literal notranslate"><span class="pre">EventPanelComponent.__init__()</span></code></a></li>
<li><a class="reference internal" href="#components.eventbar_component.EventPanelComponent.click_expand_less_button"><code class="docutils literal notranslate"><span class="pre">EventPanelComponent.click_expand_less_button()</span></code></a></li>
<li><a class="reference internal" href="#components.eventbar_component.EventPanelComponent.click_expand_more_button"><code class="docutils literal notranslate"><span class="pre">EventPanelComponent.click_expand_more_button()</span></code></a></li>
<li><a class="reference internal" href="#components.eventbar_component.EventPanelComponent.click_system_log_tab"><code class="docutils literal notranslate"><span class="pre">EventPanelComponent.click_system_log_tab()</span></code></a></li>
<li><a class="reference internal" href="#components.eventbar_component.EventPanelComponent.click_user_button"><code class="docutils literal notranslate"><span class="pre">EventPanelComponent.click_user_button()</span></code></a></li>
<li><a class="reference internal" href="#components.eventbar_component.EventPanelComponent.do_logout"><code class="docutils literal notranslate"><span class="pre">EventPanelComponent.do_logout()</span></code></a></li>
<li><a class="reference internal" href="#components.eventbar_component.EventPanelComponent.get_event_tooltip_texts"><code class="docutils literal notranslate"><span class="pre">EventPanelComponent.get_event_tooltip_texts()</span></code></a></li>
<li><a class="reference internal" href="#components.eventbar_component.EventPanelComponent.get_event_button_values"><code class="docutils literal notranslate"><span class="pre">EventPanelComponent.get_event_button_values()</span></code></a></li>
<li><a class="reference internal" href="#components.eventbar_component.EventPanelComponent.get_panel_position"><code class="docutils literal notranslate"><span class="pre">EventPanelComponent.get_panel_position()</span></code></a></li>
<li><a class="reference internal" href="#components.eventbar_component.EventPanelComponent.check_expand_less_button"><code class="docutils literal notranslate"><span class="pre">EventPanelComponent.check_expand_less_button()</span></code></a></li>
<li><a class="reference internal" href="#components.eventbar_component.EventPanelComponent.check_expand_more_button"><code class="docutils literal notranslate"><span class="pre">EventPanelComponent.check_expand_more_button()</span></code></a></li>
<li><a class="reference internal" href="#components.eventbar_component.EventPanelComponent.should_be_user_button"><code class="docutils literal notranslate"><span class="pre">EventPanelComponent.should_be_user_button()</span></code></a></li>
<li><a class="reference internal" href="#components.eventbar_component.EventPanelComponent.should_be_search_button"><code class="docutils literal notranslate"><span class="pre">EventPanelComponent.should_be_search_button()</span></code></a></li>
<li><a class="reference internal" href="#components.eventbar_component.EventPanelComponent.should_be_tab_buttons"><code class="docutils literal notranslate"><span class="pre">EventPanelComponent.should_be_tab_buttons()</span></code></a></li>
<li><a class="reference internal" href="#components.eventbar_component.EventPanelComponent.should_be_event_buttons"><code class="docutils literal notranslate"><span class="pre">EventPanelComponent.should_be_event_buttons()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#module-components.events_container_component">components.events_container_component module</a><ul>
<li><a class="reference internal" href="#components.events_container_component.EventsContainerComponent"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent</span></code></a><ul>
<li><a class="reference internal" href="#components.events_container_component.EventsContainerComponent.__init__"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent.__init__()</span></code></a></li>
<li><a class="reference internal" href="#components.events_container_component.EventsContainerComponent.add_tab_to_toolbar"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent.add_tab_to_toolbar()</span></code></a></li>
<li><a class="reference internal" href="#components.events_container_component.EventsContainerComponent.click_chevron_left"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent.click_chevron_left()</span></code></a></li>
<li><a class="reference internal" href="#components.events_container_component.EventsContainerComponent.click_chevron_right"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent.click_chevron_right()</span></code></a></li>
<li><a class="reference internal" href="#components.events_container_component.EventsContainerComponent.click_first_page"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent.click_first_page()</span></code></a></li>
<li><a class="reference internal" href="#components.events_container_component.EventsContainerComponent.click_last_page"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent.click_last_page()</span></code></a></li>
<li><a class="reference internal" href="#components.events_container_component.EventsContainerComponent.click_filter_button"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent.click_filter_button()</span></code></a></li>
<li><a class="reference internal" href="#components.events_container_component.EventsContainerComponent.click_event_table_header_arrow"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent.click_event_table_header_arrow()</span></code></a></li>
<li><a class="reference internal" href="#components.events_container_component.EventsContainerComponent.get_current_data_set_number"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent.get_current_data_set_number()</span></code></a></li>
<li><a class="reference internal" href="#components.events_container_component.EventsContainerComponent.get_arrow_button_state"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent.get_arrow_button_state()</span></code></a></li>
<li><a class="reference internal" href="#components.events_container_component.EventsContainerComponent.get_events_table_content"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent.get_events_table_content()</span></code></a></li>
<li><a class="reference internal" href="#components.events_container_component.EventsContainerComponent.get_events_table_rows_count"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent.get_events_table_rows_count()</span></code></a></li>
<li><a class="reference internal" href="#components.events_container_component.EventsContainerComponent.get_sidebar_filter"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent.get_sidebar_filter()</span></code></a></li>
<li><a class="reference internal" href="#components.events_container_component.EventsContainerComponent.get_toolbar_filter_button"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent.get_toolbar_filter_button()</span></code></a></li>
<li><a class="reference internal" href="#components.events_container_component.EventsContainerComponent.get_toolbar_export_to_csv_button"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent.get_toolbar_export_to_csv_button()</span></code></a></li>
<li><a class="reference internal" href="#components.events_container_component.EventsContainerComponent.get_toolbar_export_to_pdf_button"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent.get_toolbar_export_to_pdf_button()</span></code></a></li>
<li><a class="reference internal" href="#components.events_container_component.EventsContainerComponent.get_toolbar_tab_button"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent.get_toolbar_tab_button()</span></code></a></li>
<li><a class="reference internal" href="#components.events_container_component.EventsContainerComponent.scroll_events_table_up"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent.scroll_events_table_up()</span></code></a></li>
<li><a class="reference internal" href="#components.events_container_component.EventsContainerComponent.scroll_events_table_down"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent.scroll_events_table_down()</span></code></a></li>
<li><a class="reference internal" href="#components.events_container_component.EventsContainerComponent.check_events_table_headers"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent.check_events_table_headers()</span></code></a></li>
<li><a class="reference internal" href="#components.events_container_component.EventsContainerComponent.check_events_table_column_descending_order"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent.check_events_table_column_descending_order()</span></code></a></li>
<li><a class="reference internal" href="#components.events_container_component.EventsContainerComponent.check_events_table_row_highlighting"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent.check_events_table_row_highlighting()</span></code></a></li>
<li><a class="reference internal" href="#components.events_container_component.EventsContainerComponent.check_events_table_first_row_visibility"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent.check_events_table_first_row_visibility()</span></code></a></li>
<li><a class="reference internal" href="#components.events_container_component.EventsContainerComponent.check_events_table_last_row_visibility"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent.check_events_table_last_row_visibility()</span></code></a></li>
<li><a class="reference internal" href="#components.events_container_component.EventsContainerComponent.check_events_table_verticall_scrolling"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent.check_events_table_verticall_scrolling()</span></code></a></li>
<li><a class="reference internal" href="#components.events_container_component.EventsContainerComponent.is_chevron_left_disabled"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent.is_chevron_left_disabled()</span></code></a></li>
<li><a class="reference internal" href="#components.events_container_component.EventsContainerComponent.is_chevron_right_disabled"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent.is_chevron_right_disabled()</span></code></a></li>
<li><a class="reference internal" href="#components.events_container_component.EventsContainerComponent.is_first_page_disabled"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent.is_first_page_disabled()</span></code></a></li>
<li><a class="reference internal" href="#components.events_container_component.EventsContainerComponent.is_last_page_disabled"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent.is_last_page_disabled()</span></code></a></li>
<li><a class="reference internal" href="#components.events_container_component.EventsContainerComponent.should_be_all_disabled"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent.should_be_all_disabled()</span></code></a></li>
<li><a class="reference internal" href="#components.events_container_component.EventsContainerComponent.should_be_all_enabled"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent.should_be_all_enabled()</span></code></a></li>
<li><a class="reference internal" href="#components.events_container_component.EventsContainerComponent.should_be_initial_state"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent.should_be_initial_state()</span></code></a></li>
<li><a class="reference internal" href="#components.events_container_component.EventsContainerComponent.should_be_final_state"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent.should_be_final_state()</span></code></a></li>
<li><a class="reference internal" href="#components.events_container_component.EventsContainerComponent.should_be_events_table"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent.should_be_events_table()</span></code></a></li>
<li><a class="reference internal" href="#components.events_container_component.EventsContainerComponent.should_be_toolbar"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent.should_be_toolbar()</span></code></a></li>
<li><a class="reference internal" href="#components.events_container_component.EventsContainerComponent.should_be_base_toolbar_buttons"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent.should_be_base_toolbar_buttons()</span></code></a></li>
<li><a class="reference internal" href="#components.events_container_component.EventsContainerComponent.should_be_pagination_buttons"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent.should_be_pagination_buttons()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#module-components.json_container_component">components.json_container_component module</a><ul>
<li><a class="reference internal" href="#components.json_container_component.JsonContainerComponent"><code class="docutils literal notranslate"><span class="pre">JsonContainerComponent</span></code></a><ul>
<li><a class="reference internal" href="#components.json_container_component.JsonContainerComponent.__init__"><code class="docutils literal notranslate"><span class="pre">JsonContainerComponent.__init__()</span></code></a></li>
<li><a class="reference internal" href="#components.json_container_component.JsonContainerComponent.format_json_string"><code class="docutils literal notranslate"><span class="pre">JsonContainerComponent.format_json_string()</span></code></a></li>
<li><a class="reference internal" href="#components.json_container_component.JsonContainerComponent.read_data"><code class="docutils literal notranslate"><span class="pre">JsonContainerComponent.read_data()</span></code></a></li>
<li><a class="reference internal" href="#components.json_container_component.JsonContainerComponent.check_json_equals"><code class="docutils literal notranslate"><span class="pre">JsonContainerComponent.check_json_equals()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#module-components.modal_window_component">components.modal_window_component module</a><ul>
<li><a class="reference internal" href="#components.modal_window_component.ModalWindowComponent"><code class="docutils literal notranslate"><span class="pre">ModalWindowComponent</span></code></a><ul>
<li><a class="reference internal" href="#components.modal_window_component.ModalWindowComponent.__init__"><code class="docutils literal notranslate"><span class="pre">ModalWindowComponent.__init__()</span></code></a></li>
<li><a class="reference internal" href="#components.modal_window_component.ModalWindowComponent.add_content_item"><code class="docutils literal notranslate"><span class="pre">ModalWindowComponent.add_content_item()</span></code></a></li>
<li><a class="reference internal" href="#components.modal_window_component.ModalWindowComponent.get_content_item"><code class="docutils literal notranslate"><span class="pre">ModalWindowComponent.get_content_item()</span></code></a></li>
<li><a class="reference internal" href="#components.modal_window_component.ModalWindowComponent.add_toolbar_title"><code class="docutils literal notranslate"><span class="pre">ModalWindowComponent.add_toolbar_title()</span></code></a></li>
<li><a class="reference internal" href="#components.modal_window_component.ModalWindowComponent.add_toolbar_button"><code class="docutils literal notranslate"><span class="pre">ModalWindowComponent.add_toolbar_button()</span></code></a></li>
<li><a class="reference internal" href="#components.modal_window_component.ModalWindowComponent.add_button"><code class="docutils literal notranslate"><span class="pre">ModalWindowComponent.add_button()</span></code></a></li>
<li><a class="reference internal" href="#components.modal_window_component.ModalWindowComponent.get_button_by_name"><code class="docutils literal notranslate"><span class="pre">ModalWindowComponent.get_button_by_name()</span></code></a></li>
<li><a class="reference internal" href="#components.modal_window_component.ModalWindowComponent.click_button"><code class="docutils literal notranslate"><span class="pre">ModalWindowComponent.click_button()</span></code></a></li>
<li><a class="reference internal" href="#components.modal_window_component.ModalWindowComponent.click_toolbar_close_button"><code class="docutils literal notranslate"><span class="pre">ModalWindowComponent.click_toolbar_close_button()</span></code></a></li>
<li><a class="reference internal" href="#components.modal_window_component.ModalWindowComponent.scroll_window_down"><code class="docutils literal notranslate"><span class="pre">ModalWindowComponent.scroll_window_down()</span></code></a></li>
<li><a class="reference internal" href="#components.modal_window_component.ModalWindowComponent.scroll_window_up"><code class="docutils literal notranslate"><span class="pre">ModalWindowComponent.scroll_window_up()</span></code></a></li>
<li><a class="reference internal" href="#components.modal_window_component.ModalWindowComponent.scroll_window_left"><code class="docutils literal notranslate"><span class="pre">ModalWindowComponent.scroll_window_left()</span></code></a></li>
<li><a class="reference internal" href="#components.modal_window_component.ModalWindowComponent.scroll_window_right"><code class="docutils literal notranslate"><span class="pre">ModalWindowComponent.scroll_window_right()</span></code></a></li>
<li><a class="reference internal" href="#components.modal_window_component.ModalWindowComponent.check_window_vertical_scrolling"><code class="docutils literal notranslate"><span class="pre">ModalWindowComponent.check_window_vertical_scrolling()</span></code></a></li>
<li><a class="reference internal" href="#components.modal_window_component.ModalWindowComponent.check_window_horizontal_scrolling"><code class="docutils literal notranslate"><span class="pre">ModalWindowComponent.check_window_horizontal_scrolling()</span></code></a></li>
<li><a class="reference internal" href="#components.modal_window_component.ModalWindowComponent.check_by_window_title"><code class="docutils literal notranslate"><span class="pre">ModalWindowComponent.check_by_window_title()</span></code></a></li>
<li><a class="reference internal" href="#components.modal_window_component.ModalWindowComponent.check_button_visibility"><code class="docutils literal notranslate"><span class="pre">ModalWindowComponent.check_button_visibility()</span></code></a></li>
<li><a class="reference internal" href="#components.modal_window_component.ModalWindowComponent.check_toolbar_button_visibility"><code class="docutils literal notranslate"><span class="pre">ModalWindowComponent.check_toolbar_button_visibility()</span></code></a></li>
<li><a class="reference internal" href="#components.modal_window_component.ModalWindowComponent.check_toolbar_button_tooltip"><code class="docutils literal notranslate"><span class="pre">ModalWindowComponent.check_toolbar_button_tooltip()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#module-components.navbar_component">components.navbar_component module</a><ul>
<li><a class="reference internal" href="#components.navbar_component.NavigationPanelComponent"><code class="docutils literal notranslate"><span class="pre">NavigationPanelComponent</span></code></a><ul>
<li><a class="reference internal" href="#components.navbar_component.NavigationPanelComponent.__init__"><code class="docutils literal notranslate"><span class="pre">NavigationPanelComponent.__init__()</span></code></a></li>
<li><a class="reference internal" href="#components.navbar_component.NavigationPanelComponent.click_item"><code class="docutils literal notranslate"><span class="pre">NavigationPanelComponent.click_item()</span></code></a></li>
<li><a class="reference internal" href="#components.navbar_component.NavigationPanelComponent.click_sub_item"><code class="docutils literal notranslate"><span class="pre">NavigationPanelComponent.click_sub_item()</span></code></a></li>
<li><a class="reference internal" href="#components.navbar_component.NavigationPanelComponent.get_item_names"><code class="docutils literal notranslate"><span class="pre">NavigationPanelComponent.get_item_names()</span></code></a></li>
<li><a class="reference internal" href="#components.navbar_component.NavigationPanelComponent.traverse_panel_tree"><code class="docutils literal notranslate"><span class="pre">NavigationPanelComponent.traverse_panel_tree()</span></code></a></li>
<li><a class="reference internal" href="#components.navbar_component.NavigationPanelComponent.check_item_visibility"><code class="docutils literal notranslate"><span class="pre">NavigationPanelComponent.check_item_visibility()</span></code></a></li>
<li><a class="reference internal" href="#components.navbar_component.NavigationPanelComponent.is_item_visible"><code class="docutils literal notranslate"><span class="pre">NavigationPanelComponent.is_item_visible()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#module-components.settings_form_component">components.settings_form_component module</a><ul>
<li><a class="reference internal" href="#components.settings_form_component.SettingsFormComponent"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent</span></code></a><ul>
<li><a class="reference internal" href="#components.settings_form_component.SettingsFormComponent.__init__"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent.__init__()</span></code></a></li>
<li><a class="reference internal" href="#components.settings_form_component.SettingsFormComponent.add_content_item"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent.add_content_item()</span></code></a></li>
<li><a class="reference internal" href="#components.settings_form_component.SettingsFormComponent.get_content_item"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent.get_content_item()</span></code></a></li>
<li><a class="reference internal" href="#components.settings_form_component.SettingsFormComponent.add_toolbar_title"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent.add_toolbar_title()</span></code></a></li>
<li><a class="reference internal" href="#components.settings_form_component.SettingsFormComponent.add_button"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent.add_button()</span></code></a></li>
<li><a class="reference internal" href="#components.settings_form_component.SettingsFormComponent.get_button_by_name"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent.get_button_by_name()</span></code></a></li>
<li><a class="reference internal" href="#components.settings_form_component.SettingsFormComponent.click_button"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent.click_button()</span></code></a></li>
<li><a class="reference internal" href="#components.settings_form_component.SettingsFormComponent.check_vertical_scrolling"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent.check_vertical_scrolling()</span></code></a></li>
<li><a class="reference internal" href="#components.settings_form_component.SettingsFormComponent.check_button_visibility"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent.check_button_visibility()</span></code></a></li>
<li><a class="reference internal" href="#components.settings_form_component.SettingsFormComponent.should_be_toolbar"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent.should_be_toolbar()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#module-components.table_component">components.table_component module</a><ul>
<li><a class="reference internal" href="#components.table_component.TableComponent"><code class="docutils literal notranslate"><span class="pre">TableComponent</span></code></a><ul>
<li><a class="reference internal" href="#components.table_component.TableComponent.__init__"><code class="docutils literal notranslate"><span class="pre">TableComponent.__init__()</span></code></a></li>
<li><a class="reference internal" href="#components.table_component.TableComponent.click_arrow_button"><code class="docutils literal notranslate"><span class="pre">TableComponent.click_arrow_button()</span></code></a></li>
<li><a class="reference internal" href="#components.table_component.TableComponent.datetime2timestamp"><code class="docutils literal notranslate"><span class="pre">TableComponent.datetime2timestamp()</span></code></a></li>
<li><a class="reference internal" href="#components.table_component.TableComponent.get_arrow_button_state"><code class="docutils literal notranslate"><span class="pre">TableComponent.get_arrow_button_state()</span></code></a></li>
<li><a class="reference internal" href="#components.table_component.TableComponent.get_header_cell_button"><code class="docutils literal notranslate"><span class="pre">TableComponent.get_header_cell_button()</span></code></a></li>
<li><a class="reference internal" href="#components.table_component.TableComponent.get_row_locator"><code class="docutils literal notranslate"><span class="pre">TableComponent.get_row_locator()</span></code></a></li>
<li><a class="reference internal" href="#components.table_component.TableComponent.get_rows_count"><code class="docutils literal notranslate"><span class="pre">TableComponent.get_rows_count()</span></code></a></li>
<li><a class="reference internal" href="#components.table_component.TableComponent.read"><code class="docutils literal notranslate"><span class="pre">TableComponent.read()</span></code></a></li>
<li><a class="reference internal" href="#components.table_component.TableComponent.check_table_headers"><code class="docutils literal notranslate"><span class="pre">TableComponent.check_table_headers()</span></code></a></li>
<li><a class="reference internal" href="#components.table_component.TableComponent.check_content"><code class="docutils literal notranslate"><span class="pre">TableComponent.check_content()</span></code></a></li>
<li><a class="reference internal" href="#components.table_component.TableComponent.check_column_descending_order"><code class="docutils literal notranslate"><span class="pre">TableComponent.check_column_descending_order()</span></code></a></li>
<li><a class="reference internal" href="#components.table_component.TableComponent.check_first_row_visibility"><code class="docutils literal notranslate"><span class="pre">TableComponent.check_first_row_visibility()</span></code></a></li>
<li><a class="reference internal" href="#components.table_component.TableComponent.check_last_row_visibility"><code class="docutils literal notranslate"><span class="pre">TableComponent.check_last_row_visibility()</span></code></a></li>
<li><a class="reference internal" href="#components.table_component.TableComponent.check_row_highlighting"><code class="docutils literal notranslate"><span class="pre">TableComponent.check_row_highlighting()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#module-components.toolbar_component">components.toolbar_component module</a><ul>
<li><a class="reference internal" href="#components.toolbar_component.ToolbarComponent"><code class="docutils literal notranslate"><span class="pre">ToolbarComponent</span></code></a><ul>
<li><a class="reference internal" href="#components.toolbar_component.ToolbarComponent.__init__"><code class="docutils literal notranslate"><span class="pre">ToolbarComponent.__init__()</span></code></a></li>
<li><a class="reference internal" href="#components.toolbar_component.ToolbarComponent.add_title"><code class="docutils literal notranslate"><span class="pre">ToolbarComponent.add_title()</span></code></a></li>
<li><a class="reference internal" href="#components.toolbar_component.ToolbarComponent.add_tooltip_button"><code class="docutils literal notranslate"><span class="pre">ToolbarComponent.add_tooltip_button()</span></code></a></li>
<li><a class="reference internal" href="#components.toolbar_component.ToolbarComponent.add_tab_button"><code class="docutils literal notranslate"><span class="pre">ToolbarComponent.add_tab_button()</span></code></a></li>
<li><a class="reference internal" href="#components.toolbar_component.ToolbarComponent.add_button"><code class="docutils literal notranslate"><span class="pre">ToolbarComponent.add_button()</span></code></a></li>
<li><a class="reference internal" href="#components.toolbar_component.ToolbarComponent.get_button_by_name"><code class="docutils literal notranslate"><span class="pre">ToolbarComponent.get_button_by_name()</span></code></a></li>
<li><a class="reference internal" href="#components.toolbar_component.ToolbarComponent.click_button"><code class="docutils literal notranslate"><span class="pre">ToolbarComponent.click_button()</span></code></a></li>
<li><a class="reference internal" href="#components.toolbar_component.ToolbarComponent.get_toolbar_title_text"><code class="docutils literal notranslate"><span class="pre">ToolbarComponent.get_toolbar_title_text()</span></code></a></li>
<li><a class="reference internal" href="#components.toolbar_component.ToolbarComponent.is_button_present"><code class="docutils literal notranslate"><span class="pre">ToolbarComponent.is_button_present()</span></code></a></li>
<li><a class="reference internal" href="#components.toolbar_component.ToolbarComponent.is_button_not_present"><code class="docutils literal notranslate"><span class="pre">ToolbarComponent.is_button_not_present()</span></code></a></li>
<li><a class="reference internal" href="#components.toolbar_component.ToolbarComponent.check_toolbar_presence"><code class="docutils literal notranslate"><span class="pre">ToolbarComponent.check_toolbar_presence()</span></code></a></li>
<li><a class="reference internal" href="#components.toolbar_component.ToolbarComponent.check_toolbar_presence_by_locator"><code class="docutils literal notranslate"><span class="pre">ToolbarComponent.check_toolbar_presence_by_locator()</span></code></a></li>
<li><a class="reference internal" href="#components.toolbar_component.ToolbarComponent.check_toolbar_presence_by_locator_and_title"><code class="docutils literal notranslate"><span class="pre">ToolbarComponent.check_toolbar_presence_by_locator_and_title()</span></code></a></li>
<li><a class="reference internal" href="#components.toolbar_component.ToolbarComponent.check_button_visibility"><code class="docutils literal notranslate"><span class="pre">ToolbarComponent.check_button_visibility()</span></code></a></li>
<li><a class="reference internal" href="#components.toolbar_component.ToolbarComponent.check_button_tooltip"><code class="docutils literal notranslate"><span class="pre">ToolbarComponent.check_button_tooltip()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#module-components">Module contents</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</nav>
@ -324,6 +369,7 @@
<div role="navigation" aria-label="Навигация по страницам">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="modules.html">e-nms_qa_automation</a></li>
<li class="breadcrumb-item active">components package</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/components.rst.txt" rel="nofollow"> Просмотреть исходный код страницы</a>
@ -2417,167 +2463,6 @@ alert-окон (error, success, info, warning) и проверки их сост
</dd></dl>
</section>
<section id="module-components.settings_form_component">
<span id="components-settings-form-component-module"></span><h2>components.settings_form_component module<a class="headerlink" href="#module-components.settings_form_component" title="Ссылка на этот заголовок"></a></h2>
<p>Модуль компонента формы ввода и отображения полей настроек. Содержит класс для работы с формами ввода
и отображения полей настроек,их элементами и проверками.</p>
<dl class="py class">
<dt class="sig sig-object py" id="components.settings_form_component.SettingsFormComponent">
<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">SettingsFormComponent</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">page</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/components/settings_form_component.html#SettingsFormComponent"><span class="viewcode-link"><span class="pre">[исходный</span> <span class="pre">код]</span></span></a><a class="headerlink" href="#components.settings_form_component.SettingsFormComponent" title="Ссылка на это определение"></a></dt>
<dd><p>Базовые классы: <a class="reference internal" href="#components.base_component.BaseComponent" title="components.base_component.BaseComponent"><code class="xref py py-class docutils literal notranslate"><span class="pre">BaseComponent</span></code></a></p>
<p>Компонент формы ввода и отображения полей настроек. Предоставляет методы для взаимодействия с формой,
ее содержимым и проверок.</p>
<dl class="field-list simple">
<dt class="field-odd">Параметры<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>page</strong> (<em>Page</em>)</p>
</dd>
</dl>
<dl class="py method">
<dt class="sig sig-object py" id="components.settings_form_component.SettingsFormComponent.__init__">
<span class="sig-name descname"><span class="pre">__init__</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">page</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/components/settings_form_component.html#SettingsFormComponent.__init__"><span class="viewcode-link"><span class="pre">[исходный</span> <span class="pre">код]</span></span></a><a class="headerlink" href="#components.settings_form_component.SettingsFormComponent.__init__" title="Ссылка на это определение"></a></dt>
<dd><p>Инициализация базового компонента.</p>
<dl class="field-list simple">
<dt class="field-odd">Параметры<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>page</strong> (<em>Page</em>) экземпляр страницы Playwright.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="components.settings_form_component.SettingsFormComponent.add_content_item">
<span class="sig-name descname"><span class="pre">add_content_item</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">name</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">item</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/components/settings_form_component.html#SettingsFormComponent.add_content_item"><span class="viewcode-link"><span class="pre">[исходный</span> <span class="pre">код]</span></span></a><a class="headerlink" href="#components.settings_form_component.SettingsFormComponent.add_content_item" title="Ссылка на это определение"></a></dt>
<dd><p>Добавляет элемент содержимого в форму по заданному имени.</p>
<dl class="field-list simple">
<dt class="field-odd">Параметры<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>name</strong> (<em>str</em>)</p></li>
<li><p><strong>item</strong> (<em>object</em>)</p></li>
</ul>
</dd>
<dt class="field-even">Тип результата<span class="colon">:</span></dt>
<dd class="field-even"><p><em>None</em></p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="components.settings_form_component.SettingsFormComponent.get_content_item">
<span class="sig-name descname"><span class="pre">get_content_item</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">name</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/components/settings_form_component.html#SettingsFormComponent.get_content_item"><span class="viewcode-link"><span class="pre">[исходный</span> <span class="pre">код]</span></span></a><a class="headerlink" href="#components.settings_form_component.SettingsFormComponent.get_content_item" title="Ссылка на это определение"></a></dt>
<dd><p>Возвращает элемент содержимого по имени или None, если не найден.</p>
<dl class="field-list simple">
<dt class="field-odd">Параметры<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>name</strong> (<em>str</em>)</p>
</dd>
<dt class="field-even">Тип результата<span class="colon">:</span></dt>
<dd class="field-even"><p><em>object</em> | <em>None</em></p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="components.settings_form_component.SettingsFormComponent.add_toolbar_title">
<span class="sig-name descname"><span class="pre">add_toolbar_title</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">title</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/components/settings_form_component.html#SettingsFormComponent.add_toolbar_title"><span class="viewcode-link"><span class="pre">[исходный</span> <span class="pre">код]</span></span></a><a class="headerlink" href="#components.settings_form_component.SettingsFormComponent.add_toolbar_title" title="Ссылка на это определение"></a></dt>
<dd><p>Добавляет заголовок в панель инструментов модального окна.</p>
<dl class="field-list simple">
<dt class="field-odd">Параметры<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>title</strong> (<em>str</em>)</p>
</dd>
<dt class="field-even">Тип результата<span class="colon">:</span></dt>
<dd class="field-even"><p><em>None</em></p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="components.settings_form_component.SettingsFormComponent.add_button">
<span class="sig-name descname"><span class="pre">add_button</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">locator</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">name</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/components/settings_form_component.html#SettingsFormComponent.add_button"><span class="viewcode-link"><span class="pre">[исходный</span> <span class="pre">код]</span></span></a><a class="headerlink" href="#components.settings_form_component.SettingsFormComponent.add_button" title="Ссылка на это определение"></a></dt>
<dd><p>Добавляет кнопку в форму.</p>
<dl class="field-list simple">
<dt class="field-odd">Параметры<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>locator</strong> (<em>str</em>)</p></li>
<li><p><strong>name</strong> (<em>str</em>)</p></li>
</ul>
</dd>
<dt class="field-even">Тип результата<span class="colon">:</span></dt>
<dd class="field-even"><p><em>None</em></p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="components.settings_form_component.SettingsFormComponent.get_button_by_name">
<span class="sig-name descname"><span class="pre">get_button_by_name</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">name</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/components/settings_form_component.html#SettingsFormComponent.get_button_by_name"><span class="viewcode-link"><span class="pre">[исходный</span> <span class="pre">код]</span></span></a><a class="headerlink" href="#components.settings_form_component.SettingsFormComponent.get_button_by_name" title="Ссылка на это определение"></a></dt>
<dd><p>Ищет и возвращает кнопку по имени или None, если не найдена.</p>
<dl class="field-list simple">
<dt class="field-odd">Параметры<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>name</strong> (<em>str</em>)</p>
</dd>
<dt class="field-even">Тип результата<span class="colon">:</span></dt>
<dd class="field-even"><p><a class="reference internal" href="elements.html#elements.button_element.Button" title="elements.button_element.Button"><em>Button</em></a> | <em>None</em></p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="components.settings_form_component.SettingsFormComponent.click_button">
<span class="sig-name descname"><span class="pre">click_button</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">name</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/components/settings_form_component.html#SettingsFormComponent.click_button"><span class="viewcode-link"><span class="pre">[исходный</span> <span class="pre">код]</span></span></a><a class="headerlink" href="#components.settings_form_component.SettingsFormComponent.click_button" title="Ссылка на это определение"></a></dt>
<dd><p>Кликает по кнопке с заданным именем. Вызывает ошибку, если не найдена.</p>
<dl class="field-list simple">
<dt class="field-odd">Параметры<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>name</strong> (<em>str</em>)</p>
</dd>
<dt class="field-even">Тип результата<span class="colon">:</span></dt>
<dd class="field-even"><p><em>None</em></p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="components.settings_form_component.SettingsFormComponent.check_vertical_scrolling">
<span class="sig-name descname"><span class="pre">check_vertical_scrolling</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">locator</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/components/settings_form_component.html#SettingsFormComponent.check_vertical_scrolling"><span class="viewcode-link"><span class="pre">[исходный</span> <span class="pre">код]</span></span></a><a class="headerlink" href="#components.settings_form_component.SettingsFormComponent.check_vertical_scrolling" title="Ссылка на это определение"></a></dt>
<dd><p>Проверяет возможность вертикальной прокрутки формы.</p>
<dl class="field-list simple">
<dt class="field-odd">Параметры<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>locator</strong> (<em>str</em><em> | </em><em>Locator</em>)</p>
</dd>
<dt class="field-even">Тип результата<span class="colon">:</span></dt>
<dd class="field-even"><p><em>bool</em></p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="components.settings_form_component.SettingsFormComponent.check_button_visibility">
<span class="sig-name descname"><span class="pre">check_button_visibility</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">name</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/components/settings_form_component.html#SettingsFormComponent.check_button_visibility"><span class="viewcode-link"><span class="pre">[исходный</span> <span class="pre">код]</span></span></a><a class="headerlink" href="#components.settings_form_component.SettingsFormComponent.check_button_visibility" title="Ссылка на это определение"></a></dt>
<dd><p>Проверяет наличие кнопки по имени. Вызывает ошибку, если не найдена.</p>
<dl class="field-list simple">
<dt class="field-odd">Параметры<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>name</strong> (<em>str</em>)</p>
</dd>
<dt class="field-even">Тип результата<span class="colon">:</span></dt>
<dd class="field-even"><p><em>None</em></p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="components.settings_form_component.SettingsFormComponent.should_be_toolbar">
<span class="sig-name descname"><span class="pre">should_be_toolbar</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/components/settings_form_component.html#SettingsFormComponent.should_be_toolbar"><span class="viewcode-link"><span class="pre">[исходный</span> <span class="pre">код]</span></span></a><a class="headerlink" href="#components.settings_form_component.SettingsFormComponent.should_be_toolbar" title="Ссылка на это определение"></a></dt>
<dd><p>Проверяет наличие тулбара.</p>
<dl class="field-list simple">
<dt class="field-odd">Исключение<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>AssertionError</strong> Если тулбар или кнопка редактирования отсутствуют.</p>
</dd>
<dt class="field-even">Тип результата<span class="colon">:</span></dt>
<dd class="field-even"><p><em>None</em></p>
</dd>
</dl>
</dd></dl>
</dd></dl>
</section>
<section id="module-components.table_component">
<span id="components-table-component-module"></span><h2>components.table_component module<a class="headerlink" href="#module-components.table_component" title="Ссылка на этот заголовок"></a></h2>
@ -3140,7 +3025,10 @@ None: конвертация невозможна</p>
</div>
</div>
<footer>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Нижняя область">
<a href="modules.html" class="btn btn-neutral float-left" title="e-nms_qa_automation" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Предыдущая</a>
<a href="components_derived.html" class="btn btn-neutral float-right" title="components_derived package" accesskey="n" rel="next">Следующая <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>

View File

@ -19,7 +19,9 @@
<script src="_static/translations.js?v=cd1d70c9"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="Алфавитный указатель" href="genindex.html" />
<link rel="search" title="Поиск" href="search.html" />
<link rel="search" title="Поиск" href="search.html" />
<link rel="next" title="conftest module" href="conftest.html" />
<link rel="prev" title="components package" href="components.html" />
</head>
<body class="wy-body-for-nav">
@ -41,176 +43,318 @@
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Меню навигации">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">components_derived package</a><ul>
<li><a class="reference internal" href="#submodules">Submodules</a></li>
<li><a class="reference internal" href="#module-components_derived.container_system_log_events">components_derived.container_system_log_events module</a><ul>
<li><a class="reference internal" href="#components_derived.container_system_log_events.SystemLogEventsContainer"><code class="docutils literal notranslate"><span class="pre">SystemLogEventsContainer</span></code></a><ul>
<li><a class="reference internal" href="#components_derived.container_system_log_events.SystemLogEventsContainer.__init__"><code class="docutils literal notranslate"><span class="pre">SystemLogEventsContainer.__init__()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.container_system_log_events.SystemLogEventsContainer.check_content"><code class="docutils literal notranslate"><span class="pre">SystemLogEventsContainer.check_content()</span></code></a></li>
<p class="caption" role="heading"><span class="caption-text">Содержание:</span></p>
<ul class="current">
<li class="toctree-l1 current"><a class="reference internal" href="modules.html">e-nms_qa_automation</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="components.html">components package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="components.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.alert_component">components.alert_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.alert_component.AlertComponent"><code class="docutils literal notranslate"><span class="pre">AlertComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.base_component">components.base_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.base_component.BaseComponent"><code class="docutils literal notranslate"><span class="pre">BaseComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.card_component">components.card_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.card_component.CardComponent"><code class="docutils literal notranslate"><span class="pre">CardComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.confirm_component">components.confirm_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.confirm_component.ConfirmComponent"><code class="docutils literal notranslate"><span class="pre">ConfirmComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.date_picker_component">components.date_picker_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.date_picker_component.DatePickerComponent"><code class="docutils literal notranslate"><span class="pre">DatePickerComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.dropdown_list_component">components.dropdown_list_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.dropdown_list_component.DropdownList"><code class="docutils literal notranslate"><span class="pre">DropdownList</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.eventbar_component">components.eventbar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.eventbar_component.EventPanelComponent"><code class="docutils literal notranslate"><span class="pre">EventPanelComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.events_container_component">components.events_container_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.events_container_component.EventsContainerComponent"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.json_container_component">components.json_container_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.json_container_component.JsonContainerComponent"><code class="docutils literal notranslate"><span class="pre">JsonContainerComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.modal_window_component">components.modal_window_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.modal_window_component.ModalWindowComponent"><code class="docutils literal notranslate"><span class="pre">ModalWindowComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.navbar_component">components.navbar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.navbar_component.NavigationPanelComponent"><code class="docutils literal notranslate"><span class="pre">NavigationPanelComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.table_component">components.table_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.table_component.TableComponent"><code class="docutils literal notranslate"><span class="pre">TableComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.toolbar_component">components.toolbar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.toolbar_component.ToolbarComponent"><code class="docutils literal notranslate"><span class="pre">ToolbarComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">components_derived package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="#module-components_derived.container_system_log_events">components_derived.container_system_log_events module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#components_derived.container_system_log_events.SystemLogEventsContainer"><code class="docutils literal notranslate"><span class="pre">SystemLogEventsContainer</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-components_derived.date_input_component">components_derived.date_input_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#components_derived.date_input_component.DateInput"><code class="docutils literal notranslate"><span class="pre">DateInput</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-components_derived.interactive_dropdown_list">components_derived.interactive_dropdown_list module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#components_derived.interactive_dropdown_list.InteractiveDropdownList"><code class="docutils literal notranslate"><span class="pre">InteractiveDropdownList</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-components_derived.modal_add_AD_user">components_derived.modal_add_AD_user module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#components_derived.modal_add_AD_user.AddADUserModalWindow"><code class="docutils literal notranslate"><span class="pre">AddADUserModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-components_derived.modal_add_local_user">components_derived.modal_add_local_user module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#components_derived.modal_add_local_user.AddLocalUserModalWindow"><code class="docutils literal notranslate"><span class="pre">AddLocalUserModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-components_derived.modal_change_password">components_derived.modal_change_password module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#components_derived.modal_change_password.ChangePasswordModalWindow"><code class="docutils literal notranslate"><span class="pre">ChangePasswordModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-components_derived.modal_edit_user">components_derived.modal_edit_user module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#components_derived.modal_edit_user.EditUserModalWindow"><code class="docutils literal notranslate"><span class="pre">EditUserModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-components_derived.modal_view_template">components_derived.modal_view_template module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#components_derived.modal_view_template.ViewTemplateModalWindow"><code class="docutils literal notranslate"><span class="pre">ViewTemplateModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-components_derived.modal_view_ztp_template">components_derived.modal_view_ztp_template module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#components_derived.modal_view_ztp_template.ViewZTPTemplateModalWindow"><code class="docutils literal notranslate"><span class="pre">ViewZTPTemplateModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-components_derived.selection_bar_component">components_derived.selection_bar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#components_derived.selection_bar_component.SelectionBarComponent"><code class="docutils literal notranslate"><span class="pre">SelectionBarComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-components_derived.settings_form_component">components_derived.settings_form_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#components_derived.settings_form_component.SettingsFormComponent"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-components_derived.sidebar_filter_component">components_derived.sidebar_filter_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#components_derived.sidebar_filter_component.SidebarFilterComponent"><code class="docutils literal notranslate"><span class="pre">SidebarFilterComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-components_derived.user_card">components_derived.user_card module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#components_derived.user_card.UserCard"><code class="docutils literal notranslate"><span class="pre">UserCard</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-components_derived">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="conftest.html">conftest module</a><ul>
<li class="toctree-l3"><a class="reference internal" href="conftest.html#conftest.pytest_sessionfinish"><code class="docutils literal notranslate"><span class="pre">pytest_sessionfinish()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="conftest.html#conftest.pytest_addoption"><code class="docutils literal notranslate"><span class="pre">pytest_addoption()</span></code></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="data.html">data package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="data.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="data.html#module-data.constants">data.constants module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="data.html#data.constants.Constants"><code class="docutils literal notranslate"><span class="pre">Constants</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="data.html#module-data.environment">data.environment module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="data.html#data.environment.Environment"><code class="docutils literal notranslate"><span class="pre">Environment</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="data.html#module-data.roles_dict">data.roles_dict module</a></li>
<li class="toctree-l3"><a class="reference internal" href="data.html#module-data">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="elements.html">elements package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="elements.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.base_element">elements.base_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.base_element.BaseElement"><code class="docutils literal notranslate"><span class="pre">BaseElement</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.button_element">elements.button_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.button_element.Button"><code class="docutils literal notranslate"><span class="pre">Button</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.checkbox_element">elements.checkbox_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.checkbox_element.Checkbox"><code class="docutils literal notranslate"><span class="pre">Checkbox</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.icon_element">elements.icon_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.icon_element.Icon"><code class="docutils literal notranslate"><span class="pre">Icon</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.tab_button_element">elements.tab_button_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.tab_button_element.TabButton"><code class="docutils literal notranslate"><span class="pre">TabButton</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.text_element">elements.text_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.text_element.Text"><code class="docutils literal notranslate"><span class="pre">Text</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.text_input_element">elements.text_input_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.text_input_element.TextInput"><code class="docutils literal notranslate"><span class="pre">TextInput</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.tooltip_button_element">elements.tooltip_button_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.tooltip_button_element.TooltipButton"><code class="docutils literal notranslate"><span class="pre">TooltipButton</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="fixtures.html">fixtures package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="fixtures.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="fixtures.html#module-fixtures.pages">fixtures.pages module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.pytest_addoption"><code class="docutils literal notranslate"><span class="pre">pytest_addoption()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.browser"><code class="docutils literal notranslate"><span class="pre">browser()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.get_firefox_browser"><code class="docutils literal notranslate"><span class="pre">get_firefox_browser()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.get_chrome_browser"><code class="docutils literal notranslate"><span class="pre">get_chrome_browser()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.get_remote_chrome"><code class="docutils literal notranslate"><span class="pre">get_remote_chrome()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.get_context"><code class="docutils literal notranslate"><span class="pre">get_context()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.return_back"><code class="docutils literal notranslate"><span class="pre">return_back()</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="fixtures.html#module-fixtures">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="pages.html">pages package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="pages.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.base_page">pages.base_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.base_page.BasePage"><code class="docutils literal notranslate"><span class="pre">BasePage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.current_session_tab">pages.current_session_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.current_session_tab.CurrentSessionsTab"><code class="docutils literal notranslate"><span class="pre">CurrentSessionsTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.license_tab">pages.license_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.license_tab.LicenseTab"><code class="docutils literal notranslate"><span class="pre">LicenseTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.login_page">pages.login_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.login_page.LoginPage"><code class="docutils literal notranslate"><span class="pre">LoginPage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.main_page">pages.main_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.main_page.MainPage"><code class="docutils literal notranslate"><span class="pre">MainPage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.push_notifications_settings_tab">pages.push_notifications_settings_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab"><code class="docutils literal notranslate"><span class="pre">PushNotificationsSettingsTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.service_status_tab">pages.service_status_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.service_status_tab.ServiceStatusTab"><code class="docutils literal notranslate"><span class="pre">ServiceStatusTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.session_settings_tab">pages.session_settings_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.session_settings_tab.SessionSettingsTab"><code class="docutils literal notranslate"><span class="pre">SessionSettingsTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.templates_tab">pages.templates_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.templates_tab.TemplatesTab"><code class="docutils literal notranslate"><span class="pre">TemplatesTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.users_tab">pages.users_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.users_tab.UsersTab"><code class="docutils literal notranslate"><span class="pre">UsersTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.ztp_config_tab">pages.ztp_config_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.ztp_config_tab.ZTPConfigTab"><code class="docutils literal notranslate"><span class="pre">ZTPConfigTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.ztp_templates_tab">pages.ztp_templates_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.ztp_templates_tab.ZTPTemplatesTab"><code class="docutils literal notranslate"><span class="pre">ZTPTemplatesTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="tools.html">tools package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="tools.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="tools.html#module-tools.fix_python_project">tools.fix_python_project module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="tools.html#tools.fix_python_project.ProjectFixer"><code class="docutils literal notranslate"><span class="pre">ProjectFixer</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="tools.html#module-tools.logger">tools.logger module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="tools.html#tools.logger.get_logger"><code class="docutils literal notranslate"><span class="pre">get_logger()</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="tools.html#module-tools">Module contents</a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#module-components_derived.date_input_component">components_derived.date_input_component module</a><ul>
<li><a class="reference internal" href="#components_derived.date_input_component.DateInput"><code class="docutils literal notranslate"><span class="pre">DateInput</span></code></a><ul>
<li><a class="reference internal" href="#components_derived.date_input_component.DateInput.__init__"><code class="docutils literal notranslate"><span class="pre">DateInput.__init__()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.date_input_component.DateInput.click_switch_mode_button"><code class="docutils literal notranslate"><span class="pre">DateInput.click_switch_mode_button()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.date_input_component.DateInput.get_date_picker"><code class="docutils literal notranslate"><span class="pre">DateInput.get_date_picker()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.date_input_component.DateInput.get_date_field_value"><code class="docutils literal notranslate"><span class="pre">DateInput.get_date_field_value()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.date_input_component.DateInput.get_time_field_value"><code class="docutils literal notranslate"><span class="pre">DateInput.get_time_field_value()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.date_input_component.DateInput.input_date"><code class="docutils literal notranslate"><span class="pre">DateInput.input_date()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.date_input_component.DateInput.input_time"><code class="docutils literal notranslate"><span class="pre">DateInput.input_time()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.date_input_component.DateInput.check_content"><code class="docutils literal notranslate"><span class="pre">DateInput.check_content()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.date_input_component.DateInput.check_switch_mode_button_visibility"><code class="docutils literal notranslate"><span class="pre">DateInput.check_switch_mode_button_visibility()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.date_input_component.DateInput.is_text_input_mode"><code class="docutils literal notranslate"><span class="pre">DateInput.is_text_input_mode()</span></code></a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Документация и руководства:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="sphinx_guide.html">Руководство по документации тестов с помощью Sphinx</a><ul>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id2">1 Расположение документа</a></li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id3">2 Первичная настройка для нового проекта</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id4">2.1 Подготовка зависимостей</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id5">2.2 Инициализация Sphinx</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id6">2.3 Настройка конфигурации</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id7">2.4 Настройка главной страницы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id8">3 Работа с существующим проектом</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id9">3.1 Установка зависимостей</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id10">3.2 Генерация документации</a><ul>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id11">3.2.1 Базовая генерация</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id12">3.2.2 Генерация с исключениями</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id13">3.2.3 Принудительная перегенерация</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id14">3.3 Очистка документации</a><ul>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id15">3.3.1 Команды очистки</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id16">3.3.2 Автоматизация очистки</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id17">3.4 Сборка и деплой</a><ul>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id18">3.4.1 Локальная сборка</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id19">3.4.2 Проверка качества</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id20">3.4.3 Сборка для публикации</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#ci-cd">3.4.4 Настройка для CI/CD</a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#module-components_derived.modal_add_AD_user">components_derived.modal_add_AD_user module</a><ul>
<li><a class="reference internal" href="#components_derived.modal_add_AD_user.AddADUserModalWindow"><code class="docutils literal notranslate"><span class="pre">AddADUserModalWindow</span></code></a><ul>
<li><a class="reference internal" href="#components_derived.modal_add_AD_user.AddADUserModalWindow.__init__"><code class="docutils literal notranslate"><span class="pre">AddADUserModalWindow.__init__()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.modal_add_AD_user.AddADUserModalWindow.check_active_directory_checkbox"><code class="docutils literal notranslate"><span class="pre">AddADUserModalWindow.check_active_directory_checkbox()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.modal_add_AD_user.AddADUserModalWindow.uncheck_active_directory_checkbox"><code class="docutils literal notranslate"><span class="pre">AddADUserModalWindow.uncheck_active_directory_checkbox()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.modal_add_AD_user.AddADUserModalWindow.check_blocking_checkbox"><code class="docutils literal notranslate"><span class="pre">AddADUserModalWindow.check_blocking_checkbox()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.modal_add_AD_user.AddADUserModalWindow.uncheck_blocking_checkbox"><code class="docutils literal notranslate"><span class="pre">AddADUserModalWindow.uncheck_blocking_checkbox()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.modal_add_AD_user.AddADUserModalWindow.check_push_notification_checkbox"><code class="docutils literal notranslate"><span class="pre">AddADUserModalWindow.check_push_notification_checkbox()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.modal_add_AD_user.AddADUserModalWindow.uncheck_push_notification_checkbox"><code class="docutils literal notranslate"><span class="pre">AddADUserModalWindow.uncheck_push_notification_checkbox()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.modal_add_AD_user.AddADUserModalWindow.update_input_form_fields"><code class="docutils literal notranslate"><span class="pre">AddADUserModalWindow.update_input_form_fields()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.modal_add_AD_user.AddADUserModalWindow.new_user"><code class="docutils literal notranslate"><span class="pre">AddADUserModalWindow.new_user()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.modal_add_AD_user.AddADUserModalWindow.close_window"><code class="docutils literal notranslate"><span class="pre">AddADUserModalWindow.close_window()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.modal_add_AD_user.AddADUserModalWindow.close_window_by_toolbar_button"><code class="docutils literal notranslate"><span class="pre">AddADUserModalWindow.close_window_by_toolbar_button()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.modal_add_AD_user.AddADUserModalWindow.check_content"><code class="docutils literal notranslate"><span class="pre">AddADUserModalWindow.check_content()</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#mkdocs-sphinx">4 Конвертация контента из MkDocs в Sphinx</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id21">4.1 Текст</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id22">4.2 Таблицы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id23">5 Особенности Sphinx</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#docstrings">5.1 Поддержка docstrings</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id24">5.2 Кастомные директивы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id25">6 Решение проблем</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id26">6.1 Проблема: Модули не находятся</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id27">6.2 Проблема: Не генерируются docstrings</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id28">6.3 Проблема: Тема не применяется</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id29">7 Дополнительные возможности</a></li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#version-history">История версий</a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#module-components_derived.modal_add_local_user">components_derived.modal_add_local_user module</a><ul>
<li><a class="reference internal" href="#components_derived.modal_add_local_user.AddLocalUserModalWindow"><code class="docutils literal notranslate"><span class="pre">AddLocalUserModalWindow</span></code></a><ul>
<li><a class="reference internal" href="#components_derived.modal_add_local_user.AddLocalUserModalWindow.__init__"><code class="docutils literal notranslate"><span class="pre">AddLocalUserModalWindow.__init__()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.modal_add_local_user.AddLocalUserModalWindow.check_active_directory_checkbox"><code class="docutils literal notranslate"><span class="pre">AddLocalUserModalWindow.check_active_directory_checkbox()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.modal_add_local_user.AddLocalUserModalWindow.uncheck_active_directory_checkbox"><code class="docutils literal notranslate"><span class="pre">AddLocalUserModalWindow.uncheck_active_directory_checkbox()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.modal_add_local_user.AddLocalUserModalWindow.check_blocking_checkbox"><code class="docutils literal notranslate"><span class="pre">AddLocalUserModalWindow.check_blocking_checkbox()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.modal_add_local_user.AddLocalUserModalWindow.uncheck_blocking_checkbox"><code class="docutils literal notranslate"><span class="pre">AddLocalUserModalWindow.uncheck_blocking_checkbox()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.modal_add_local_user.AddLocalUserModalWindow.check_push_notification_checkbox"><code class="docutils literal notranslate"><span class="pre">AddLocalUserModalWindow.check_push_notification_checkbox()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.modal_add_local_user.AddLocalUserModalWindow.uncheck_push_notification_checkbox"><code class="docutils literal notranslate"><span class="pre">AddLocalUserModalWindow.uncheck_push_notification_checkbox()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.modal_add_local_user.AddLocalUserModalWindow.new_user"><code class="docutils literal notranslate"><span class="pre">AddLocalUserModalWindow.new_user()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.modal_add_local_user.AddLocalUserModalWindow.close_window"><code class="docutils literal notranslate"><span class="pre">AddLocalUserModalWindow.close_window()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.modal_add_local_user.AddLocalUserModalWindow.close_window_by_toolbar_button"><code class="docutils literal notranslate"><span class="pre">AddLocalUserModalWindow.close_window_by_toolbar_button()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.modal_add_local_user.AddLocalUserModalWindow.check_content"><code class="docutils literal notranslate"><span class="pre">AddLocalUserModalWindow.check_content()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#module-components_derived.modal_change_password">components_derived.modal_change_password module</a><ul>
<li><a class="reference internal" href="#components_derived.modal_change_password.ChangePasswordModalWindow"><code class="docutils literal notranslate"><span class="pre">ChangePasswordModalWindow</span></code></a><ul>
<li><a class="reference internal" href="#components_derived.modal_change_password.ChangePasswordModalWindow.__init__"><code class="docutils literal notranslate"><span class="pre">ChangePasswordModalWindow.__init__()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.modal_change_password.ChangePasswordModalWindow.click_cancel_button"><code class="docutils literal notranslate"><span class="pre">ChangePasswordModalWindow.click_cancel_button()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.modal_change_password.ChangePasswordModalWindow.click_old_password_hidden_icon"><code class="docutils literal notranslate"><span class="pre">ChangePasswordModalWindow.click_old_password_hidden_icon()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.modal_change_password.ChangePasswordModalWindow.click_new_password_hidden_icon"><code class="docutils literal notranslate"><span class="pre">ChangePasswordModalWindow.click_new_password_hidden_icon()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.modal_change_password.ChangePasswordModalWindow.click_confirm_password_hidden_icon"><code class="docutils literal notranslate"><span class="pre">ChangePasswordModalWindow.click_confirm_password_hidden_icon()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.modal_change_password.ChangePasswordModalWindow.change_password"><code class="docutils literal notranslate"><span class="pre">ChangePasswordModalWindow.change_password()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.modal_change_password.ChangePasswordModalWindow.get_password_inputs"><code class="docutils literal notranslate"><span class="pre">ChangePasswordModalWindow.get_password_inputs()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.modal_change_password.ChangePasswordModalWindow.check_content"><code class="docutils literal notranslate"><span class="pre">ChangePasswordModalWindow.check_content()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.modal_change_password.ChangePasswordModalWindow.check_error_message"><code class="docutils literal notranslate"><span class="pre">ChangePasswordModalWindow.check_error_message()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#module-components_derived.modal_edit_user">components_derived.modal_edit_user module</a><ul>
<li><a class="reference internal" href="#components_derived.modal_edit_user.EditUserModalWindow"><code class="docutils literal notranslate"><span class="pre">EditUserModalWindow</span></code></a><ul>
<li><a class="reference internal" href="#components_derived.modal_edit_user.EditUserModalWindow.__init__"><code class="docutils literal notranslate"><span class="pre">EditUserModalWindow.__init__()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.modal_edit_user.EditUserModalWindow.check_blocking_checkbox"><code class="docutils literal notranslate"><span class="pre">EditUserModalWindow.check_blocking_checkbox()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.modal_edit_user.EditUserModalWindow.uncheck_blocking_checkbox"><code class="docutils literal notranslate"><span class="pre">EditUserModalWindow.uncheck_blocking_checkbox()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.modal_edit_user.EditUserModalWindow.check_push_notification_checkbox"><code class="docutils literal notranslate"><span class="pre">EditUserModalWindow.check_push_notification_checkbox()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.modal_edit_user.EditUserModalWindow.uncheck_push_notification_checkbox"><code class="docutils literal notranslate"><span class="pre">EditUserModalWindow.uncheck_push_notification_checkbox()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.modal_edit_user.EditUserModalWindow.close_window"><code class="docutils literal notranslate"><span class="pre">EditUserModalWindow.close_window()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.modal_edit_user.EditUserModalWindow.close_window_by_toolbar_button"><code class="docutils literal notranslate"><span class="pre">EditUserModalWindow.close_window_by_toolbar_button()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.modal_edit_user.EditUserModalWindow.delete_user"><code class="docutils literal notranslate"><span class="pre">EditUserModalWindow.delete_user()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.modal_edit_user.EditUserModalWindow.edit_user"><code class="docutils literal notranslate"><span class="pre">EditUserModalWindow.edit_user()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.modal_edit_user.EditUserModalWindow.reset_password"><code class="docutils literal notranslate"><span class="pre">EditUserModalWindow.reset_password()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.modal_edit_user.EditUserModalWindow.check_content"><code class="docutils literal notranslate"><span class="pre">EditUserModalWindow.check_content()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#module-components_derived.modal_view_template">components_derived.modal_view_template module</a><ul>
<li><a class="reference internal" href="#components_derived.modal_view_template.ViewTemplateModalWindow"><code class="docutils literal notranslate"><span class="pre">ViewTemplateModalWindow</span></code></a><ul>
<li><a class="reference internal" href="#components_derived.modal_view_template.ViewTemplateModalWindow.__init__"><code class="docutils literal notranslate"><span class="pre">ViewTemplateModalWindow.__init__()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.modal_view_template.ViewTemplateModalWindow.close_window_by_toolbar_button"><code class="docutils literal notranslate"><span class="pre">ViewTemplateModalWindow.close_window_by_toolbar_button()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.modal_view_template.ViewTemplateModalWindow.check_content"><code class="docutils literal notranslate"><span class="pre">ViewTemplateModalWindow.check_content()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.modal_view_template.ViewTemplateModalWindow.verify_json_container_content"><code class="docutils literal notranslate"><span class="pre">ViewTemplateModalWindow.verify_json_container_content()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#module-components_derived.modal_view_ztp_template">components_derived.modal_view_ztp_template module</a><ul>
<li><a class="reference internal" href="#components_derived.modal_view_ztp_template.ViewZTPTemplateModalWindow"><code class="docutils literal notranslate"><span class="pre">ViewZTPTemplateModalWindow</span></code></a><ul>
<li><a class="reference internal" href="#components_derived.modal_view_ztp_template.ViewZTPTemplateModalWindow.__init__"><code class="docutils literal notranslate"><span class="pre">ViewZTPTemplateModalWindow.__init__()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.modal_view_ztp_template.ViewZTPTemplateModalWindow.close_window"><code class="docutils literal notranslate"><span class="pre">ViewZTPTemplateModalWindow.close_window()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.modal_view_ztp_template.ViewZTPTemplateModalWindow.close_window_by_toolbar_button"><code class="docutils literal notranslate"><span class="pre">ViewZTPTemplateModalWindow.close_window_by_toolbar_button()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.modal_view_ztp_template.ViewZTPTemplateModalWindow.check_content"><code class="docutils literal notranslate"><span class="pre">ViewZTPTemplateModalWindow.check_content()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.modal_view_ztp_template.ViewZTPTemplateModalWindow.get_modal_window_data"><code class="docutils literal notranslate"><span class="pre">ViewZTPTemplateModalWindow.get_modal_window_data()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.modal_view_ztp_template.ViewZTPTemplateModalWindow._is_ztp_field_code"><code class="docutils literal notranslate"><span class="pre">ViewZTPTemplateModalWindow._is_ztp_field_code()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.modal_view_ztp_template.ViewZTPTemplateModalWindow.compare_modal_with_api_data"><code class="docutils literal notranslate"><span class="pre">ViewZTPTemplateModalWindow.compare_modal_with_api_data()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#module-components_derived.selection_bar_component">components_derived.selection_bar_component module</a><ul>
<li><a class="reference internal" href="#components_derived.selection_bar_component.SelectionBarComponent"><code class="docutils literal notranslate"><span class="pre">SelectionBarComponent</span></code></a><ul>
<li><a class="reference internal" href="#components_derived.selection_bar_component.SelectionBarComponent.__init__"><code class="docutils literal notranslate"><span class="pre">SelectionBarComponent.__init__()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.selection_bar_component.SelectionBarComponent.clear_selections"><code class="docutils literal notranslate"><span class="pre">SelectionBarComponent.clear_selections()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.selection_bar_component.SelectionBarComponent.get_available_options"><code class="docutils literal notranslate"><span class="pre">SelectionBarComponent.get_available_options()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.selection_bar_component.SelectionBarComponent.get_selection_bar_title"><code class="docutils literal notranslate"><span class="pre">SelectionBarComponent.get_selection_bar_title()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.selection_bar_component.SelectionBarComponent.get_selected_values"><code class="docutils literal notranslate"><span class="pre">SelectionBarComponent.get_selected_values()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.selection_bar_component.SelectionBarComponent.clear_combobox_field"><code class="docutils literal notranslate"><span class="pre">SelectionBarComponent.clear_combobox_field()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.selection_bar_component.SelectionBarComponent.open_values_list"><code class="docutils literal notranslate"><span class="pre">SelectionBarComponent.open_values_list()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.selection_bar_component.SelectionBarComponent.select_value"><code class="docutils literal notranslate"><span class="pre">SelectionBarComponent.select_value()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.selection_bar_component.SelectionBarComponent.wait_for_timeout"><code class="docutils literal notranslate"><span class="pre">SelectionBarComponent.wait_for_timeout()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.selection_bar_component.SelectionBarComponent.check_field_highlighted_error"><code class="docutils literal notranslate"><span class="pre">SelectionBarComponent.check_field_highlighted_error()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.selection_bar_component.SelectionBarComponent.check_field_not_highlighted_error"><code class="docutils literal notranslate"><span class="pre">SelectionBarComponent.check_field_not_highlighted_error()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#module-components_derived.sidebar_filter_component">components_derived.sidebar_filter_component module</a><ul>
<li><a class="reference internal" href="#components_derived.sidebar_filter_component.SidebarFilterComponent"><code class="docutils literal notranslate"><span class="pre">SidebarFilterComponent</span></code></a><ul>
<li><a class="reference internal" href="#components_derived.sidebar_filter_component.SidebarFilterComponent.__init__"><code class="docutils literal notranslate"><span class="pre">SidebarFilterComponent.__init__()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.sidebar_filter_component.SidebarFilterComponent.add_filtering_parameter"><code class="docutils literal notranslate"><span class="pre">SidebarFilterComponent.add_filtering_parameter()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.sidebar_filter_component.SidebarFilterComponent.get_filtering_parameter"><code class="docutils literal notranslate"><span class="pre">SidebarFilterComponent.get_filtering_parameter()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.sidebar_filter_component.SidebarFilterComponent.get_start_time_filter"><code class="docutils literal notranslate"><span class="pre">SidebarFilterComponent.get_start_time_filter()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.sidebar_filter_component.SidebarFilterComponent.get_finish_time_filter"><code class="docutils literal notranslate"><span class="pre">SidebarFilterComponent.get_finish_time_filter()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.sidebar_filter_component.SidebarFilterComponent.click_apply_button"><code class="docutils literal notranslate"><span class="pre">SidebarFilterComponent.click_apply_button()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.sidebar_filter_component.SidebarFilterComponent.click_reset_button"><code class="docutils literal notranslate"><span class="pre">SidebarFilterComponent.click_reset_button()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.sidebar_filter_component.SidebarFilterComponent.check_content"><code class="docutils literal notranslate"><span class="pre">SidebarFilterComponent.check_content()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.sidebar_filter_component.SidebarFilterComponent.check_vertical_scrolling"><code class="docutils literal notranslate"><span class="pre">SidebarFilterComponent.check_vertical_scrolling()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.sidebar_filter_component.SidebarFilterComponent.check_apply_button_visibility"><code class="docutils literal notranslate"><span class="pre">SidebarFilterComponent.check_apply_button_visibility()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.sidebar_filter_component.SidebarFilterComponent.check_reset_button_visibility"><code class="docutils literal notranslate"><span class="pre">SidebarFilterComponent.check_reset_button_visibility()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.sidebar_filter_component.SidebarFilterComponent.should_be_toolbar"><code class="docutils literal notranslate"><span class="pre">SidebarFilterComponent.should_be_toolbar()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#module-components_derived.user_card">components_derived.user_card module</a><ul>
<li><a class="reference internal" href="#components_derived.user_card.UserCard"><code class="docutils literal notranslate"><span class="pre">UserCard</span></code></a><ul>
<li><a class="reference internal" href="#components_derived.user_card.UserCard.__init__"><code class="docutils literal notranslate"><span class="pre">UserCard.__init__()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.user_card.UserCard.click_change_password_button"><code class="docutils literal notranslate"><span class="pre">UserCard.click_change_password_button()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.user_card.UserCard.click_logout_button"><code class="docutils literal notranslate"><span class="pre">UserCard.click_logout_button()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.user_card.UserCard.click_close_button"><code class="docutils literal notranslate"><span class="pre">UserCard.click_close_button()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.user_card.UserCard.check_content"><code class="docutils literal notranslate"><span class="pre">UserCard.check_content()</span></code></a></li>
<li><a class="reference internal" href="#components_derived.user_card.UserCard.check_card_is_closed"><code class="docutils literal notranslate"><span class="pre">UserCard.check_card_is_closed()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#module-components_derived">Module contents</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</nav>
@ -225,6 +369,7 @@
<div role="navigation" aria-label="Навигация по страницам">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="modules.html">e-nms_qa_automation</a></li>
<li class="breadcrumb-item active">components_derived package</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/components_derived.rst.txt" rel="nofollow"> Просмотреть исходный код страницы</a>
@ -430,6 +575,97 @@
</dd></dl>
</section>
<section id="module-components_derived.interactive_dropdown_list">
<span id="components-derived-interactive-dropdown-list-module"></span><h2>components_derived.interactive_dropdown_list module<a class="headerlink" href="#module-components_derived.interactive_dropdown_list" title="Ссылка на этот заголовок"></a></h2>
<p>Модуль interactive_dropdown_list_component содержит класс для работы с интерактивными выпадающими списками,
позволяющими сделать выбор нескольких элементов.</p>
<p>Класс InteractiveDropdownList наследует базовый функционал BaseComponent и добавляет
методы для взаимодействия с интерактивными выпадающими списками на странице.</p>
<dl class="py class">
<dt class="sig sig-object py" id="components_derived.interactive_dropdown_list.InteractiveDropdownList">
<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">InteractiveDropdownList</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">page</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/components_derived/interactive_dropdown_list.html#InteractiveDropdownList"><span class="viewcode-link"><span class="pre">[исходный</span> <span class="pre">код]</span></span></a><a class="headerlink" href="#components_derived.interactive_dropdown_list.InteractiveDropdownList" title="Ссылка на это определение"></a></dt>
<dd><p>Базовые классы: <a class="reference internal" href="components.html#components.base_component.BaseComponent" title="components.base_component.BaseComponent"><code class="xref py py-class docutils literal notranslate"><span class="pre">BaseComponent</span></code></a></p>
<p>Класс для работы с выпадающими списками.</p>
<p>Наследует функциональность BaseElement и добавляет специфичные
методы для выбора и проверки элементов списка.</p>
<dl class="field-list simple">
<dt class="field-odd">Параметры<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>page</strong> (<em>Page</em>)</p>
</dd>
</dl>
<dl class="py method">
<dt class="sig sig-object py" id="components_derived.interactive_dropdown_list.InteractiveDropdownList.__init__">
<span class="sig-name descname"><span class="pre">__init__</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">page</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/components_derived/interactive_dropdown_list.html#InteractiveDropdownList.__init__"><span class="viewcode-link"><span class="pre">[исходный</span> <span class="pre">код]</span></span></a><a class="headerlink" href="#components_derived.interactive_dropdown_list.InteractiveDropdownList.__init__" title="Ссылка на это определение"></a></dt>
<dd><p>Инициализирует компонент интерактивного выпадающего списка.</p>
<dl class="field-list simple">
<dt class="field-odd">Параметры<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>page</strong> (<em>Page</em>) Экземпляр страницы Playwright.</p>
</dd>
<dt class="field-even">Тип результата<span class="colon">:</span></dt>
<dd class="field-even"><p><em>None</em></p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="components_derived.interactive_dropdown_list.InteractiveDropdownList.get_checkbox_locator">
<span class="sig-name descname"><span class="pre">get_checkbox_locator</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">text</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/components_derived/interactive_dropdown_list.html#InteractiveDropdownList.get_checkbox_locator"><span class="viewcode-link"><span class="pre">[исходный</span> <span class="pre">код]</span></span></a><a class="headerlink" href="#components_derived.interactive_dropdown_list.InteractiveDropdownList.get_checkbox_locator" title="Ссылка на это определение"></a></dt>
<dd><p>Возвращает локатор чек-бокса для элемента списка с указанным текстом.</p>
<dl class="field-list simple">
<dt class="field-odd">Параметры<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>text</strong> (<em>str</em>) Текст элемента для выбора.</p>
</dd>
<dt class="field-even">Тип результата<span class="colon">:</span></dt>
<dd class="field-even"><p><em>Locator</em></p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="components_derived.interactive_dropdown_list.InteractiveDropdownList.deselect_item_with_text">
<span class="sig-name descname"><span class="pre">deselect_item_with_text</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">text</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/components_derived/interactive_dropdown_list.html#InteractiveDropdownList.deselect_item_with_text"><span class="viewcode-link"><span class="pre">[исходный</span> <span class="pre">код]</span></span></a><a class="headerlink" href="#components_derived.interactive_dropdown_list.InteractiveDropdownList.deselect_item_with_text" title="Ссылка на это определение"></a></dt>
<dd><p>Выбирает элемент списка по указанному тексту.</p>
<dl class="field-list simple">
<dt class="field-odd">Параметры<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>text</strong> (<em>str</em>) Текст элемента для выбора.</p>
</dd>
<dt class="field-even">Тип результата<span class="colon">:</span></dt>
<dd class="field-even"><p><em>None</em></p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="components_derived.interactive_dropdown_list.InteractiveDropdownList.select_item_with_text">
<span class="sig-name descname"><span class="pre">select_item_with_text</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">text</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/components_derived/interactive_dropdown_list.html#InteractiveDropdownList.select_item_with_text"><span class="viewcode-link"><span class="pre">[исходный</span> <span class="pre">код]</span></span></a><a class="headerlink" href="#components_derived.interactive_dropdown_list.InteractiveDropdownList.select_item_with_text" title="Ссылка на это определение"></a></dt>
<dd><p>Выбирает элемент списка по указанному тексту.</p>
<dl class="field-list simple">
<dt class="field-odd">Параметры<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>text</strong> (<em>str</em>) Текст элемента для выбора.</p>
</dd>
<dt class="field-even">Тип результата<span class="colon">:</span></dt>
<dd class="field-even"><p><em>None</em></p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="components_derived.interactive_dropdown_list.InteractiveDropdownList.get_selected_items">
<span class="sig-name descname"><span class="pre">get_selected_items</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">locator</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/components_derived/interactive_dropdown_list.html#InteractiveDropdownList.get_selected_items"><span class="viewcode-link"><span class="pre">[исходный</span> <span class="pre">код]</span></span></a><a class="headerlink" href="#components_derived.interactive_dropdown_list.InteractiveDropdownList.get_selected_items" title="Ссылка на это определение"></a></dt>
<dd><p>Возвращает список отмеченных элементов.</p>
<dl class="field-list simple">
<dt class="field-odd">Параметры<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>locator</strong> (<em>str</em><em> | </em><em>Locator</em>)</p>
</dd>
<dt class="field-even">Тип результата<span class="colon">:</span></dt>
<dd class="field-even"><p><em>list</em>[<em>str</em>]</p>
</dd>
</dl>
</dd></dl>
</dd></dl>
</section>
<section id="module-components_derived.modal_add_AD_user">
<span id="components-derived-modal-add-ad-user-module"></span><h2>components_derived.modal_add_AD_user module<a class="headerlink" href="#module-components_derived.modal_add_AD_user" title="Ссылка на этот заголовок"></a></h2>
@ -1243,6 +1479,201 @@
</dd></dl>
</section>
<section id="module-components_derived.settings_form_component">
<span id="components-derived-settings-form-component-module"></span><h2>components_derived.settings_form_component module<a class="headerlink" href="#module-components_derived.settings_form_component" title="Ссылка на этот заголовок"></a></h2>
<p>Модуль компонента формы ввода и отображения полей настроек. Содержит класс для работы с формами ввода
и отображения полей настроек,их элементами и проверками.</p>
<dl class="py class">
<dt class="sig sig-object py" id="components_derived.settings_form_component.SettingsFormComponent">
<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">SettingsFormComponent</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">page</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/components_derived/settings_form_component.html#SettingsFormComponent"><span class="viewcode-link"><span class="pre">[исходный</span> <span class="pre">код]</span></span></a><a class="headerlink" href="#components_derived.settings_form_component.SettingsFormComponent" title="Ссылка на это определение"></a></dt>
<dd><p>Базовые классы: <a class="reference internal" href="components.html#components.base_component.BaseComponent" title="components.base_component.BaseComponent"><code class="xref py py-class docutils literal notranslate"><span class="pre">BaseComponent</span></code></a></p>
<p>Компонент формы ввода и отображения полей настроек. Предоставляет методы для взаимодействия с формой,
ее содержимым и проверок.</p>
<dl class="field-list simple">
<dt class="field-odd">Параметры<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>page</strong> (<em>Page</em>)</p>
</dd>
</dl>
<dl class="py method">
<dt class="sig sig-object py" id="components_derived.settings_form_component.SettingsFormComponent.__init__">
<span class="sig-name descname"><span class="pre">__init__</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">page</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/components_derived/settings_form_component.html#SettingsFormComponent.__init__"><span class="viewcode-link"><span class="pre">[исходный</span> <span class="pre">код]</span></span></a><a class="headerlink" href="#components_derived.settings_form_component.SettingsFormComponent.__init__" title="Ссылка на это определение"></a></dt>
<dd><p>Инициализация базового компонента.</p>
<dl class="field-list simple">
<dt class="field-odd">Параметры<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>page</strong> (<em>Page</em>) экземпляр страницы Playwright.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="components_derived.settings_form_component.SettingsFormComponent.add_content_item">
<span class="sig-name descname"><span class="pre">add_content_item</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">name</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">item</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/components_derived/settings_form_component.html#SettingsFormComponent.add_content_item"><span class="viewcode-link"><span class="pre">[исходный</span> <span class="pre">код]</span></span></a><a class="headerlink" href="#components_derived.settings_form_component.SettingsFormComponent.add_content_item" title="Ссылка на это определение"></a></dt>
<dd><p>Добавляет элемент содержимого в форму по заданному имени.</p>
<dl class="field-list simple">
<dt class="field-odd">Параметры<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>name</strong> (<em>str</em>)</p></li>
<li><p><strong>item</strong> (<em>object</em>)</p></li>
</ul>
</dd>
<dt class="field-even">Тип результата<span class="colon">:</span></dt>
<dd class="field-even"><p><em>None</em></p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="components_derived.settings_form_component.SettingsFormComponent.get_content_item">
<span class="sig-name descname"><span class="pre">get_content_item</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">name</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/components_derived/settings_form_component.html#SettingsFormComponent.get_content_item"><span class="viewcode-link"><span class="pre">[исходный</span> <span class="pre">код]</span></span></a><a class="headerlink" href="#components_derived.settings_form_component.SettingsFormComponent.get_content_item" title="Ссылка на это определение"></a></dt>
<dd><p>Возвращает элемент содержимого по имени или None, если не найден.</p>
<dl class="field-list simple">
<dt class="field-odd">Параметры<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>name</strong> (<em>str</em>)</p>
</dd>
<dt class="field-even">Тип результата<span class="colon">:</span></dt>
<dd class="field-even"><p><em>object</em> | <em>None</em></p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="components_derived.settings_form_component.SettingsFormComponent.add_toolbar_title">
<span class="sig-name descname"><span class="pre">add_toolbar_title</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">title</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/components_derived/settings_form_component.html#SettingsFormComponent.add_toolbar_title"><span class="viewcode-link"><span class="pre">[исходный</span> <span class="pre">код]</span></span></a><a class="headerlink" href="#components_derived.settings_form_component.SettingsFormComponent.add_toolbar_title" title="Ссылка на это определение"></a></dt>
<dd><p>Добавляет заголовок в панель инструментов модального окна.</p>
<dl class="field-list simple">
<dt class="field-odd">Параметры<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>title</strong> (<em>str</em>)</p>
</dd>
<dt class="field-even">Тип результата<span class="colon">:</span></dt>
<dd class="field-even"><p><em>None</em></p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="components_derived.settings_form_component.SettingsFormComponent.add_button">
<span class="sig-name descname"><span class="pre">add_button</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">locator</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">name</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/components_derived/settings_form_component.html#SettingsFormComponent.add_button"><span class="viewcode-link"><span class="pre">[исходный</span> <span class="pre">код]</span></span></a><a class="headerlink" href="#components_derived.settings_form_component.SettingsFormComponent.add_button" title="Ссылка на это определение"></a></dt>
<dd><p>Добавляет кнопку в форму.</p>
<dl class="field-list simple">
<dt class="field-odd">Параметры<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>locator</strong> (<em>str</em>)</p></li>
<li><p><strong>name</strong> (<em>str</em>)</p></li>
</ul>
</dd>
<dt class="field-even">Тип результата<span class="colon">:</span></dt>
<dd class="field-even"><p><em>None</em></p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="components_derived.settings_form_component.SettingsFormComponent.add_tooltip_button">
<span class="sig-name descname"><span class="pre">add_tooltip_button</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">locator</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">name</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/components_derived/settings_form_component.html#SettingsFormComponent.add_tooltip_button"><span class="viewcode-link"><span class="pre">[исходный</span> <span class="pre">код]</span></span></a><a class="headerlink" href="#components_derived.settings_form_component.SettingsFormComponent.add_tooltip_button" title="Ссылка на это определение"></a></dt>
<dd><p>Добавляет кнопку в форму.</p>
<dl class="field-list simple">
<dt class="field-odd">Параметры<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>locator</strong> (<em>str</em>)</p></li>
<li><p><strong>name</strong> (<em>str</em>)</p></li>
</ul>
</dd>
<dt class="field-even">Тип результата<span class="colon">:</span></dt>
<dd class="field-even"><p><em>None</em></p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="components_derived.settings_form_component.SettingsFormComponent.get_button_by_name">
<span class="sig-name descname"><span class="pre">get_button_by_name</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">name</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/components_derived/settings_form_component.html#SettingsFormComponent.get_button_by_name"><span class="viewcode-link"><span class="pre">[исходный</span> <span class="pre">код]</span></span></a><a class="headerlink" href="#components_derived.settings_form_component.SettingsFormComponent.get_button_by_name" title="Ссылка на это определение"></a></dt>
<dd><p>Ищет и возвращает кнопку по имени или None, если не найдена.</p>
<dl class="field-list simple">
<dt class="field-odd">Параметры<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>name</strong> (<em>str</em>)</p>
</dd>
<dt class="field-even">Тип результата<span class="colon">:</span></dt>
<dd class="field-even"><p><a class="reference internal" href="elements.html#elements.button_element.Button" title="elements.button_element.Button"><em>Button</em></a> | <a class="reference internal" href="elements.html#elements.tooltip_button_element.TooltipButton" title="elements.tooltip_button_element.TooltipButton"><em>TooltipButton</em></a> | <em>None</em></p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="components_derived.settings_form_component.SettingsFormComponent.click_button">
<span class="sig-name descname"><span class="pre">click_button</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">name</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/components_derived/settings_form_component.html#SettingsFormComponent.click_button"><span class="viewcode-link"><span class="pre">[исходный</span> <span class="pre">код]</span></span></a><a class="headerlink" href="#components_derived.settings_form_component.SettingsFormComponent.click_button" title="Ссылка на это определение"></a></dt>
<dd><p>Кликает по кнопке с заданным именем. Вызывает ошибку, если не найдена.</p>
<dl class="field-list simple">
<dt class="field-odd">Параметры<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>name</strong> (<em>str</em>)</p>
</dd>
<dt class="field-even">Тип результата<span class="colon">:</span></dt>
<dd class="field-even"><p><em>None</em></p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="components_derived.settings_form_component.SettingsFormComponent.check_vertical_scrolling">
<span class="sig-name descname"><span class="pre">check_vertical_scrolling</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">locator</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/components_derived/settings_form_component.html#SettingsFormComponent.check_vertical_scrolling"><span class="viewcode-link"><span class="pre">[исходный</span> <span class="pre">код]</span></span></a><a class="headerlink" href="#components_derived.settings_form_component.SettingsFormComponent.check_vertical_scrolling" title="Ссылка на это определение"></a></dt>
<dd><p>Проверяет возможность вертикальной прокрутки формы.</p>
<dl class="field-list simple">
<dt class="field-odd">Параметры<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>locator</strong> (<em>str</em><em> | </em><em>Locator</em>)</p>
</dd>
<dt class="field-even">Тип результата<span class="colon">:</span></dt>
<dd class="field-even"><p><em>bool</em></p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="components_derived.settings_form_component.SettingsFormComponent.check_button_tooltip">
<span class="sig-name descname"><span class="pre">check_button_tooltip</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">name</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tooltip</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/components_derived/settings_form_component.html#SettingsFormComponent.check_button_tooltip"><span class="viewcode-link"><span class="pre">[исходный</span> <span class="pre">код]</span></span></a><a class="headerlink" href="#components_derived.settings_form_component.SettingsFormComponent.check_button_tooltip" title="Ссылка на это определение"></a></dt>
<dd><p>Проверяет текст подсказки кнопки.</p>
<dl class="field-list simple">
<dt class="field-odd">Параметры<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>name</strong> (<em>str</em>)</p></li>
<li><p><strong>tooltip</strong> (<em>str</em>)</p></li>
</ul>
</dd>
<dt class="field-even">Тип результата<span class="colon">:</span></dt>
<dd class="field-even"><p><em>None</em></p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="components_derived.settings_form_component.SettingsFormComponent.check_button_visibility">
<span class="sig-name descname"><span class="pre">check_button_visibility</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">name</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/components_derived/settings_form_component.html#SettingsFormComponent.check_button_visibility"><span class="viewcode-link"><span class="pre">[исходный</span> <span class="pre">код]</span></span></a><a class="headerlink" href="#components_derived.settings_form_component.SettingsFormComponent.check_button_visibility" title="Ссылка на это определение"></a></dt>
<dd><p>Проверяет наличие кнопки по имени. Вызывает ошибку, если не найдена.</p>
<dl class="field-list simple">
<dt class="field-odd">Параметры<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>name</strong> (<em>str</em>)</p>
</dd>
<dt class="field-even">Тип результата<span class="colon">:</span></dt>
<dd class="field-even"><p><em>None</em></p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="components_derived.settings_form_component.SettingsFormComponent.should_be_toolbar">
<span class="sig-name descname"><span class="pre">should_be_toolbar</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/components_derived/settings_form_component.html#SettingsFormComponent.should_be_toolbar"><span class="viewcode-link"><span class="pre">[исходный</span> <span class="pre">код]</span></span></a><a class="headerlink" href="#components_derived.settings_form_component.SettingsFormComponent.should_be_toolbar" title="Ссылка на это определение"></a></dt>
<dd><p>Проверяет наличие тулбара.</p>
<dl class="field-list simple">
<dt class="field-odd">Исключение<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>AssertionError</strong> Если тулбар или кнопка редактирования отсутствуют.</p>
</dd>
<dt class="field-even">Тип результата<span class="colon">:</span></dt>
<dd class="field-even"><p><em>None</em></p>
</dd>
</dl>
</dd></dl>
</dd></dl>
</section>
<section id="module-components_derived.sidebar_filter_component">
<span id="components-derived-sidebar-filter-component-module"></span><h2>components_derived.sidebar_filter_component module<a class="headerlink" href="#module-components_derived.sidebar_filter_component" title="Ссылка на этот заголовок"></a></h2>
@ -1515,7 +1946,10 @@
</div>
</div>
<footer>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Нижняя область">
<a href="components.html" class="btn btn-neutral float-left" title="components package" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Предыдущая</a>
<a href="conftest.html" class="btn btn-neutral float-right" title="conftest module" accesskey="n" rel="next">Следующая <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>

View File

@ -19,7 +19,9 @@
<script src="_static/translations.js?v=cd1d70c9"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="Алфавитный указатель" href="genindex.html" />
<link rel="search" title="Поиск" href="search.html" />
<link rel="search" title="Поиск" href="search.html" />
<link rel="next" title="data package" href="data.html" />
<link rel="prev" title="components_derived package" href="components_derived.html" />
</head>
<body class="wy-body-for-nav">
@ -41,15 +43,318 @@
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Меню навигации">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">conftest module</a><ul>
<li><a class="reference internal" href="#conftest.pytest_sessionfinish"><code class="docutils literal notranslate"><span class="pre">pytest_sessionfinish()</span></code></a></li>
<li><a class="reference internal" href="#conftest.pytest_addoption"><code class="docutils literal notranslate"><span class="pre">pytest_addoption()</span></code></a></li>
<p class="caption" role="heading"><span class="caption-text">Содержание:</span></p>
<ul class="current">
<li class="toctree-l1 current"><a class="reference internal" href="modules.html">e-nms_qa_automation</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="components.html">components package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="components.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.alert_component">components.alert_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.alert_component.AlertComponent"><code class="docutils literal notranslate"><span class="pre">AlertComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.base_component">components.base_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.base_component.BaseComponent"><code class="docutils literal notranslate"><span class="pre">BaseComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.card_component">components.card_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.card_component.CardComponent"><code class="docutils literal notranslate"><span class="pre">CardComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.confirm_component">components.confirm_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.confirm_component.ConfirmComponent"><code class="docutils literal notranslate"><span class="pre">ConfirmComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.date_picker_component">components.date_picker_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.date_picker_component.DatePickerComponent"><code class="docutils literal notranslate"><span class="pre">DatePickerComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.dropdown_list_component">components.dropdown_list_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.dropdown_list_component.DropdownList"><code class="docutils literal notranslate"><span class="pre">DropdownList</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.eventbar_component">components.eventbar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.eventbar_component.EventPanelComponent"><code class="docutils literal notranslate"><span class="pre">EventPanelComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.events_container_component">components.events_container_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.events_container_component.EventsContainerComponent"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.json_container_component">components.json_container_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.json_container_component.JsonContainerComponent"><code class="docutils literal notranslate"><span class="pre">JsonContainerComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.modal_window_component">components.modal_window_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.modal_window_component.ModalWindowComponent"><code class="docutils literal notranslate"><span class="pre">ModalWindowComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.navbar_component">components.navbar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.navbar_component.NavigationPanelComponent"><code class="docutils literal notranslate"><span class="pre">NavigationPanelComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.table_component">components.table_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.table_component.TableComponent"><code class="docutils literal notranslate"><span class="pre">TableComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.toolbar_component">components.toolbar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.toolbar_component.ToolbarComponent"><code class="docutils literal notranslate"><span class="pre">ToolbarComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="components_derived.html">components_derived package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.container_system_log_events">components_derived.container_system_log_events module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.container_system_log_events.SystemLogEventsContainer"><code class="docutils literal notranslate"><span class="pre">SystemLogEventsContainer</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.date_input_component">components_derived.date_input_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.date_input_component.DateInput"><code class="docutils literal notranslate"><span class="pre">DateInput</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.interactive_dropdown_list">components_derived.interactive_dropdown_list module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.interactive_dropdown_list.InteractiveDropdownList"><code class="docutils literal notranslate"><span class="pre">InteractiveDropdownList</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_add_AD_user">components_derived.modal_add_AD_user module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_add_AD_user.AddADUserModalWindow"><code class="docutils literal notranslate"><span class="pre">AddADUserModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_add_local_user">components_derived.modal_add_local_user module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_add_local_user.AddLocalUserModalWindow"><code class="docutils literal notranslate"><span class="pre">AddLocalUserModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_change_password">components_derived.modal_change_password module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_change_password.ChangePasswordModalWindow"><code class="docutils literal notranslate"><span class="pre">ChangePasswordModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_edit_user">components_derived.modal_edit_user module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_edit_user.EditUserModalWindow"><code class="docutils literal notranslate"><span class="pre">EditUserModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_view_template">components_derived.modal_view_template module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_view_template.ViewTemplateModalWindow"><code class="docutils literal notranslate"><span class="pre">ViewTemplateModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_view_ztp_template">components_derived.modal_view_ztp_template module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_view_ztp_template.ViewZTPTemplateModalWindow"><code class="docutils literal notranslate"><span class="pre">ViewZTPTemplateModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.selection_bar_component">components_derived.selection_bar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.selection_bar_component.SelectionBarComponent"><code class="docutils literal notranslate"><span class="pre">SelectionBarComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.settings_form_component">components_derived.settings_form_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.settings_form_component.SettingsFormComponent"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.sidebar_filter_component">components_derived.sidebar_filter_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.sidebar_filter_component.SidebarFilterComponent"><code class="docutils literal notranslate"><span class="pre">SidebarFilterComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.user_card">components_derived.user_card module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.user_card.UserCard"><code class="docutils literal notranslate"><span class="pre">UserCard</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">conftest module</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#conftest.pytest_sessionfinish"><code class="docutils literal notranslate"><span class="pre">pytest_sessionfinish()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="#conftest.pytest_addoption"><code class="docutils literal notranslate"><span class="pre">pytest_addoption()</span></code></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="data.html">data package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="data.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="data.html#module-data.constants">data.constants module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="data.html#data.constants.Constants"><code class="docutils literal notranslate"><span class="pre">Constants</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="data.html#module-data.environment">data.environment module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="data.html#data.environment.Environment"><code class="docutils literal notranslate"><span class="pre">Environment</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="data.html#module-data.roles_dict">data.roles_dict module</a></li>
<li class="toctree-l3"><a class="reference internal" href="data.html#module-data">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="elements.html">elements package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="elements.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.base_element">elements.base_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.base_element.BaseElement"><code class="docutils literal notranslate"><span class="pre">BaseElement</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.button_element">elements.button_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.button_element.Button"><code class="docutils literal notranslate"><span class="pre">Button</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.checkbox_element">elements.checkbox_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.checkbox_element.Checkbox"><code class="docutils literal notranslate"><span class="pre">Checkbox</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.icon_element">elements.icon_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.icon_element.Icon"><code class="docutils literal notranslate"><span class="pre">Icon</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.tab_button_element">elements.tab_button_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.tab_button_element.TabButton"><code class="docutils literal notranslate"><span class="pre">TabButton</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.text_element">elements.text_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.text_element.Text"><code class="docutils literal notranslate"><span class="pre">Text</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.text_input_element">elements.text_input_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.text_input_element.TextInput"><code class="docutils literal notranslate"><span class="pre">TextInput</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.tooltip_button_element">elements.tooltip_button_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.tooltip_button_element.TooltipButton"><code class="docutils literal notranslate"><span class="pre">TooltipButton</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="fixtures.html">fixtures package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="fixtures.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="fixtures.html#module-fixtures.pages">fixtures.pages module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.pytest_addoption"><code class="docutils literal notranslate"><span class="pre">pytest_addoption()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.browser"><code class="docutils literal notranslate"><span class="pre">browser()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.get_firefox_browser"><code class="docutils literal notranslate"><span class="pre">get_firefox_browser()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.get_chrome_browser"><code class="docutils literal notranslate"><span class="pre">get_chrome_browser()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.get_remote_chrome"><code class="docutils literal notranslate"><span class="pre">get_remote_chrome()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.get_context"><code class="docutils literal notranslate"><span class="pre">get_context()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.return_back"><code class="docutils literal notranslate"><span class="pre">return_back()</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="fixtures.html#module-fixtures">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="pages.html">pages package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="pages.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.base_page">pages.base_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.base_page.BasePage"><code class="docutils literal notranslate"><span class="pre">BasePage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.current_session_tab">pages.current_session_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.current_session_tab.CurrentSessionsTab"><code class="docutils literal notranslate"><span class="pre">CurrentSessionsTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.license_tab">pages.license_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.license_tab.LicenseTab"><code class="docutils literal notranslate"><span class="pre">LicenseTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.login_page">pages.login_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.login_page.LoginPage"><code class="docutils literal notranslate"><span class="pre">LoginPage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.main_page">pages.main_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.main_page.MainPage"><code class="docutils literal notranslate"><span class="pre">MainPage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.push_notifications_settings_tab">pages.push_notifications_settings_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab"><code class="docutils literal notranslate"><span class="pre">PushNotificationsSettingsTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.service_status_tab">pages.service_status_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.service_status_tab.ServiceStatusTab"><code class="docutils literal notranslate"><span class="pre">ServiceStatusTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.session_settings_tab">pages.session_settings_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.session_settings_tab.SessionSettingsTab"><code class="docutils literal notranslate"><span class="pre">SessionSettingsTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.templates_tab">pages.templates_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.templates_tab.TemplatesTab"><code class="docutils literal notranslate"><span class="pre">TemplatesTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.users_tab">pages.users_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.users_tab.UsersTab"><code class="docutils literal notranslate"><span class="pre">UsersTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.ztp_config_tab">pages.ztp_config_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.ztp_config_tab.ZTPConfigTab"><code class="docutils literal notranslate"><span class="pre">ZTPConfigTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.ztp_templates_tab">pages.ztp_templates_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.ztp_templates_tab.ZTPTemplatesTab"><code class="docutils literal notranslate"><span class="pre">ZTPTemplatesTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="tools.html">tools package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="tools.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="tools.html#module-tools.fix_python_project">tools.fix_python_project module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="tools.html#tools.fix_python_project.ProjectFixer"><code class="docutils literal notranslate"><span class="pre">ProjectFixer</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="tools.html#module-tools.logger">tools.logger module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="tools.html#tools.logger.get_logger"><code class="docutils literal notranslate"><span class="pre">get_logger()</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="tools.html#module-tools">Module contents</a></li>
</ul>
</li>
</ul>
</div>
</li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Документация и руководства:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="sphinx_guide.html">Руководство по документации тестов с помощью Sphinx</a><ul>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id2">1 Расположение документа</a></li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id3">2 Первичная настройка для нового проекта</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id4">2.1 Подготовка зависимостей</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id5">2.2 Инициализация Sphinx</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id6">2.3 Настройка конфигурации</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id7">2.4 Настройка главной страницы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id8">3 Работа с существующим проектом</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id9">3.1 Установка зависимостей</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id10">3.2 Генерация документации</a><ul>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id11">3.2.1 Базовая генерация</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id12">3.2.2 Генерация с исключениями</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id13">3.2.3 Принудительная перегенерация</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id14">3.3 Очистка документации</a><ul>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id15">3.3.1 Команды очистки</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id16">3.3.2 Автоматизация очистки</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id17">3.4 Сборка и деплой</a><ul>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id18">3.4.1 Локальная сборка</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id19">3.4.2 Проверка качества</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id20">3.4.3 Сборка для публикации</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#ci-cd">3.4.4 Настройка для CI/CD</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#mkdocs-sphinx">4 Конвертация контента из MkDocs в Sphinx</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id21">4.1 Текст</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id22">4.2 Таблицы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id23">5 Особенности Sphinx</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#docstrings">5.1 Поддержка docstrings</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id24">5.2 Кастомные директивы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id25">6 Решение проблем</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id26">6.1 Проблема: Модули не находятся</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id27">6.2 Проблема: Не генерируются docstrings</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id28">6.3 Проблема: Тема не применяется</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id29">7 Дополнительные возможности</a></li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#version-history">История версий</a></li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
@ -64,6 +369,7 @@
<div role="navigation" aria-label="Навигация по страницам">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="modules.html">e-nms_qa_automation</a></li>
<li class="breadcrumb-item active">conftest module</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/conftest.rst.txt" rel="nofollow"> Просмотреть исходный код страницы</a>
@ -92,7 +398,10 @@
</div>
</div>
<footer>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Нижняя область">
<a href="components_derived.html" class="btn btn-neutral float-left" title="components_derived package" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Предыдущая</a>
<a href="data.html" class="btn btn-neutral float-right" title="data package" accesskey="n" rel="next">Следующая <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>

View File

@ -19,7 +19,9 @@
<script src="_static/translations.js?v=cd1d70c9"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="Алфавитный указатель" href="genindex.html" />
<link rel="search" title="Поиск" href="search.html" />
<link rel="search" title="Поиск" href="search.html" />
<link rel="next" title="elements package" href="elements.html" />
<link rel="prev" title="conftest module" href="conftest.html" />
</head>
<body class="wy-body-for-nav">
@ -41,43 +43,318 @@
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Меню навигации">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">data package</a><ul>
<li><a class="reference internal" href="#submodules">Submodules</a></li>
<li><a class="reference internal" href="#module-data.constants">data.constants module</a><ul>
<li><a class="reference internal" href="#data.constants.Constants"><code class="docutils literal notranslate"><span class="pre">Constants</span></code></a><ul>
<li><a class="reference internal" href="#data.constants.Constants.login"><code class="docutils literal notranslate"><span class="pre">Constants.login</span></code></a></li>
<li><a class="reference internal" href="#data.constants.Constants.password"><code class="docutils literal notranslate"><span class="pre">Constants.password</span></code></a></li>
<p class="caption" role="heading"><span class="caption-text">Содержание:</span></p>
<ul class="current">
<li class="toctree-l1 current"><a class="reference internal" href="modules.html">e-nms_qa_automation</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="components.html">components package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="components.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.alert_component">components.alert_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.alert_component.AlertComponent"><code class="docutils literal notranslate"><span class="pre">AlertComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.base_component">components.base_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.base_component.BaseComponent"><code class="docutils literal notranslate"><span class="pre">BaseComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.card_component">components.card_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.card_component.CardComponent"><code class="docutils literal notranslate"><span class="pre">CardComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.confirm_component">components.confirm_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.confirm_component.ConfirmComponent"><code class="docutils literal notranslate"><span class="pre">ConfirmComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.date_picker_component">components.date_picker_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.date_picker_component.DatePickerComponent"><code class="docutils literal notranslate"><span class="pre">DatePickerComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.dropdown_list_component">components.dropdown_list_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.dropdown_list_component.DropdownList"><code class="docutils literal notranslate"><span class="pre">DropdownList</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.eventbar_component">components.eventbar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.eventbar_component.EventPanelComponent"><code class="docutils literal notranslate"><span class="pre">EventPanelComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.events_container_component">components.events_container_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.events_container_component.EventsContainerComponent"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.json_container_component">components.json_container_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.json_container_component.JsonContainerComponent"><code class="docutils literal notranslate"><span class="pre">JsonContainerComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.modal_window_component">components.modal_window_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.modal_window_component.ModalWindowComponent"><code class="docutils literal notranslate"><span class="pre">ModalWindowComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.navbar_component">components.navbar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.navbar_component.NavigationPanelComponent"><code class="docutils literal notranslate"><span class="pre">NavigationPanelComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.table_component">components.table_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.table_component.TableComponent"><code class="docutils literal notranslate"><span class="pre">TableComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.toolbar_component">components.toolbar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.toolbar_component.ToolbarComponent"><code class="docutils literal notranslate"><span class="pre">ToolbarComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="components_derived.html">components_derived package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.container_system_log_events">components_derived.container_system_log_events module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.container_system_log_events.SystemLogEventsContainer"><code class="docutils literal notranslate"><span class="pre">SystemLogEventsContainer</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.date_input_component">components_derived.date_input_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.date_input_component.DateInput"><code class="docutils literal notranslate"><span class="pre">DateInput</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.interactive_dropdown_list">components_derived.interactive_dropdown_list module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.interactive_dropdown_list.InteractiveDropdownList"><code class="docutils literal notranslate"><span class="pre">InteractiveDropdownList</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_add_AD_user">components_derived.modal_add_AD_user module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_add_AD_user.AddADUserModalWindow"><code class="docutils literal notranslate"><span class="pre">AddADUserModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_add_local_user">components_derived.modal_add_local_user module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_add_local_user.AddLocalUserModalWindow"><code class="docutils literal notranslate"><span class="pre">AddLocalUserModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_change_password">components_derived.modal_change_password module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_change_password.ChangePasswordModalWindow"><code class="docutils literal notranslate"><span class="pre">ChangePasswordModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_edit_user">components_derived.modal_edit_user module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_edit_user.EditUserModalWindow"><code class="docutils literal notranslate"><span class="pre">EditUserModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_view_template">components_derived.modal_view_template module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_view_template.ViewTemplateModalWindow"><code class="docutils literal notranslate"><span class="pre">ViewTemplateModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_view_ztp_template">components_derived.modal_view_ztp_template module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_view_ztp_template.ViewZTPTemplateModalWindow"><code class="docutils literal notranslate"><span class="pre">ViewZTPTemplateModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.selection_bar_component">components_derived.selection_bar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.selection_bar_component.SelectionBarComponent"><code class="docutils literal notranslate"><span class="pre">SelectionBarComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.settings_form_component">components_derived.settings_form_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.settings_form_component.SettingsFormComponent"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.sidebar_filter_component">components_derived.sidebar_filter_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.sidebar_filter_component.SidebarFilterComponent"><code class="docutils literal notranslate"><span class="pre">SidebarFilterComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.user_card">components_derived.user_card module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.user_card.UserCard"><code class="docutils literal notranslate"><span class="pre">UserCard</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="conftest.html">conftest module</a><ul>
<li class="toctree-l3"><a class="reference internal" href="conftest.html#conftest.pytest_sessionfinish"><code class="docutils literal notranslate"><span class="pre">pytest_sessionfinish()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="conftest.html#conftest.pytest_addoption"><code class="docutils literal notranslate"><span class="pre">pytest_addoption()</span></code></a></li>
</ul>
</li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">data package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="#module-data.constants">data.constants module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#data.constants.Constants"><code class="docutils literal notranslate"><span class="pre">Constants</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-data.environment">data.environment module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#data.environment.Environment"><code class="docutils literal notranslate"><span class="pre">Environment</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-data.roles_dict">data.roles_dict module</a></li>
<li class="toctree-l3"><a class="reference internal" href="#module-data">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="elements.html">elements package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="elements.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.base_element">elements.base_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.base_element.BaseElement"><code class="docutils literal notranslate"><span class="pre">BaseElement</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.button_element">elements.button_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.button_element.Button"><code class="docutils literal notranslate"><span class="pre">Button</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.checkbox_element">elements.checkbox_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.checkbox_element.Checkbox"><code class="docutils literal notranslate"><span class="pre">Checkbox</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.icon_element">elements.icon_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.icon_element.Icon"><code class="docutils literal notranslate"><span class="pre">Icon</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.tab_button_element">elements.tab_button_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.tab_button_element.TabButton"><code class="docutils literal notranslate"><span class="pre">TabButton</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.text_element">elements.text_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.text_element.Text"><code class="docutils literal notranslate"><span class="pre">Text</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.text_input_element">elements.text_input_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.text_input_element.TextInput"><code class="docutils literal notranslate"><span class="pre">TextInput</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.tooltip_button_element">elements.tooltip_button_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.tooltip_button_element.TooltipButton"><code class="docutils literal notranslate"><span class="pre">TooltipButton</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="fixtures.html">fixtures package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="fixtures.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="fixtures.html#module-fixtures.pages">fixtures.pages module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.pytest_addoption"><code class="docutils literal notranslate"><span class="pre">pytest_addoption()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.browser"><code class="docutils literal notranslate"><span class="pre">browser()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.get_firefox_browser"><code class="docutils literal notranslate"><span class="pre">get_firefox_browser()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.get_chrome_browser"><code class="docutils literal notranslate"><span class="pre">get_chrome_browser()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.get_remote_chrome"><code class="docutils literal notranslate"><span class="pre">get_remote_chrome()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.get_context"><code class="docutils literal notranslate"><span class="pre">get_context()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.return_back"><code class="docutils literal notranslate"><span class="pre">return_back()</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="fixtures.html#module-fixtures">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="pages.html">pages package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="pages.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.base_page">pages.base_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.base_page.BasePage"><code class="docutils literal notranslate"><span class="pre">BasePage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.current_session_tab">pages.current_session_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.current_session_tab.CurrentSessionsTab"><code class="docutils literal notranslate"><span class="pre">CurrentSessionsTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.license_tab">pages.license_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.license_tab.LicenseTab"><code class="docutils literal notranslate"><span class="pre">LicenseTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.login_page">pages.login_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.login_page.LoginPage"><code class="docutils literal notranslate"><span class="pre">LoginPage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.main_page">pages.main_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.main_page.MainPage"><code class="docutils literal notranslate"><span class="pre">MainPage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.push_notifications_settings_tab">pages.push_notifications_settings_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab"><code class="docutils literal notranslate"><span class="pre">PushNotificationsSettingsTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.service_status_tab">pages.service_status_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.service_status_tab.ServiceStatusTab"><code class="docutils literal notranslate"><span class="pre">ServiceStatusTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.session_settings_tab">pages.session_settings_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.session_settings_tab.SessionSettingsTab"><code class="docutils literal notranslate"><span class="pre">SessionSettingsTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.templates_tab">pages.templates_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.templates_tab.TemplatesTab"><code class="docutils literal notranslate"><span class="pre">TemplatesTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.users_tab">pages.users_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.users_tab.UsersTab"><code class="docutils literal notranslate"><span class="pre">UsersTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.ztp_config_tab">pages.ztp_config_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.ztp_config_tab.ZTPConfigTab"><code class="docutils literal notranslate"><span class="pre">ZTPConfigTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.ztp_templates_tab">pages.ztp_templates_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.ztp_templates_tab.ZTPTemplatesTab"><code class="docutils literal notranslate"><span class="pre">ZTPTemplatesTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="tools.html">tools package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="tools.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="tools.html#module-tools.fix_python_project">tools.fix_python_project module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="tools.html#tools.fix_python_project.ProjectFixer"><code class="docutils literal notranslate"><span class="pre">ProjectFixer</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="tools.html#module-tools.logger">tools.logger module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="tools.html#tools.logger.get_logger"><code class="docutils literal notranslate"><span class="pre">get_logger()</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="tools.html#module-tools">Module contents</a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#module-data.environment">data.environment module</a><ul>
<li><a class="reference internal" href="#data.environment.Environment"><code class="docutils literal notranslate"><span class="pre">Environment</span></code></a><ul>
<li><a class="reference internal" href="#data.environment.Environment.TEST"><code class="docutils literal notranslate"><span class="pre">Environment.TEST</span></code></a></li>
<li><a class="reference internal" href="#data.environment.Environment.DEVELOP"><code class="docutils literal notranslate"><span class="pre">Environment.DEVELOP</span></code></a></li>
<li><a class="reference internal" href="#data.environment.Environment.URLS"><code class="docutils literal notranslate"><span class="pre">Environment.URLS</span></code></a></li>
<li><a class="reference internal" href="#data.environment.Environment.__init__"><code class="docutils literal notranslate"><span class="pre">Environment.__init__()</span></code></a></li>
<li><a class="reference internal" href="#data.environment.Environment.get_base_url"><code class="docutils literal notranslate"><span class="pre">Environment.get_base_url()</span></code></a></li>
<li><a class="reference internal" href="#data.environment.Environment.get_env_name"><code class="docutils literal notranslate"><span class="pre">Environment.get_env_name()</span></code></a></li>
<li><a class="reference internal" href="#data.environment.Environment.get_request_url"><code class="docutils literal notranslate"><span class="pre">Environment.get_request_url()</span></code></a></li>
<li><a class="reference internal" href="#data.environment.Environment.set_current_user_credential"><code class="docutils literal notranslate"><span class="pre">Environment.set_current_user_credential()</span></code></a></li>
<li><a class="reference internal" href="#data.environment.Environment.get_access_token"><code class="docutils literal notranslate"><span class="pre">Environment.get_access_token()</span></code></a></li>
<li><a class="reference internal" href="#data.environment.Environment.get_current_user_name"><code class="docutils literal notranslate"><span class="pre">Environment.get_current_user_name()</span></code></a></li>
<li><a class="reference internal" href="#data.environment.Environment.get_current_user_role"><code class="docutils literal notranslate"><span class="pre">Environment.get_current_user_role()</span></code></a></li>
<li><a class="reference internal" href="#data.environment.Environment.get_current_user_id"><code class="docutils literal notranslate"><span class="pre">Environment.get_current_user_id()</span></code></a></li>
<li><a class="reference internal" href="#data.environment.Environment.get_current_user_credential"><code class="docutils literal notranslate"><span class="pre">Environment.get_current_user_credential()</span></code></a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Документация и руководства:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="sphinx_guide.html">Руководство по документации тестов с помощью Sphinx</a><ul>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id2">1 Расположение документа</a></li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id3">2 Первичная настройка для нового проекта</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id4">2.1 Подготовка зависимостей</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id5">2.2 Инициализация Sphinx</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id6">2.3 Настройка конфигурации</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id7">2.4 Настройка главной страницы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id8">3 Работа с существующим проектом</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id9">3.1 Установка зависимостей</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id10">3.2 Генерация документации</a><ul>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id11">3.2.1 Базовая генерация</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id12">3.2.2 Генерация с исключениями</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id13">3.2.3 Принудительная перегенерация</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id14">3.3 Очистка документации</a><ul>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id15">3.3.1 Команды очистки</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id16">3.3.2 Автоматизация очистки</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id17">3.4 Сборка и деплой</a><ul>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id18">3.4.1 Локальная сборка</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id19">3.4.2 Проверка качества</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id20">3.4.3 Сборка для публикации</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#ci-cd">3.4.4 Настройка для CI/CD</a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#module-data.roles_dict">data.roles_dict module</a></li>
<li><a class="reference internal" href="#module-data">Module contents</a></li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#mkdocs-sphinx">4 Конвертация контента из MkDocs в Sphinx</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id21">4.1 Текст</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id22">4.2 Таблицы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id23">5 Особенности Sphinx</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#docstrings">5.1 Поддержка docstrings</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id24">5.2 Кастомные директивы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id25">6 Решение проблем</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id26">6.1 Проблема: Модули не находятся</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id27">6.2 Проблема: Не генерируются docstrings</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id28">6.3 Проблема: Тема не применяется</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id29">7 Дополнительные возможности</a></li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#version-history">История версий</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</nav>
@ -92,6 +369,7 @@
<div role="navigation" aria-label="Навигация по страницам">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="modules.html">e-nms_qa_automation</a></li>
<li class="breadcrumb-item active">data package</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/data.rst.txt" rel="nofollow"> Просмотреть исходный код страницы</a>
@ -331,7 +609,10 @@ URLS (Dict[str, str]): Словарь URL для разных окружений
</div>
</div>
<footer>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Нижняя область">
<a href="conftest.html" class="btn btn-neutral float-left" title="conftest module" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Предыдущая</a>
<a href="elements.html" class="btn btn-neutral float-right" title="elements package" accesskey="n" rel="next">Следующая <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>

View File

@ -19,7 +19,9 @@
<script src="_static/translations.js?v=cd1d70c9"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="Алфавитный указатель" href="genindex.html" />
<link rel="search" title="Поиск" href="search.html" />
<link rel="search" title="Поиск" href="search.html" />
<link rel="next" title="fixtures package" href="fixtures.html" />
<link rel="prev" title="data package" href="data.html" />
</head>
<body class="wy-body-for-nav">
@ -41,96 +43,318 @@
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Меню навигации">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">elements package</a><ul>
<li><a class="reference internal" href="#submodules">Submodules</a></li>
<li><a class="reference internal" href="#module-elements.base_element">elements.base_element module</a><ul>
<li><a class="reference internal" href="#elements.base_element.BaseElement"><code class="docutils literal notranslate"><span class="pre">BaseElement</span></code></a><ul>
<li><a class="reference internal" href="#elements.base_element.BaseElement.__init__"><code class="docutils literal notranslate"><span class="pre">BaseElement.__init__()</span></code></a></li>
<li><a class="reference internal" href="#elements.base_element.BaseElement.type_of"><code class="docutils literal notranslate"><span class="pre">BaseElement.type_of</span></code></a></li>
<li><a class="reference internal" href="#elements.base_element.BaseElement.click"><code class="docutils literal notranslate"><span class="pre">BaseElement.click()</span></code></a></li>
<li><a class="reference internal" href="#elements.base_element.BaseElement.get_text"><code class="docutils literal notranslate"><span class="pre">BaseElement.get_text()</span></code></a></li>
<li><a class="reference internal" href="#elements.base_element.BaseElement.update_locator"><code class="docutils literal notranslate"><span class="pre">BaseElement.update_locator()</span></code></a></li>
<li><a class="reference internal" href="#elements.base_element.BaseElement.wait_for_element"><code class="docutils literal notranslate"><span class="pre">BaseElement.wait_for_element()</span></code></a></li>
<li><a class="reference internal" href="#elements.base_element.BaseElement.check_have_text"><code class="docutils literal notranslate"><span class="pre">BaseElement.check_have_text()</span></code></a></li>
<li><a class="reference internal" href="#elements.base_element.BaseElement.check_visibility"><code class="docutils literal notranslate"><span class="pre">BaseElement.check_visibility()</span></code></a></li>
<li><a class="reference internal" href="#elements.base_element.BaseElement.is_present"><code class="docutils literal notranslate"><span class="pre">BaseElement.is_present()</span></code></a></li>
<li><a class="reference internal" href="#elements.base_element.BaseElement.is_not_present"><code class="docutils literal notranslate"><span class="pre">BaseElement.is_not_present()</span></code></a></li>
<p class="caption" role="heading"><span class="caption-text">Содержание:</span></p>
<ul class="current">
<li class="toctree-l1 current"><a class="reference internal" href="modules.html">e-nms_qa_automation</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="components.html">components package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="components.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.alert_component">components.alert_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.alert_component.AlertComponent"><code class="docutils literal notranslate"><span class="pre">AlertComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.base_component">components.base_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.base_component.BaseComponent"><code class="docutils literal notranslate"><span class="pre">BaseComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.card_component">components.card_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.card_component.CardComponent"><code class="docutils literal notranslate"><span class="pre">CardComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.confirm_component">components.confirm_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.confirm_component.ConfirmComponent"><code class="docutils literal notranslate"><span class="pre">ConfirmComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.date_picker_component">components.date_picker_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.date_picker_component.DatePickerComponent"><code class="docutils literal notranslate"><span class="pre">DatePickerComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.dropdown_list_component">components.dropdown_list_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.dropdown_list_component.DropdownList"><code class="docutils literal notranslate"><span class="pre">DropdownList</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.eventbar_component">components.eventbar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.eventbar_component.EventPanelComponent"><code class="docutils literal notranslate"><span class="pre">EventPanelComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.events_container_component">components.events_container_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.events_container_component.EventsContainerComponent"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.json_container_component">components.json_container_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.json_container_component.JsonContainerComponent"><code class="docutils literal notranslate"><span class="pre">JsonContainerComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.modal_window_component">components.modal_window_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.modal_window_component.ModalWindowComponent"><code class="docutils literal notranslate"><span class="pre">ModalWindowComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.navbar_component">components.navbar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.navbar_component.NavigationPanelComponent"><code class="docutils literal notranslate"><span class="pre">NavigationPanelComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.table_component">components.table_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.table_component.TableComponent"><code class="docutils literal notranslate"><span class="pre">TableComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.toolbar_component">components.toolbar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.toolbar_component.ToolbarComponent"><code class="docutils literal notranslate"><span class="pre">ToolbarComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="components_derived.html">components_derived package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.container_system_log_events">components_derived.container_system_log_events module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.container_system_log_events.SystemLogEventsContainer"><code class="docutils literal notranslate"><span class="pre">SystemLogEventsContainer</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.date_input_component">components_derived.date_input_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.date_input_component.DateInput"><code class="docutils literal notranslate"><span class="pre">DateInput</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.interactive_dropdown_list">components_derived.interactive_dropdown_list module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.interactive_dropdown_list.InteractiveDropdownList"><code class="docutils literal notranslate"><span class="pre">InteractiveDropdownList</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_add_AD_user">components_derived.modal_add_AD_user module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_add_AD_user.AddADUserModalWindow"><code class="docutils literal notranslate"><span class="pre">AddADUserModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_add_local_user">components_derived.modal_add_local_user module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_add_local_user.AddLocalUserModalWindow"><code class="docutils literal notranslate"><span class="pre">AddLocalUserModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_change_password">components_derived.modal_change_password module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_change_password.ChangePasswordModalWindow"><code class="docutils literal notranslate"><span class="pre">ChangePasswordModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_edit_user">components_derived.modal_edit_user module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_edit_user.EditUserModalWindow"><code class="docutils literal notranslate"><span class="pre">EditUserModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_view_template">components_derived.modal_view_template module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_view_template.ViewTemplateModalWindow"><code class="docutils literal notranslate"><span class="pre">ViewTemplateModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_view_ztp_template">components_derived.modal_view_ztp_template module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_view_ztp_template.ViewZTPTemplateModalWindow"><code class="docutils literal notranslate"><span class="pre">ViewZTPTemplateModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.selection_bar_component">components_derived.selection_bar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.selection_bar_component.SelectionBarComponent"><code class="docutils literal notranslate"><span class="pre">SelectionBarComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.settings_form_component">components_derived.settings_form_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.settings_form_component.SettingsFormComponent"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.sidebar_filter_component">components_derived.sidebar_filter_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.sidebar_filter_component.SidebarFilterComponent"><code class="docutils literal notranslate"><span class="pre">SidebarFilterComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.user_card">components_derived.user_card module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.user_card.UserCard"><code class="docutils literal notranslate"><span class="pre">UserCard</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="conftest.html">conftest module</a><ul>
<li class="toctree-l3"><a class="reference internal" href="conftest.html#conftest.pytest_sessionfinish"><code class="docutils literal notranslate"><span class="pre">pytest_sessionfinish()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="conftest.html#conftest.pytest_addoption"><code class="docutils literal notranslate"><span class="pre">pytest_addoption()</span></code></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="data.html">data package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="data.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="data.html#module-data.constants">data.constants module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="data.html#data.constants.Constants"><code class="docutils literal notranslate"><span class="pre">Constants</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="data.html#module-data.environment">data.environment module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="data.html#data.environment.Environment"><code class="docutils literal notranslate"><span class="pre">Environment</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="data.html#module-data.roles_dict">data.roles_dict module</a></li>
<li class="toctree-l3"><a class="reference internal" href="data.html#module-data">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">elements package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="#module-elements.base_element">elements.base_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#elements.base_element.BaseElement"><code class="docutils literal notranslate"><span class="pre">BaseElement</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-elements.button_element">elements.button_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#elements.button_element.Button"><code class="docutils literal notranslate"><span class="pre">Button</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-elements.checkbox_element">elements.checkbox_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#elements.checkbox_element.Checkbox"><code class="docutils literal notranslate"><span class="pre">Checkbox</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-elements.icon_element">elements.icon_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#elements.icon_element.Icon"><code class="docutils literal notranslate"><span class="pre">Icon</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-elements.tab_button_element">elements.tab_button_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#elements.tab_button_element.TabButton"><code class="docutils literal notranslate"><span class="pre">TabButton</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-elements.text_element">elements.text_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#elements.text_element.Text"><code class="docutils literal notranslate"><span class="pre">Text</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-elements.text_input_element">elements.text_input_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#elements.text_input_element.TextInput"><code class="docutils literal notranslate"><span class="pre">TextInput</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-elements.tooltip_button_element">elements.tooltip_button_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#elements.tooltip_button_element.TooltipButton"><code class="docutils literal notranslate"><span class="pre">TooltipButton</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-elements">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="fixtures.html">fixtures package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="fixtures.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="fixtures.html#module-fixtures.pages">fixtures.pages module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.pytest_addoption"><code class="docutils literal notranslate"><span class="pre">pytest_addoption()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.browser"><code class="docutils literal notranslate"><span class="pre">browser()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.get_firefox_browser"><code class="docutils literal notranslate"><span class="pre">get_firefox_browser()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.get_chrome_browser"><code class="docutils literal notranslate"><span class="pre">get_chrome_browser()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.get_remote_chrome"><code class="docutils literal notranslate"><span class="pre">get_remote_chrome()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.get_context"><code class="docutils literal notranslate"><span class="pre">get_context()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.return_back"><code class="docutils literal notranslate"><span class="pre">return_back()</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="fixtures.html#module-fixtures">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="pages.html">pages package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="pages.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.base_page">pages.base_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.base_page.BasePage"><code class="docutils literal notranslate"><span class="pre">BasePage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.current_session_tab">pages.current_session_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.current_session_tab.CurrentSessionsTab"><code class="docutils literal notranslate"><span class="pre">CurrentSessionsTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.license_tab">pages.license_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.license_tab.LicenseTab"><code class="docutils literal notranslate"><span class="pre">LicenseTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.login_page">pages.login_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.login_page.LoginPage"><code class="docutils literal notranslate"><span class="pre">LoginPage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.main_page">pages.main_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.main_page.MainPage"><code class="docutils literal notranslate"><span class="pre">MainPage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.push_notifications_settings_tab">pages.push_notifications_settings_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab"><code class="docutils literal notranslate"><span class="pre">PushNotificationsSettingsTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.service_status_tab">pages.service_status_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.service_status_tab.ServiceStatusTab"><code class="docutils literal notranslate"><span class="pre">ServiceStatusTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.session_settings_tab">pages.session_settings_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.session_settings_tab.SessionSettingsTab"><code class="docutils literal notranslate"><span class="pre">SessionSettingsTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.templates_tab">pages.templates_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.templates_tab.TemplatesTab"><code class="docutils literal notranslate"><span class="pre">TemplatesTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.users_tab">pages.users_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.users_tab.UsersTab"><code class="docutils literal notranslate"><span class="pre">UsersTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.ztp_config_tab">pages.ztp_config_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.ztp_config_tab.ZTPConfigTab"><code class="docutils literal notranslate"><span class="pre">ZTPConfigTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.ztp_templates_tab">pages.ztp_templates_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.ztp_templates_tab.ZTPTemplatesTab"><code class="docutils literal notranslate"><span class="pre">ZTPTemplatesTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="tools.html">tools package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="tools.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="tools.html#module-tools.fix_python_project">tools.fix_python_project module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="tools.html#tools.fix_python_project.ProjectFixer"><code class="docutils literal notranslate"><span class="pre">ProjectFixer</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="tools.html#module-tools.logger">tools.logger module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="tools.html#tools.logger.get_logger"><code class="docutils literal notranslate"><span class="pre">get_logger()</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="tools.html#module-tools">Module contents</a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#module-elements.button_element">elements.button_element module</a><ul>
<li><a class="reference internal" href="#elements.button_element.Button"><code class="docutils literal notranslate"><span class="pre">Button</span></code></a><ul>
<li><a class="reference internal" href="#elements.button_element.Button.type_of"><code class="docutils literal notranslate"><span class="pre">Button.type_of</span></code></a></li>
<li><a class="reference internal" href="#elements.button_element.Button.is_disabled"><code class="docutils literal notranslate"><span class="pre">Button.is_disabled()</span></code></a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Документация и руководства:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="sphinx_guide.html">Руководство по документации тестов с помощью Sphinx</a><ul>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id2">1 Расположение документа</a></li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id3">2 Первичная настройка для нового проекта</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id4">2.1 Подготовка зависимостей</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id5">2.2 Инициализация Sphinx</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id6">2.3 Настройка конфигурации</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id7">2.4 Настройка главной страницы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id8">3 Работа с существующим проектом</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id9">3.1 Установка зависимостей</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id10">3.2 Генерация документации</a><ul>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id11">3.2.1 Базовая генерация</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id12">3.2.2 Генерация с исключениями</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id13">3.2.3 Принудительная перегенерация</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id14">3.3 Очистка документации</a><ul>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id15">3.3.1 Команды очистки</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id16">3.3.2 Автоматизация очистки</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id17">3.4 Сборка и деплой</a><ul>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id18">3.4.1 Локальная сборка</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id19">3.4.2 Проверка качества</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id20">3.4.3 Сборка для публикации</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#ci-cd">3.4.4 Настройка для CI/CD</a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#module-elements.checkbox_element">elements.checkbox_element module</a><ul>
<li><a class="reference internal" href="#elements.checkbox_element.Checkbox"><code class="docutils literal notranslate"><span class="pre">Checkbox</span></code></a><ul>
<li><a class="reference internal" href="#elements.checkbox_element.Checkbox.type_of"><code class="docutils literal notranslate"><span class="pre">Checkbox.type_of</span></code></a></li>
<li><a class="reference internal" href="#elements.checkbox_element.Checkbox.check"><code class="docutils literal notranslate"><span class="pre">Checkbox.check()</span></code></a></li>
<li><a class="reference internal" href="#elements.checkbox_element.Checkbox.uncheck"><code class="docutils literal notranslate"><span class="pre">Checkbox.uncheck()</span></code></a></li>
<li><a class="reference internal" href="#elements.checkbox_element.Checkbox.is_checked"><code class="docutils literal notranslate"><span class="pre">Checkbox.is_checked()</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#mkdocs-sphinx">4 Конвертация контента из MkDocs в Sphinx</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id21">4.1 Текст</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id22">4.2 Таблицы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id23">5 Особенности Sphinx</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#docstrings">5.1 Поддержка docstrings</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id24">5.2 Кастомные директивы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id25">6 Решение проблем</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id26">6.1 Проблема: Модули не находятся</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id27">6.2 Проблема: Не генерируются docstrings</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id28">6.3 Проблема: Тема не применяется</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id29">7 Дополнительные возможности</a></li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#version-history">История версий</a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#module-elements.icon_element">elements.icon_element module</a><ul>
<li><a class="reference internal" href="#elements.icon_element.Icon"><code class="docutils literal notranslate"><span class="pre">Icon</span></code></a><ul>
<li><a class="reference internal" href="#elements.icon_element.Icon.type_of"><code class="docutils literal notranslate"><span class="pre">Icon.type_of</span></code></a></li>
<li><a class="reference internal" href="#elements.icon_element.Icon.is_password_hidden"><code class="docutils literal notranslate"><span class="pre">Icon.is_password_hidden()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#module-elements.tab_button_element">elements.tab_button_element module</a><ul>
<li><a class="reference internal" href="#elements.tab_button_element.TabButton"><code class="docutils literal notranslate"><span class="pre">TabButton</span></code></a><ul>
<li><a class="reference internal" href="#elements.tab_button_element.TabButton.type_of"><code class="docutils literal notranslate"><span class="pre">TabButton.type_of</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#module-elements.text_element">elements.text_element module</a><ul>
<li><a class="reference internal" href="#elements.text_element.Text"><code class="docutils literal notranslate"><span class="pre">Text</span></code></a><ul>
<li><a class="reference internal" href="#elements.text_element.Text.type_of"><code class="docutils literal notranslate"><span class="pre">Text.type_of</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#module-elements.text_input_element">elements.text_input_element module</a><ul>
<li><a class="reference internal" href="#elements.text_input_element.TextInput"><code class="docutils literal notranslate"><span class="pre">TextInput</span></code></a><ul>
<li><a class="reference internal" href="#elements.text_input_element.TextInput.type_of"><code class="docutils literal notranslate"><span class="pre">TextInput.type_of</span></code></a></li>
<li><a class="reference internal" href="#elements.text_input_element.TextInput.get_input_value"><code class="docutils literal notranslate"><span class="pre">TextInput.get_input_value()</span></code></a></li>
<li><a class="reference internal" href="#elements.text_input_element.TextInput.get_input_type"><code class="docutils literal notranslate"><span class="pre">TextInput.get_input_type()</span></code></a></li>
<li><a class="reference internal" href="#elements.text_input_element.TextInput.decrease_value"><code class="docutils literal notranslate"><span class="pre">TextInput.decrease_value()</span></code></a></li>
<li><a class="reference internal" href="#elements.text_input_element.TextInput.increase_value"><code class="docutils literal notranslate"><span class="pre">TextInput.increase_value()</span></code></a></li>
<li><a class="reference internal" href="#elements.text_input_element.TextInput.input_value"><code class="docutils literal notranslate"><span class="pre">TextInput.input_value()</span></code></a></li>
<li><a class="reference internal" href="#elements.text_input_element.TextInput.clear"><code class="docutils literal notranslate"><span class="pre">TextInput.clear()</span></code></a></li>
<li><a class="reference internal" href="#elements.text_input_element.TextInput.check_empty_input"><code class="docutils literal notranslate"><span class="pre">TextInput.check_empty_input()</span></code></a></li>
<li><a class="reference internal" href="#elements.text_input_element.TextInput.check_editable_input"><code class="docutils literal notranslate"><span class="pre">TextInput.check_editable_input()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#module-elements.tooltip_button_element">elements.tooltip_button_element module</a><ul>
<li><a class="reference internal" href="#elements.tooltip_button_element.TooltipButton"><code class="docutils literal notranslate"><span class="pre">TooltipButton</span></code></a><ul>
<li><a class="reference internal" href="#elements.tooltip_button_element.TooltipButton.type_of"><code class="docutils literal notranslate"><span class="pre">TooltipButton.type_of</span></code></a></li>
<li><a class="reference internal" href="#elements.tooltip_button_element.TooltipButton.get_tooltip_text"><code class="docutils literal notranslate"><span class="pre">TooltipButton.get_tooltip_text()</span></code></a></li>
<li><a class="reference internal" href="#elements.tooltip_button_element.TooltipButton.wait_for_tooltip_to_disappear"><code class="docutils literal notranslate"><span class="pre">TooltipButton.wait_for_tooltip_to_disappear()</span></code></a></li>
<li><a class="reference internal" href="#elements.tooltip_button_element.TooltipButton.check_tooltip_with_text"><code class="docutils literal notranslate"><span class="pre">TooltipButton.check_tooltip_with_text()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#module-elements">Module contents</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</nav>
@ -145,6 +369,7 @@
<div role="navigation" aria-label="Навигация по страницам">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="modules.html">e-nms_qa_automation</a></li>
<li class="breadcrumb-item active">elements package</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/elements.rst.txt" rel="nofollow"> Просмотреть исходный код страницы</a>
@ -807,7 +1032,10 @@
</div>
</div>
<footer>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Нижняя область">
<a href="data.html" class="btn btn-neutral float-left" title="data package" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Предыдущая</a>
<a href="fixtures.html" class="btn btn-neutral float-right" title="fixtures package" accesskey="n" rel="next">Следующая <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>

View File

@ -19,7 +19,9 @@
<script src="_static/translations.js?v=cd1d70c9"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="Алфавитный указатель" href="genindex.html" />
<link rel="search" title="Поиск" href="search.html" />
<link rel="search" title="Поиск" href="search.html" />
<link rel="next" title="pages package" href="pages.html" />
<link rel="prev" title="elements package" href="elements.html" />
</head>
<body class="wy-body-for-nav">
@ -41,25 +43,318 @@
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Меню навигации">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">fixtures package</a><ul>
<li><a class="reference internal" href="#submodules">Submodules</a></li>
<li><a class="reference internal" href="#module-fixtures.pages">fixtures.pages module</a><ul>
<li><a class="reference internal" href="#fixtures.pages.pytest_addoption"><code class="docutils literal notranslate"><span class="pre">pytest_addoption()</span></code></a></li>
<li><a class="reference internal" href="#fixtures.pages.browser"><code class="docutils literal notranslate"><span class="pre">browser()</span></code></a></li>
<li><a class="reference internal" href="#fixtures.pages.get_firefox_browser"><code class="docutils literal notranslate"><span class="pre">get_firefox_browser()</span></code></a></li>
<li><a class="reference internal" href="#fixtures.pages.get_chrome_browser"><code class="docutils literal notranslate"><span class="pre">get_chrome_browser()</span></code></a></li>
<li><a class="reference internal" href="#fixtures.pages.get_remote_chrome"><code class="docutils literal notranslate"><span class="pre">get_remote_chrome()</span></code></a></li>
<li><a class="reference internal" href="#fixtures.pages.get_context"><code class="docutils literal notranslate"><span class="pre">get_context()</span></code></a></li>
<li><a class="reference internal" href="#fixtures.pages.return_back"><code class="docutils literal notranslate"><span class="pre">return_back()</span></code></a></li>
<p class="caption" role="heading"><span class="caption-text">Содержание:</span></p>
<ul class="current">
<li class="toctree-l1 current"><a class="reference internal" href="modules.html">e-nms_qa_automation</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="components.html">components package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="components.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.alert_component">components.alert_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.alert_component.AlertComponent"><code class="docutils literal notranslate"><span class="pre">AlertComponent</span></code></a></li>
</ul>
</li>
<li><a class="reference internal" href="#module-fixtures">Module contents</a></li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.base_component">components.base_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.base_component.BaseComponent"><code class="docutils literal notranslate"><span class="pre">BaseComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.card_component">components.card_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.card_component.CardComponent"><code class="docutils literal notranslate"><span class="pre">CardComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.confirm_component">components.confirm_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.confirm_component.ConfirmComponent"><code class="docutils literal notranslate"><span class="pre">ConfirmComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.date_picker_component">components.date_picker_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.date_picker_component.DatePickerComponent"><code class="docutils literal notranslate"><span class="pre">DatePickerComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.dropdown_list_component">components.dropdown_list_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.dropdown_list_component.DropdownList"><code class="docutils literal notranslate"><span class="pre">DropdownList</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.eventbar_component">components.eventbar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.eventbar_component.EventPanelComponent"><code class="docutils literal notranslate"><span class="pre">EventPanelComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.events_container_component">components.events_container_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.events_container_component.EventsContainerComponent"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.json_container_component">components.json_container_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.json_container_component.JsonContainerComponent"><code class="docutils literal notranslate"><span class="pre">JsonContainerComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.modal_window_component">components.modal_window_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.modal_window_component.ModalWindowComponent"><code class="docutils literal notranslate"><span class="pre">ModalWindowComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.navbar_component">components.navbar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.navbar_component.NavigationPanelComponent"><code class="docutils literal notranslate"><span class="pre">NavigationPanelComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.table_component">components.table_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.table_component.TableComponent"><code class="docutils literal notranslate"><span class="pre">TableComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.toolbar_component">components.toolbar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.toolbar_component.ToolbarComponent"><code class="docutils literal notranslate"><span class="pre">ToolbarComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="components_derived.html">components_derived package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.container_system_log_events">components_derived.container_system_log_events module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.container_system_log_events.SystemLogEventsContainer"><code class="docutils literal notranslate"><span class="pre">SystemLogEventsContainer</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.date_input_component">components_derived.date_input_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.date_input_component.DateInput"><code class="docutils literal notranslate"><span class="pre">DateInput</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.interactive_dropdown_list">components_derived.interactive_dropdown_list module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.interactive_dropdown_list.InteractiveDropdownList"><code class="docutils literal notranslate"><span class="pre">InteractiveDropdownList</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_add_AD_user">components_derived.modal_add_AD_user module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_add_AD_user.AddADUserModalWindow"><code class="docutils literal notranslate"><span class="pre">AddADUserModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_add_local_user">components_derived.modal_add_local_user module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_add_local_user.AddLocalUserModalWindow"><code class="docutils literal notranslate"><span class="pre">AddLocalUserModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_change_password">components_derived.modal_change_password module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_change_password.ChangePasswordModalWindow"><code class="docutils literal notranslate"><span class="pre">ChangePasswordModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_edit_user">components_derived.modal_edit_user module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_edit_user.EditUserModalWindow"><code class="docutils literal notranslate"><span class="pre">EditUserModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_view_template">components_derived.modal_view_template module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_view_template.ViewTemplateModalWindow"><code class="docutils literal notranslate"><span class="pre">ViewTemplateModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_view_ztp_template">components_derived.modal_view_ztp_template module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_view_ztp_template.ViewZTPTemplateModalWindow"><code class="docutils literal notranslate"><span class="pre">ViewZTPTemplateModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.selection_bar_component">components_derived.selection_bar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.selection_bar_component.SelectionBarComponent"><code class="docutils literal notranslate"><span class="pre">SelectionBarComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.settings_form_component">components_derived.settings_form_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.settings_form_component.SettingsFormComponent"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.sidebar_filter_component">components_derived.sidebar_filter_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.sidebar_filter_component.SidebarFilterComponent"><code class="docutils literal notranslate"><span class="pre">SidebarFilterComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.user_card">components_derived.user_card module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.user_card.UserCard"><code class="docutils literal notranslate"><span class="pre">UserCard</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="conftest.html">conftest module</a><ul>
<li class="toctree-l3"><a class="reference internal" href="conftest.html#conftest.pytest_sessionfinish"><code class="docutils literal notranslate"><span class="pre">pytest_sessionfinish()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="conftest.html#conftest.pytest_addoption"><code class="docutils literal notranslate"><span class="pre">pytest_addoption()</span></code></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="data.html">data package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="data.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="data.html#module-data.constants">data.constants module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="data.html#data.constants.Constants"><code class="docutils literal notranslate"><span class="pre">Constants</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="data.html#module-data.environment">data.environment module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="data.html#data.environment.Environment"><code class="docutils literal notranslate"><span class="pre">Environment</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="data.html#module-data.roles_dict">data.roles_dict module</a></li>
<li class="toctree-l3"><a class="reference internal" href="data.html#module-data">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="elements.html">elements package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="elements.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.base_element">elements.base_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.base_element.BaseElement"><code class="docutils literal notranslate"><span class="pre">BaseElement</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.button_element">elements.button_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.button_element.Button"><code class="docutils literal notranslate"><span class="pre">Button</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.checkbox_element">elements.checkbox_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.checkbox_element.Checkbox"><code class="docutils literal notranslate"><span class="pre">Checkbox</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.icon_element">elements.icon_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.icon_element.Icon"><code class="docutils literal notranslate"><span class="pre">Icon</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.tab_button_element">elements.tab_button_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.tab_button_element.TabButton"><code class="docutils literal notranslate"><span class="pre">TabButton</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.text_element">elements.text_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.text_element.Text"><code class="docutils literal notranslate"><span class="pre">Text</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.text_input_element">elements.text_input_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.text_input_element.TextInput"><code class="docutils literal notranslate"><span class="pre">TextInput</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.tooltip_button_element">elements.tooltip_button_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.tooltip_button_element.TooltipButton"><code class="docutils literal notranslate"><span class="pre">TooltipButton</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">fixtures package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="#module-fixtures.pages">fixtures.pages module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#fixtures.pages.pytest_addoption"><code class="docutils literal notranslate"><span class="pre">pytest_addoption()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="#fixtures.pages.browser"><code class="docutils literal notranslate"><span class="pre">browser()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="#fixtures.pages.get_firefox_browser"><code class="docutils literal notranslate"><span class="pre">get_firefox_browser()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="#fixtures.pages.get_chrome_browser"><code class="docutils literal notranslate"><span class="pre">get_chrome_browser()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="#fixtures.pages.get_remote_chrome"><code class="docutils literal notranslate"><span class="pre">get_remote_chrome()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="#fixtures.pages.get_context"><code class="docutils literal notranslate"><span class="pre">get_context()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="#fixtures.pages.return_back"><code class="docutils literal notranslate"><span class="pre">return_back()</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-fixtures">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="pages.html">pages package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="pages.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.base_page">pages.base_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.base_page.BasePage"><code class="docutils literal notranslate"><span class="pre">BasePage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.current_session_tab">pages.current_session_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.current_session_tab.CurrentSessionsTab"><code class="docutils literal notranslate"><span class="pre">CurrentSessionsTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.license_tab">pages.license_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.license_tab.LicenseTab"><code class="docutils literal notranslate"><span class="pre">LicenseTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.login_page">pages.login_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.login_page.LoginPage"><code class="docutils literal notranslate"><span class="pre">LoginPage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.main_page">pages.main_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.main_page.MainPage"><code class="docutils literal notranslate"><span class="pre">MainPage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.push_notifications_settings_tab">pages.push_notifications_settings_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab"><code class="docutils literal notranslate"><span class="pre">PushNotificationsSettingsTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.service_status_tab">pages.service_status_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.service_status_tab.ServiceStatusTab"><code class="docutils literal notranslate"><span class="pre">ServiceStatusTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.session_settings_tab">pages.session_settings_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.session_settings_tab.SessionSettingsTab"><code class="docutils literal notranslate"><span class="pre">SessionSettingsTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.templates_tab">pages.templates_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.templates_tab.TemplatesTab"><code class="docutils literal notranslate"><span class="pre">TemplatesTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.users_tab">pages.users_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.users_tab.UsersTab"><code class="docutils literal notranslate"><span class="pre">UsersTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.ztp_config_tab">pages.ztp_config_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.ztp_config_tab.ZTPConfigTab"><code class="docutils literal notranslate"><span class="pre">ZTPConfigTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.ztp_templates_tab">pages.ztp_templates_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.ztp_templates_tab.ZTPTemplatesTab"><code class="docutils literal notranslate"><span class="pre">ZTPTemplatesTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="tools.html">tools package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="tools.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="tools.html#module-tools.fix_python_project">tools.fix_python_project module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="tools.html#tools.fix_python_project.ProjectFixer"><code class="docutils literal notranslate"><span class="pre">ProjectFixer</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="tools.html#module-tools.logger">tools.logger module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="tools.html#tools.logger.get_logger"><code class="docutils literal notranslate"><span class="pre">get_logger()</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="tools.html#module-tools">Module contents</a></li>
</ul>
</li>
</ul>
</div>
</li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Документация и руководства:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="sphinx_guide.html">Руководство по документации тестов с помощью Sphinx</a><ul>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id2">1 Расположение документа</a></li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id3">2 Первичная настройка для нового проекта</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id4">2.1 Подготовка зависимостей</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id5">2.2 Инициализация Sphinx</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id6">2.3 Настройка конфигурации</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id7">2.4 Настройка главной страницы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id8">3 Работа с существующим проектом</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id9">3.1 Установка зависимостей</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id10">3.2 Генерация документации</a><ul>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id11">3.2.1 Базовая генерация</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id12">3.2.2 Генерация с исключениями</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id13">3.2.3 Принудительная перегенерация</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id14">3.3 Очистка документации</a><ul>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id15">3.3.1 Команды очистки</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id16">3.3.2 Автоматизация очистки</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id17">3.4 Сборка и деплой</a><ul>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id18">3.4.1 Локальная сборка</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id19">3.4.2 Проверка качества</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id20">3.4.3 Сборка для публикации</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#ci-cd">3.4.4 Настройка для CI/CD</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#mkdocs-sphinx">4 Конвертация контента из MkDocs в Sphinx</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id21">4.1 Текст</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id22">4.2 Таблицы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id23">5 Особенности Sphinx</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#docstrings">5.1 Поддержка docstrings</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id24">5.2 Кастомные директивы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id25">6 Решение проблем</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id26">6.1 Проблема: Модули не находятся</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id27">6.2 Проблема: Не генерируются docstrings</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id28">6.3 Проблема: Тема не применяется</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id29">7 Дополнительные возможности</a></li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#version-history">История версий</a></li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
@ -74,6 +369,7 @@
<div role="navigation" aria-label="Навигация по страницам">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="modules.html">e-nms_qa_automation</a></li>
<li class="breadcrumb-item active">fixtures package</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/fixtures.rst.txt" rel="nofollow"> Просмотреть исходный код страницы</a>
@ -240,7 +536,10 @@
</div>
</div>
<footer>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Нижняя область">
<a href="elements.html" class="btn btn-neutral float-left" title="elements package" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Предыдущая</a>
<a href="pages.html" class="btn btn-neutral float-right" title="pages package" accesskey="n" rel="next">Следующая <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>

View File

@ -89,10 +89,6 @@
<li class="toctree-l4"><a class="reference internal" href="components.html#components.navbar_component.NavigationPanelComponent"><code class="docutils literal notranslate"><span class="pre">NavigationPanelComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.settings_form_component">components.settings_form_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.settings_form_component.SettingsFormComponent"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.table_component">components.table_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.table_component.TableComponent"><code class="docutils literal notranslate"><span class="pre">TableComponent</span></code></a></li>
</ul>
@ -114,6 +110,10 @@
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.date_input_component.DateInput"><code class="docutils literal notranslate"><span class="pre">DateInput</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.interactive_dropdown_list">components_derived.interactive_dropdown_list module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.interactive_dropdown_list.InteractiveDropdownList"><code class="docutils literal notranslate"><span class="pre">InteractiveDropdownList</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_add_AD_user">components_derived.modal_add_AD_user module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_add_AD_user.AddADUserModalWindow"><code class="docutils literal notranslate"><span class="pre">AddADUserModalWindow</span></code></a></li>
</ul>
@ -142,6 +142,10 @@
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.selection_bar_component.SelectionBarComponent"><code class="docutils literal notranslate"><span class="pre">SelectionBarComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.settings_form_component">components_derived.settings_form_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.settings_form_component.SettingsFormComponent"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.sidebar_filter_component">components_derived.sidebar_filter_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.sidebar_filter_component.SidebarFilterComponent"><code class="docutils literal notranslate"><span class="pre">SidebarFilterComponent</span></code></a></li>
</ul>
@ -238,10 +242,6 @@
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.license_tab.LicenseTab"><code class="docutils literal notranslate"><span class="pre">LicenseTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.location_page">pages.location_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.location_page.LocationPage"><code class="docutils literal notranslate"><span class="pre">LocationPage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.login_page">pages.login_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.login_page.LoginPage"><code class="docutils literal notranslate"><span class="pre">LoginPage</span></code></a></li>
</ul>
@ -250,6 +250,10 @@
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.main_page.MainPage"><code class="docutils literal notranslate"><span class="pre">MainPage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.push_notifications_settings_tab">pages.push_notifications_settings_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab"><code class="docutils literal notranslate"><span class="pre">PushNotificationsSettingsTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.service_status_tab">pages.service_status_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.service_status_tab.ServiceStatusTab"><code class="docutils literal notranslate"><span class="pre">ServiceStatusTab</span></code></a></li>
</ul>
@ -292,6 +296,60 @@
</li>
</ul>
</li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Документация и руководства:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="sphinx_guide.html">Руководство по документации тестов с помощью Sphinx</a><ul>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id2">1 Расположение документа</a></li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id3">2 Первичная настройка для нового проекта</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id4">2.1 Подготовка зависимостей</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id5">2.2 Инициализация Sphinx</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id6">2.3 Настройка конфигурации</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id7">2.4 Настройка главной страницы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id8">3 Работа с существующим проектом</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id9">3.1 Установка зависимостей</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id10">3.2 Генерация документации</a><ul>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id11">3.2.1 Базовая генерация</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id12">3.2.2 Генерация с исключениями</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id13">3.2.3 Принудительная перегенерация</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id14">3.3 Очистка документации</a><ul>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id15">3.3.1 Команды очистки</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id16">3.3.2 Автоматизация очистки</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id17">3.4 Сборка и деплой</a><ul>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id18">3.4.1 Локальная сборка</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id19">3.4.2 Проверка качества</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id20">3.4.3 Сборка для публикации</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#ci-cd">3.4.4 Настройка для CI/CD</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#mkdocs-sphinx">4 Конвертация контента из MkDocs в Sphinx</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id21">4.1 Текст</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id22">4.2 Таблицы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id23">5 Особенности Sphinx</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#docstrings">5.1 Поддержка docstrings</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id24">5.2 Кастомные директивы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id25">6 Решение проблем</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id26">6.1 Проблема: Модули не находятся</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id27">6.2 Проблема: Не генерируются docstrings</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id28">6.3 Проблема: Тема не применяется</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id29">7 Дополнительные возможности</a></li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#version-history">История версий</a></li>
</ul>
</li>
</ul>
</div>
@ -382,12 +440,12 @@
<li><a href="components.html#components.eventbar_component.EventPanelComponent.__init__">(метод EventPanelComponent)</a>
</li>
<li><a href="components.html#components.events_container_component.EventsContainerComponent.__init__">(метод EventsContainerComponent)</a>
</li>
<li><a href="components_derived.html#components_derived.interactive_dropdown_list.InteractiveDropdownList.__init__">(метод InteractiveDropdownList)</a>
</li>
<li><a href="components.html#components.json_container_component.JsonContainerComponent.__init__">(метод JsonContainerComponent)</a>
</li>
<li><a href="pages.html#pages.license_tab.LicenseTab.__init__">(метод LicenseTab)</a>
</li>
<li><a href="pages.html#pages.location_page.LocationPage.__init__">(метод LocationPage)</a>
</li>
<li><a href="pages.html#pages.login_page.LoginPage.__init__">(метод LoginPage)</a>
</li>
@ -398,6 +456,8 @@
<li><a href="components.html#components.navbar_component.NavigationPanelComponent.__init__">(метод NavigationPanelComponent)</a>
</li>
<li><a href="tools.html#tools.fix_python_project.ProjectFixer.__init__">(метод ProjectFixer)</a>
</li>
<li><a href="pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab.__init__">(метод PushNotificationsSettingsTab)</a>
</li>
<li><a href="components_derived.html#components_derived.selection_bar_component.SelectionBarComponent.__init__">(метод SelectionBarComponent)</a>
</li>
@ -405,7 +465,7 @@
</li>
<li><a href="pages.html#pages.session_settings_tab.SessionSettingsTab.__init__">(метод SessionSettingsTab)</a>
</li>
<li><a href="components.html#components.settings_form_component.SettingsFormComponent.__init__">(метод SettingsFormComponent)</a>
<li><a href="components_derived.html#components_derived.settings_form_component.SettingsFormComponent.__init__">(метод SettingsFormComponent)</a>
</li>
<li><a href="components_derived.html#components_derived.sidebar_filter_component.SidebarFilterComponent.__init__">(метод SidebarFilterComponent)</a>
</li>
@ -445,7 +505,7 @@
<li><a href="components.html#components.modal_window_component.ModalWindowComponent.add_button">add_button() (метод ModalWindowComponent)</a>
<ul>
<li><a href="components.html#components.settings_form_component.SettingsFormComponent.add_button">(метод SettingsFormComponent)</a>
<li><a href="components_derived.html#components_derived.settings_form_component.SettingsFormComponent.add_button">(метод SettingsFormComponent)</a>
</li>
<li><a href="components.html#components.toolbar_component.ToolbarComponent.add_button">(метод ToolbarComponent)</a>
</li>
@ -453,7 +513,7 @@
<li><a href="components.html#components.modal_window_component.ModalWindowComponent.add_content_item">add_content_item() (метод ModalWindowComponent)</a>
<ul>
<li><a href="components.html#components.settings_form_component.SettingsFormComponent.add_content_item">(метод SettingsFormComponent)</a>
<li><a href="components_derived.html#components_derived.settings_form_component.SettingsFormComponent.add_content_item">(метод SettingsFormComponent)</a>
</li>
</ul></li>
<li><a href="components_derived.html#components_derived.sidebar_filter_component.SidebarFilterComponent.add_filtering_parameter">add_filtering_parameter() (метод SidebarFilterComponent)</a>
@ -481,11 +541,15 @@
<li><a href="components.html#components.modal_window_component.ModalWindowComponent.add_toolbar_title">add_toolbar_title() (метод ModalWindowComponent)</a>
<ul>
<li><a href="components.html#components.settings_form_component.SettingsFormComponent.add_toolbar_title">(метод SettingsFormComponent)</a>
<li><a href="components_derived.html#components_derived.settings_form_component.SettingsFormComponent.add_toolbar_title">(метод SettingsFormComponent)</a>
</li>
</ul></li>
<li><a href="components.html#components.toolbar_component.ToolbarComponent.add_tooltip_button">add_tooltip_button() (метод ToolbarComponent)</a>
<li><a href="components_derived.html#components_derived.settings_form_component.SettingsFormComponent.add_tooltip_button">add_tooltip_button() (метод SettingsFormComponent)</a>
<ul>
<li><a href="components.html#components.toolbar_component.ToolbarComponent.add_tooltip_button">(метод ToolbarComponent)</a>
</li>
</ul></li>
<li><a href="components_derived.html#components_derived.modal_add_AD_user.AddADUserModalWindow">AddADUserModalWindow (класс в components_derived.modal_add_AD_user)</a>
</li>
<li><a href="components_derived.html#components_derived.modal_add_local_user.AddLocalUserModalWindow">AddLocalUserModalWindow (класс в components_derived.modal_add_local_user)</a>
@ -552,12 +616,16 @@
<li><a href="components_derived.html#components_derived.modal_edit_user.EditUserModalWindow.check_blocking_checkbox">(метод EditUserModalWindow)</a>
</li>
</ul></li>
<li><a href="components.html#components.toolbar_component.ToolbarComponent.check_button_tooltip">check_button_tooltip() (метод ToolbarComponent)</a>
<li><a href="components_derived.html#components_derived.settings_form_component.SettingsFormComponent.check_button_tooltip">check_button_tooltip() (метод SettingsFormComponent)</a>
<ul>
<li><a href="components.html#components.toolbar_component.ToolbarComponent.check_button_tooltip">(метод ToolbarComponent)</a>
</li>
</ul></li>
<li><a href="components.html#components.modal_window_component.ModalWindowComponent.check_button_visibility">check_button_visibility() (метод ModalWindowComponent)</a>
<ul>
<li><a href="components.html#components.settings_form_component.SettingsFormComponent.check_button_visibility">(метод SettingsFormComponent)</a>
<li><a href="components_derived.html#components_derived.settings_form_component.SettingsFormComponent.check_button_visibility">(метод SettingsFormComponent)</a>
</li>
<li><a href="components.html#components.toolbar_component.ToolbarComponent.check_button_visibility">(метод ToolbarComponent)</a>
</li>
@ -594,6 +662,8 @@
<li><a href="components_derived.html#components_derived.modal_edit_user.EditUserModalWindow.check_content">(метод EditUserModalWindow)</a>
</li>
<li><a href="pages.html#pages.license_tab.LicenseTab.check_content">(метод LicenseTab)</a>
</li>
<li><a href="pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab.check_content">(метод PushNotificationsSettingsTab)</a>
</li>
<li><a href="pages.html#pages.session_settings_tab.SessionSettingsTab.check_content">(метод SessionSettingsTab)</a>
</li>
@ -779,7 +849,7 @@
<ul>
<li><a href="pages.html#pages.session_settings_tab.SessionSettingsTab.check_vertical_scrolling">(метод SessionSettingsTab)</a>
</li>
<li><a href="components.html#components.settings_form_component.SettingsFormComponent.check_vertical_scrolling">(метод SettingsFormComponent)</a>
<li><a href="components_derived.html#components_derived.settings_form_component.SettingsFormComponent.check_vertical_scrolling">(метод SettingsFormComponent)</a>
</li>
<li><a href="components_derived.html#components_derived.sidebar_filter_component.SidebarFilterComponent.check_vertical_scrolling">(метод SidebarFilterComponent)</a>
</li>
@ -809,10 +879,12 @@
<li><a href="elements.html#elements.text_input_element.TextInput.clear">clear() (метод TextInput)</a>
</li>
<li><a href="components_derived.html#components_derived.selection_bar_component.SelectionBarComponent.clear_combobox_field">clear_combobox_field() (метод SelectionBarComponent)</a>
</li>
<li><a href="components_derived.html#components_derived.selection_bar_component.SelectionBarComponent.clear_selections">clear_selections() (метод SelectionBarComponent)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="components_derived.html#components_derived.selection_bar_component.SelectionBarComponent.clear_selections">clear_selections() (метод SelectionBarComponent)</a>
<li><a href="pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab.clear_users_setting_value">clear_users_setting_value() (метод PushNotificationsSettingsTab)</a>
</li>
<li><a href="elements.html#elements.base_element.BaseElement.click">click() (метод BaseElement)</a>
</li>
@ -825,7 +897,7 @@
<li><a href="components.html#components.modal_window_component.ModalWindowComponent.click_button">click_button() (метод ModalWindowComponent)</a>
<ul>
<li><a href="components.html#components.settings_form_component.SettingsFormComponent.click_button">(метод SettingsFormComponent)</a>
<li><a href="components_derived.html#components_derived.settings_form_component.SettingsFormComponent.click_button">(метод SettingsFormComponent)</a>
</li>
<li><a href="components.html#components.toolbar_component.ToolbarComponent.click_button">(метод ToolbarComponent)</a>
</li>
@ -851,8 +923,6 @@
</li>
</ul></li>
<li><a href="components_derived.html#components_derived.modal_change_password.ChangePasswordModalWindow.click_confirm_password_hidden_icon">click_confirm_password_hidden_icon() (метод ChangePasswordModalWindow)</a>
</li>
<li><a href="pages.html#pages.location_page.LocationPage.click_create_button">click_create_button() (метод LocationPage)</a>
</li>
<li><a href="pages.html#pages.session_settings_tab.SessionSettingsTab.click_edit_button">click_edit_button() (метод SessionSettingsTab)</a>
</li>
@ -901,6 +971,8 @@
<li><a href="pages.html#pages.session_settings_tab.SessionSettingsTab.click_save_button">click_save_button() (метод SessionSettingsTab)</a>
</li>
<li><a href="components.html#components.navbar_component.NavigationPanelComponent.click_sub_item">click_sub_item() (метод NavigationPanelComponent)</a>
</li>
<li><a href="pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab.click_submit_button">click_submit_button() (метод PushNotificationsSettingsTab)</a>
</li>
<li><a href="pages.html#pages.main_page.MainPage.click_subpanel_item">click_subpanel_item() (метод MainPage)</a>
</li>
@ -1054,13 +1126,6 @@
<ul>
<li><a href="components.html#module-components.navbar_component">module</a>
</li>
</ul></li>
<li>
components.settings_form_component
<ul>
<li><a href="components.html#module-components.settings_form_component">module</a>
</li>
</ul></li>
<li>
@ -1096,6 +1161,13 @@
<ul>
<li><a href="components_derived.html#module-components_derived.date_input_component">module</a>
</li>
</ul></li>
<li>
components_derived.interactive_dropdown_list
<ul>
<li><a href="components_derived.html#module-components_derived.interactive_dropdown_list">module</a>
</li>
</ul></li>
<li>
@ -1145,6 +1217,13 @@
<ul>
<li><a href="components_derived.html#module-components_derived.selection_bar_component">module</a>
</li>
</ul></li>
<li>
components_derived.settings_form_component
<ul>
<li><a href="components_derived.html#module-components_derived.settings_form_component">module</a>
</li>
</ul></li>
<li>
@ -1222,8 +1301,6 @@
</li>
<li><a href="elements.html#elements.text_input_element.TextInput.decrease_value">decrease_value() (метод TextInput)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pages.html#pages.templates_tab.TemplatesTab.delete_modal_window">delete_modal_window() (метод TemplatesTab)</a>
<ul>
@ -1232,6 +1309,8 @@
<li><a href="pages.html#pages.ztp_templates_tab.ZTPTemplatesTab.delete_modal_window">(метод ZTPTemplatesTab)</a>
</li>
</ul></li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pages.html#pages.current_session_tab.CurrentSessionsTab.delete_session_by_index">delete_session_by_index() (метод CurrentSessionsTab)</a>
</li>
<li><a href="pages.html#pages.current_session_tab.CurrentSessionsTab.delete_session_by_token">delete_session_by_token() (метод CurrentSessionsTab)</a>
@ -1242,6 +1321,10 @@
<li><a href="pages.html#pages.users_tab.UsersTab.delete_user">(метод UsersTab)</a>
</li>
</ul></li>
<li><a href="components_derived.html#components_derived.interactive_dropdown_list.InteractiveDropdownList.deselect_item_with_text">deselect_item_with_text() (метод InteractiveDropdownList)</a>
</li>
<li><a href="pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab.deselect_users">deselect_users() (метод PushNotificationsSettingsTab)</a>
</li>
<li><a href="data.html#data.environment.Environment.DEVELOP">DEVELOP (атрибут Environment)</a>
</li>
<li><a href="pages.html#pages.login_page.LoginPage.do_login">do_login() (метод LoginPage)</a>
@ -1402,11 +1485,13 @@
<li><a href="components.html#components.modal_window_component.ModalWindowComponent.get_button_by_name">get_button_by_name() (метод ModalWindowComponent)</a>
<ul>
<li><a href="components.html#components.settings_form_component.SettingsFormComponent.get_button_by_name">(метод SettingsFormComponent)</a>
<li><a href="components_derived.html#components_derived.settings_form_component.SettingsFormComponent.get_button_by_name">(метод SettingsFormComponent)</a>
</li>
<li><a href="components.html#components.toolbar_component.ToolbarComponent.get_button_by_name">(метод ToolbarComponent)</a>
</li>
</ul></li>
<li><a href="components_derived.html#components_derived.interactive_dropdown_list.InteractiveDropdownList.get_checkbox_locator">get_checkbox_locator() (метод InteractiveDropdownList)</a>
</li>
<li><a href="fixtures.html#fixtures.pages.get_chrome_browser">get_chrome_browser() (в модуле fixtures.pages)</a>
</li>
<li><a href="components.html#components.dropdown_list_component.DropdownList.get_combobox_options">get_combobox_options() (метод DropdownList)</a>
@ -1414,7 +1499,7 @@
<li><a href="components.html#components.modal_window_component.ModalWindowComponent.get_content_item">get_content_item() (метод ModalWindowComponent)</a>
<ul>
<li><a href="components.html#components.settings_form_component.SettingsFormComponent.get_content_item">(метод SettingsFormComponent)</a>
<li><a href="components_derived.html#components_derived.settings_form_component.SettingsFormComponent.get_content_item">(метод SettingsFormComponent)</a>
</li>
</ul></li>
<li><a href="fixtures.html#fixtures.pages.get_context">get_context() (в модуле fixtures.pages)</a>
@ -1480,6 +1565,8 @@
<li><a href="components.html#components.base_component.BaseComponent.get_locator">get_locator() (метод BaseComponent)</a>
</li>
<li><a href="tools.html#tools.logger.get_logger">get_logger() (в модуле tools.logger)</a>
</li>
<li><a href="pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab.get_message_setting_value">get_message_setting_value() (метод PushNotificationsSettingsTab)</a>
</li>
<li><a href="pages.html#pages.templates_tab.TemplatesTab.get_modal_window">get_modal_window() (метод TemplatesTab)</a>
@ -1520,6 +1607,8 @@
</li>
</ul></li>
<li><a href="components.html#components.dropdown_list_component.DropdownList.get_selected_combobox_value">get_selected_combobox_value() (метод DropdownList)</a>
</li>
<li><a href="components_derived.html#components_derived.interactive_dropdown_list.InteractiveDropdownList.get_selected_items">get_selected_items() (метод InteractiveDropdownList)</a>
</li>
<li><a href="components_derived.html#components_derived.selection_bar_component.SelectionBarComponent.get_selected_values">get_selected_values() (метод SelectionBarComponent)</a>
</li>
@ -1556,6 +1645,8 @@
<li><a href="components.html#components.toolbar_component.ToolbarComponent.get_toolbar_title_text">get_toolbar_title_text() (метод ToolbarComponent)</a>
</li>
<li><a href="elements.html#elements.tooltip_button_element.TooltipButton.get_tooltip_text">get_tooltip_text() (метод TooltipButton)</a>
</li>
<li><a href="pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab.get_users_setting_value">get_users_setting_value() (метод PushNotificationsSettingsTab)</a>
</li>
<li><a href="components.html#components.date_picker_component.DatePickerComponent.get_year">get_year() (метод DatePickerComponent)</a>
</li>
@ -1572,10 +1663,14 @@
<li><a href="elements.html#elements.text_input_element.TextInput.increase_value">increase_value() (метод TextInput)</a>
</li>
<li><a href="components_derived.html#components_derived.date_input_component.DateInput.input_date">input_date() (метод DateInput)</a>
</li>
<li><a href="pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab.input_message">input_message() (метод PushNotificationsSettingsTab)</a>
</li>
<li><a href="components_derived.html#components_derived.date_input_component.DateInput.input_time">input_time() (метод DateInput)</a>
</li>
<li><a href="elements.html#elements.text_input_element.TextInput.input_value">input_value() (метод TextInput)</a>
</li>
<li><a href="components_derived.html#components_derived.interactive_dropdown_list.InteractiveDropdownList">InteractiveDropdownList (класс в components_derived.interactive_dropdown_list)</a>
</li>
<li><a href="components.html#components.toolbar_component.ToolbarComponent.is_button_not_present">is_button_not_present() (метод ToolbarComponent)</a>
</li>
@ -1584,13 +1679,11 @@
<li><a href="elements.html#elements.checkbox_element.Checkbox.is_checked">is_checked() (метод Checkbox)</a>
</li>
<li><a href="components.html#components.events_container_component.EventsContainerComponent.is_chevron_left_disabled">is_chevron_left_disabled() (метод EventsContainerComponent)</a>
</li>
<li><a href="components.html#components.events_container_component.EventsContainerComponent.is_chevron_right_disabled">is_chevron_right_disabled() (метод EventsContainerComponent)</a>
</li>
<li><a href="pages.html#pages.location_page.LocationPage.is_create_button_visible">is_create_button_visible() (метод LocationPage)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="components.html#components.events_container_component.EventsContainerComponent.is_chevron_right_disabled">is_chevron_right_disabled() (метод EventsContainerComponent)</a>
</li>
<li><a href="elements.html#elements.button_element.Button.is_disabled">is_disabled() (метод Button)</a>
</li>
<li><a href="components.html#components.events_container_component.EventsContainerComponent.is_first_page_disabled">is_first_page_disabled() (метод EventsContainerComponent)</a>
@ -1632,8 +1725,6 @@
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pages.html#pages.license_tab.LicenseTab">LicenseTab (класс в pages.license_tab)</a>
</li>
<li><a href="pages.html#pages.location_page.LocationPage">LocationPage (класс в pages.location_page)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
@ -1678,8 +1769,6 @@
<li><a href="components.html#module-components.modal_window_component">components.modal_window_component</a>
</li>
<li><a href="components.html#module-components.navbar_component">components.navbar_component</a>
</li>
<li><a href="components.html#module-components.settings_form_component">components.settings_form_component</a>
</li>
<li><a href="components.html#module-components.table_component">components.table_component</a>
</li>
@ -1690,6 +1779,8 @@
<li><a href="components_derived.html#module-components_derived.container_system_log_events">components_derived.container_system_log_events</a>
</li>
<li><a href="components_derived.html#module-components_derived.date_input_component">components_derived.date_input_component</a>
</li>
<li><a href="components_derived.html#module-components_derived.interactive_dropdown_list">components_derived.interactive_dropdown_list</a>
</li>
<li><a href="components_derived.html#module-components_derived.modal_add_AD_user">components_derived.modal_add_AD_user</a>
</li>
@ -1704,6 +1795,8 @@
<li><a href="components_derived.html#module-components_derived.modal_view_ztp_template">components_derived.modal_view_ztp_template</a>
</li>
<li><a href="components_derived.html#module-components_derived.selection_bar_component">components_derived.selection_bar_component</a>
</li>
<li><a href="components_derived.html#module-components_derived.settings_form_component">components_derived.settings_form_component</a>
</li>
<li><a href="components_derived.html#module-components_derived.sidebar_filter_component">components_derived.sidebar_filter_component</a>
</li>
@ -1748,12 +1841,12 @@
<li><a href="pages.html#module-pages.current_session_tab">pages.current_session_tab</a>
</li>
<li><a href="pages.html#module-pages.license_tab">pages.license_tab</a>
</li>
<li><a href="pages.html#module-pages.location_page">pages.location_page</a>
</li>
<li><a href="pages.html#module-pages.login_page">pages.login_page</a>
</li>
<li><a href="pages.html#module-pages.main_page">pages.main_page</a>
</li>
<li><a href="pages.html#module-pages.push_notifications_settings_tab">pages.push_notifications_settings_tab</a>
</li>
<li><a href="pages.html#module-pages.service_status_tab">pages.service_status_tab</a>
</li>
@ -1852,13 +1945,6 @@
<ul>
<li><a href="pages.html#module-pages.license_tab">module</a>
</li>
</ul></li>
<li>
pages.location_page
<ul>
<li><a href="pages.html#module-pages.location_page">module</a>
</li>
</ul></li>
<li>
@ -1873,6 +1959,13 @@
<ul>
<li><a href="pages.html#module-pages.main_page">module</a>
</li>
</ul></li>
<li>
pages.push_notifications_settings_tab
<ul>
<li><a href="pages.html#module-pages.push_notifications_settings_tab">module</a>
</li>
</ul></li>
<li>
@ -1924,6 +2017,8 @@
<li><a href="tools.html#tools.fix_python_project.ProjectFixer.process_directory">process_directory() (метод ProjectFixer)</a>
</li>
<li><a href="tools.html#tools.fix_python_project.ProjectFixer">ProjectFixer (класс в tools.fix_python_project)</a>
</li>
<li><a href="pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab">PushNotificationsSettingsTab (класс в pages.push_notifications_settings_tab)</a>
</li>
<li><a href="conftest.html#conftest.pytest_addoption">pytest_addoption() (в модуле conftest)</a>
@ -2046,6 +2141,10 @@
<li><a href="components.html#components.modal_window_component.ModalWindowComponent.scroll_window_up">scroll_window_up() (метод ModalWindowComponent)</a>
</li>
<li><a href="components.html#components.date_picker_component.DatePickerComponent.select_day">select_day() (метод DatePickerComponent)</a>
</li>
<li><a href="components_derived.html#components_derived.interactive_dropdown_list.InteractiveDropdownList.select_item_with_text">select_item_with_text() (метод InteractiveDropdownList)</a>
</li>
<li><a href="pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab.select_users">select_users() (метод PushNotificationsSettingsTab)</a>
</li>
<li><a href="components_derived.html#components_derived.selection_bar_component.SelectionBarComponent.select_value">select_value() (метод SelectionBarComponent)</a>
</li>
@ -2063,7 +2162,7 @@
</li>
<li><a href="data.html#data.environment.Environment.set_current_user_credential">set_current_user_credential() (метод Environment)</a>
</li>
<li><a href="components.html#components.settings_form_component.SettingsFormComponent">SettingsFormComponent (класс в components.settings_form_component)</a>
<li><a href="components_derived.html#components_derived.settings_form_component.SettingsFormComponent">SettingsFormComponent (класс в components_derived.settings_form_component)</a>
</li>
<li><a href="components.html#components.events_container_component.EventsContainerComponent.should_be_all_disabled">should_be_all_disabled() (метод EventsContainerComponent)</a>
</li>
@ -2093,8 +2192,12 @@
</li>
<li><a href="components.html#components.events_container_component.EventsContainerComponent.should_be_final_state">should_be_final_state() (метод EventsContainerComponent)</a>
</li>
<li><a href="pages.html#pages.session_settings_tab.SessionSettingsTab.should_be_form_toolbar">should_be_form_toolbar() (метод SessionSettingsTab)</a>
<li><a href="pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab.should_be_form_toolbar">should_be_form_toolbar() (метод PushNotificationsSettingsTab)</a>
<ul>
<li><a href="pages.html#pages.session_settings_tab.SessionSettingsTab.should_be_form_toolbar">(метод SessionSettingsTab)</a>
</li>
</ul></li>
<li><a href="components.html#components.events_container_component.EventsContainerComponent.should_be_initial_state">should_be_initial_state() (метод EventsContainerComponent)</a>
</li>
<li><a href="pages.html#pages.license_tab.LicenseTab.should_be_input_form_title">should_be_input_form_title() (метод LicenseTab)</a>
@ -2118,6 +2221,8 @@
<li><a href="pages.html#pages.current_session_tab.CurrentSessionsTab.should_be_session_in_table">should_be_session_in_table() (метод CurrentSessionsTab)</a>
</li>
<li><a href="pages.html#pages.current_session_tab.CurrentSessionsTab.should_be_sessions_table">should_be_sessions_table() (метод CurrentSessionsTab)</a>
</li>
<li><a href="pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab.should_be_success_alert">should_be_success_alert() (метод PushNotificationsSettingsTab)</a>
</li>
<li><a href="components.html#components.eventbar_component.EventPanelComponent.should_be_tab_buttons">should_be_tab_buttons() (метод EventPanelComponent)</a>
</li>
@ -2133,12 +2238,14 @@
<li><a href="components.html#components.events_container_component.EventsContainerComponent.should_be_toolbar">(метод EventsContainerComponent)</a>
</li>
<li><a href="pages.html#pages.license_tab.LicenseTab.should_be_toolbar">(метод LicenseTab)</a>
</li>
<li><a href="pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab.should_be_toolbar">(метод PushNotificationsSettingsTab)</a>
</li>
<li><a href="pages.html#pages.service_status_tab.ServiceStatusTab.should_be_toolbar">(метод ServiceStatusTab)</a>
</li>
<li><a href="pages.html#pages.session_settings_tab.SessionSettingsTab.should_be_toolbar">(метод SessionSettingsTab)</a>
</li>
<li><a href="components.html#components.settings_form_component.SettingsFormComponent.should_be_toolbar">(метод SettingsFormComponent)</a>
<li><a href="components_derived.html#components_derived.settings_form_component.SettingsFormComponent.should_be_toolbar">(метод SettingsFormComponent)</a>
</li>
<li><a href="components_derived.html#components_derived.sidebar_filter_component.SidebarFilterComponent.should_be_toolbar">(метод SidebarFilterComponent)</a>
</li>
@ -2331,8 +2438,6 @@
<li><a href="pages.html#pages.base_page.BasePage.wait_for_timeout">wait_for_timeout() (метод BasePage)</a>
<ul>
<li><a href="pages.html#pages.location_page.LocationPage.wait_for_timeout">(метод LocationPage)</a>
</li>
<li><a href="components_derived.html#components_derived.selection_bar_component.SelectionBarComponent.wait_for_timeout">(метод SelectionBarComponent)</a>
</li>
</ul></li>

View File

@ -91,10 +91,6 @@
<li class="toctree-l4"><a class="reference internal" href="components.html#components.navbar_component.NavigationPanelComponent"><code class="docutils literal notranslate"><span class="pre">NavigationPanelComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.settings_form_component">components.settings_form_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.settings_form_component.SettingsFormComponent"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.table_component">components.table_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.table_component.TableComponent"><code class="docutils literal notranslate"><span class="pre">TableComponent</span></code></a></li>
</ul>
@ -116,6 +112,10 @@
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.date_input_component.DateInput"><code class="docutils literal notranslate"><span class="pre">DateInput</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.interactive_dropdown_list">components_derived.interactive_dropdown_list module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.interactive_dropdown_list.InteractiveDropdownList"><code class="docutils literal notranslate"><span class="pre">InteractiveDropdownList</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_add_AD_user">components_derived.modal_add_AD_user module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_add_AD_user.AddADUserModalWindow"><code class="docutils literal notranslate"><span class="pre">AddADUserModalWindow</span></code></a></li>
</ul>
@ -144,6 +144,10 @@
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.selection_bar_component.SelectionBarComponent"><code class="docutils literal notranslate"><span class="pre">SelectionBarComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.settings_form_component">components_derived.settings_form_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.settings_form_component.SettingsFormComponent"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.sidebar_filter_component">components_derived.sidebar_filter_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.sidebar_filter_component.SidebarFilterComponent"><code class="docutils literal notranslate"><span class="pre">SidebarFilterComponent</span></code></a></li>
</ul>
@ -240,10 +244,6 @@
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.license_tab.LicenseTab"><code class="docutils literal notranslate"><span class="pre">LicenseTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.location_page">pages.location_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.location_page.LocationPage"><code class="docutils literal notranslate"><span class="pre">LocationPage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.login_page">pages.login_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.login_page.LoginPage"><code class="docutils literal notranslate"><span class="pre">LoginPage</span></code></a></li>
</ul>
@ -252,6 +252,10 @@
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.main_page.MainPage"><code class="docutils literal notranslate"><span class="pre">MainPage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.push_notifications_settings_tab">pages.push_notifications_settings_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab"><code class="docutils literal notranslate"><span class="pre">PushNotificationsSettingsTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.service_status_tab">pages.service_status_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.service_status_tab.ServiceStatusTab"><code class="docutils literal notranslate"><span class="pre">ServiceStatusTab</span></code></a></li>
</ul>
@ -294,6 +298,60 @@
</li>
</ul>
</li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Документация и руководства:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="sphinx_guide.html">Руководство по документации тестов с помощью Sphinx</a><ul>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id2">1 Расположение документа</a></li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id3">2 Первичная настройка для нового проекта</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id4">2.1 Подготовка зависимостей</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id5">2.2 Инициализация Sphinx</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id6">2.3 Настройка конфигурации</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id7">2.4 Настройка главной страницы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id8">3 Работа с существующим проектом</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id9">3.1 Установка зависимостей</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id10">3.2 Генерация документации</a><ul>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id11">3.2.1 Базовая генерация</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id12">3.2.2 Генерация с исключениями</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id13">3.2.3 Принудительная перегенерация</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id14">3.3 Очистка документации</a><ul>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id15">3.3.1 Команды очистки</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id16">3.3.2 Автоматизация очистки</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id17">3.4 Сборка и деплой</a><ul>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id18">3.4.1 Локальная сборка</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id19">3.4.2 Проверка качества</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id20">3.4.3 Сборка для публикации</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#ci-cd">3.4.4 Настройка для CI/CD</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#mkdocs-sphinx">4 Конвертация контента из MkDocs в Sphinx</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id21">4.1 Текст</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id22">4.2 Таблицы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id23">5 Особенности Sphinx</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#docstrings">5.1 Поддержка docstrings</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id24">5.2 Кастомные директивы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id25">6 Решение проблем</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id26">6.1 Проблема: Модули не находятся</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id27">6.2 Проблема: Не генерируются docstrings</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id28">6.3 Проблема: Тема не применяется</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id29">7 Дополнительные возможности</a></li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#version-history">История версий</a></li>
</ul>
</li>
</ul>
</div>
@ -340,7 +398,6 @@
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.json_container_component">components.json_container_component module</a></li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.modal_window_component">components.modal_window_component module</a></li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.navbar_component">components.navbar_component module</a></li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.settings_form_component">components.settings_form_component module</a></li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.table_component">components.table_component module</a></li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.toolbar_component">components.toolbar_component module</a></li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components">Module contents</a></li>
@ -350,6 +407,7 @@
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.container_system_log_events">components_derived.container_system_log_events module</a></li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.date_input_component">components_derived.date_input_component module</a></li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.interactive_dropdown_list">components_derived.interactive_dropdown_list module</a></li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_add_AD_user">components_derived.modal_add_AD_user module</a></li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_add_local_user">components_derived.modal_add_local_user module</a></li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_change_password">components_derived.modal_change_password module</a></li>
@ -357,6 +415,7 @@
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_view_template">components_derived.modal_view_template module</a></li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_view_ztp_template">components_derived.modal_view_ztp_template module</a></li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.selection_bar_component">components_derived.selection_bar_component module</a></li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.settings_form_component">components_derived.settings_form_component module</a></li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.sidebar_filter_component">components_derived.sidebar_filter_component module</a></li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.user_card">components_derived.user_card module</a></li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived">Module contents</a></li>
@ -399,9 +458,9 @@
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.base_page">pages.base_page module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.current_session_tab">pages.current_session_tab module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.license_tab">pages.license_tab module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.location_page">pages.location_page module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.login_page">pages.login_page module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.main_page">pages.main_page module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.push_notifications_settings_tab">pages.push_notifications_settings_tab module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.service_status_tab">pages.service_status_tab module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.session_settings_tab">pages.session_settings_tab module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.templates_tab">pages.templates_tab module</a></li>
@ -434,9 +493,37 @@
<li><p><strong>Утилиты (Tools)</strong> - вспомогательные функции</p></li>
</ul>
</section>
</section>
<section id="id2">
<h1>Индексы и поиск<a class="headerlink" href="#id2" title="Ссылка на этот заголовок"></a></h1>
<h2>Инструкции и процессы<a class="headerlink" href="#id2" title="Ссылка на этот заголовок"></a></h2>
<div class="toctree-wrapper compound">
<p class="caption" role="heading"><span class="caption-text">Документация и руководства:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="sphinx_guide.html">Руководство по документации тестов с помощью Sphinx</a><ul>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id2">1 Расположение документа</a></li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id3">2 Первичная настройка для нового проекта</a></li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id8">3 Работа с существующим проектом</a></li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#mkdocs-sphinx">4 Конвертация контента из MkDocs в Sphinx</a></li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id23">5 Особенности Sphinx</a></li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id25">6 Решение проблем</a></li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id29">7 Дополнительные возможности</a></li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#version-history">История версий</a></li>
</ul>
</li>
</ul>
</div>
</section>
<section id="id3">
<h2>Быстрый старт<a class="headerlink" href="#id3" title="Ссылка на этот заголовок"></a></h2>
<p>Для начала работы с проектом:</p>
<ol class="arabic simple">
<li><p>Установите зависимости: <code class="docutils literal notranslate"><span class="pre">pip</span> <span class="pre">install</span> <span class="pre">-e</span> <span class="pre">.</span></code></p></li>
<li><p>Запустите тесты: <code class="docutils literal notranslate"><span class="pre">pytest</span> <span class="pre">tests/</span></code></p></li>
<li><p>Соберите документацию: <code class="docutils literal notranslate"><span class="pre">sphinx-build</span> <span class="pre">docs/source</span> <span class="pre">docs/build</span></code></p></li>
</ol>
</section>
</section>
<section id="id4">
<h1>Индексы и поиск<a class="headerlink" href="#id4" title="Ссылка на этот заголовок"></a></h1>
<ul class="simple">
<li><p><a class="reference internal" href="genindex.html"><span class="std std-ref">Алфавитный указатель</span></a></p></li>
<li><p><a class="reference internal" href="py-modindex.html"><span class="std std-ref">Состав модуля</span></a></p></li>

View File

@ -19,7 +19,9 @@
<script src="_static/translations.js?v=cd1d70c9"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="Алфавитный указатель" href="genindex.html" />
<link rel="search" title="Поиск" href="search.html" />
<link rel="search" title="Поиск" href="search.html" />
<link rel="next" title="components package" href="components.html" />
<link rel="prev" title="Документация e-nms-qa-automation" href="index.html" />
</head>
<body class="wy-body-for-nav">
@ -41,11 +43,318 @@
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Меню навигации">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">e-nms_qa_automation</a></li>
<p class="caption" role="heading"><span class="caption-text">Содержание:</span></p>
<ul class="current">
<li class="toctree-l1 current"><a class="current reference internal" href="#">e-nms_qa_automation</a><ul>
<li class="toctree-l2"><a class="reference internal" href="components.html">components package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="components.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.alert_component">components.alert_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.alert_component.AlertComponent"><code class="docutils literal notranslate"><span class="pre">AlertComponent</span></code></a></li>
</ul>
</div>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.base_component">components.base_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.base_component.BaseComponent"><code class="docutils literal notranslate"><span class="pre">BaseComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.card_component">components.card_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.card_component.CardComponent"><code class="docutils literal notranslate"><span class="pre">CardComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.confirm_component">components.confirm_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.confirm_component.ConfirmComponent"><code class="docutils literal notranslate"><span class="pre">ConfirmComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.date_picker_component">components.date_picker_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.date_picker_component.DatePickerComponent"><code class="docutils literal notranslate"><span class="pre">DatePickerComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.dropdown_list_component">components.dropdown_list_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.dropdown_list_component.DropdownList"><code class="docutils literal notranslate"><span class="pre">DropdownList</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.eventbar_component">components.eventbar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.eventbar_component.EventPanelComponent"><code class="docutils literal notranslate"><span class="pre">EventPanelComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.events_container_component">components.events_container_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.events_container_component.EventsContainerComponent"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.json_container_component">components.json_container_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.json_container_component.JsonContainerComponent"><code class="docutils literal notranslate"><span class="pre">JsonContainerComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.modal_window_component">components.modal_window_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.modal_window_component.ModalWindowComponent"><code class="docutils literal notranslate"><span class="pre">ModalWindowComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.navbar_component">components.navbar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.navbar_component.NavigationPanelComponent"><code class="docutils literal notranslate"><span class="pre">NavigationPanelComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.table_component">components.table_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.table_component.TableComponent"><code class="docutils literal notranslate"><span class="pre">TableComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.toolbar_component">components.toolbar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.toolbar_component.ToolbarComponent"><code class="docutils literal notranslate"><span class="pre">ToolbarComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="components_derived.html">components_derived package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.container_system_log_events">components_derived.container_system_log_events module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.container_system_log_events.SystemLogEventsContainer"><code class="docutils literal notranslate"><span class="pre">SystemLogEventsContainer</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.date_input_component">components_derived.date_input_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.date_input_component.DateInput"><code class="docutils literal notranslate"><span class="pre">DateInput</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.interactive_dropdown_list">components_derived.interactive_dropdown_list module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.interactive_dropdown_list.InteractiveDropdownList"><code class="docutils literal notranslate"><span class="pre">InteractiveDropdownList</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_add_AD_user">components_derived.modal_add_AD_user module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_add_AD_user.AddADUserModalWindow"><code class="docutils literal notranslate"><span class="pre">AddADUserModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_add_local_user">components_derived.modal_add_local_user module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_add_local_user.AddLocalUserModalWindow"><code class="docutils literal notranslate"><span class="pre">AddLocalUserModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_change_password">components_derived.modal_change_password module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_change_password.ChangePasswordModalWindow"><code class="docutils literal notranslate"><span class="pre">ChangePasswordModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_edit_user">components_derived.modal_edit_user module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_edit_user.EditUserModalWindow"><code class="docutils literal notranslate"><span class="pre">EditUserModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_view_template">components_derived.modal_view_template module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_view_template.ViewTemplateModalWindow"><code class="docutils literal notranslate"><span class="pre">ViewTemplateModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_view_ztp_template">components_derived.modal_view_ztp_template module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_view_ztp_template.ViewZTPTemplateModalWindow"><code class="docutils literal notranslate"><span class="pre">ViewZTPTemplateModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.selection_bar_component">components_derived.selection_bar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.selection_bar_component.SelectionBarComponent"><code class="docutils literal notranslate"><span class="pre">SelectionBarComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.settings_form_component">components_derived.settings_form_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.settings_form_component.SettingsFormComponent"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.sidebar_filter_component">components_derived.sidebar_filter_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.sidebar_filter_component.SidebarFilterComponent"><code class="docutils literal notranslate"><span class="pre">SidebarFilterComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.user_card">components_derived.user_card module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.user_card.UserCard"><code class="docutils literal notranslate"><span class="pre">UserCard</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="conftest.html">conftest module</a><ul>
<li class="toctree-l3"><a class="reference internal" href="conftest.html#conftest.pytest_sessionfinish"><code class="docutils literal notranslate"><span class="pre">pytest_sessionfinish()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="conftest.html#conftest.pytest_addoption"><code class="docutils literal notranslate"><span class="pre">pytest_addoption()</span></code></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="data.html">data package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="data.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="data.html#module-data.constants">data.constants module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="data.html#data.constants.Constants"><code class="docutils literal notranslate"><span class="pre">Constants</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="data.html#module-data.environment">data.environment module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="data.html#data.environment.Environment"><code class="docutils literal notranslate"><span class="pre">Environment</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="data.html#module-data.roles_dict">data.roles_dict module</a></li>
<li class="toctree-l3"><a class="reference internal" href="data.html#module-data">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="elements.html">elements package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="elements.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.base_element">elements.base_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.base_element.BaseElement"><code class="docutils literal notranslate"><span class="pre">BaseElement</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.button_element">elements.button_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.button_element.Button"><code class="docutils literal notranslate"><span class="pre">Button</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.checkbox_element">elements.checkbox_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.checkbox_element.Checkbox"><code class="docutils literal notranslate"><span class="pre">Checkbox</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.icon_element">elements.icon_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.icon_element.Icon"><code class="docutils literal notranslate"><span class="pre">Icon</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.tab_button_element">elements.tab_button_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.tab_button_element.TabButton"><code class="docutils literal notranslate"><span class="pre">TabButton</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.text_element">elements.text_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.text_element.Text"><code class="docutils literal notranslate"><span class="pre">Text</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.text_input_element">elements.text_input_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.text_input_element.TextInput"><code class="docutils literal notranslate"><span class="pre">TextInput</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.tooltip_button_element">elements.tooltip_button_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.tooltip_button_element.TooltipButton"><code class="docutils literal notranslate"><span class="pre">TooltipButton</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="fixtures.html">fixtures package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="fixtures.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="fixtures.html#module-fixtures.pages">fixtures.pages module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.pytest_addoption"><code class="docutils literal notranslate"><span class="pre">pytest_addoption()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.browser"><code class="docutils literal notranslate"><span class="pre">browser()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.get_firefox_browser"><code class="docutils literal notranslate"><span class="pre">get_firefox_browser()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.get_chrome_browser"><code class="docutils literal notranslate"><span class="pre">get_chrome_browser()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.get_remote_chrome"><code class="docutils literal notranslate"><span class="pre">get_remote_chrome()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.get_context"><code class="docutils literal notranslate"><span class="pre">get_context()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.return_back"><code class="docutils literal notranslate"><span class="pre">return_back()</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="fixtures.html#module-fixtures">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="pages.html">pages package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="pages.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.base_page">pages.base_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.base_page.BasePage"><code class="docutils literal notranslate"><span class="pre">BasePage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.current_session_tab">pages.current_session_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.current_session_tab.CurrentSessionsTab"><code class="docutils literal notranslate"><span class="pre">CurrentSessionsTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.license_tab">pages.license_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.license_tab.LicenseTab"><code class="docutils literal notranslate"><span class="pre">LicenseTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.login_page">pages.login_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.login_page.LoginPage"><code class="docutils literal notranslate"><span class="pre">LoginPage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.main_page">pages.main_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.main_page.MainPage"><code class="docutils literal notranslate"><span class="pre">MainPage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.push_notifications_settings_tab">pages.push_notifications_settings_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab"><code class="docutils literal notranslate"><span class="pre">PushNotificationsSettingsTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.service_status_tab">pages.service_status_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.service_status_tab.ServiceStatusTab"><code class="docutils literal notranslate"><span class="pre">ServiceStatusTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.session_settings_tab">pages.session_settings_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.session_settings_tab.SessionSettingsTab"><code class="docutils literal notranslate"><span class="pre">SessionSettingsTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.templates_tab">pages.templates_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.templates_tab.TemplatesTab"><code class="docutils literal notranslate"><span class="pre">TemplatesTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.users_tab">pages.users_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.users_tab.UsersTab"><code class="docutils literal notranslate"><span class="pre">UsersTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.ztp_config_tab">pages.ztp_config_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.ztp_config_tab.ZTPConfigTab"><code class="docutils literal notranslate"><span class="pre">ZTPConfigTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.ztp_templates_tab">pages.ztp_templates_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.ztp_templates_tab.ZTPTemplatesTab"><code class="docutils literal notranslate"><span class="pre">ZTPTemplatesTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="tools.html">tools package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="tools.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="tools.html#module-tools.fix_python_project">tools.fix_python_project module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="tools.html#tools.fix_python_project.ProjectFixer"><code class="docutils literal notranslate"><span class="pre">ProjectFixer</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="tools.html#module-tools.logger">tools.logger module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="tools.html#tools.logger.get_logger"><code class="docutils literal notranslate"><span class="pre">get_logger()</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="tools.html#module-tools">Module contents</a></li>
</ul>
</li>
</ul>
</li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Документация и руководства:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="sphinx_guide.html">Руководство по документации тестов с помощью Sphinx</a><ul>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id2">1 Расположение документа</a></li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id3">2 Первичная настройка для нового проекта</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id4">2.1 Подготовка зависимостей</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id5">2.2 Инициализация Sphinx</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id6">2.3 Настройка конфигурации</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id7">2.4 Настройка главной страницы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id8">3 Работа с существующим проектом</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id9">3.1 Установка зависимостей</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id10">3.2 Генерация документации</a><ul>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id11">3.2.1 Базовая генерация</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id12">3.2.2 Генерация с исключениями</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id13">3.2.3 Принудительная перегенерация</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id14">3.3 Очистка документации</a><ul>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id15">3.3.1 Команды очистки</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id16">3.3.2 Автоматизация очистки</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id17">3.4 Сборка и деплой</a><ul>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id18">3.4.1 Локальная сборка</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id19">3.4.2 Проверка качества</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id20">3.4.3 Сборка для публикации</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#ci-cd">3.4.4 Настройка для CI/CD</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#mkdocs-sphinx">4 Конвертация контента из MkDocs в Sphinx</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id21">4.1 Текст</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id22">4.2 Таблицы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id23">5 Особенности Sphinx</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#docstrings">5.1 Поддержка docstrings</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id24">5.2 Кастомные директивы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id25">6 Решение проблем</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id26">6.1 Проблема: Модули не находятся</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id27">6.2 Проблема: Не генерируются docstrings</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id28">6.3 Проблема: Тема не применяется</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id29">7 Дополнительные возможности</a></li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#version-history">История версий</a></li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
@ -279,22 +588,6 @@
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="components.html#module-components.settings_form_component">components.settings_form_component module</a><ul>
<li class="toctree-l3"><a class="reference internal" href="components.html#components.settings_form_component.SettingsFormComponent"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent</span></code></a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.settings_form_component.SettingsFormComponent.__init__"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent.__init__()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.settings_form_component.SettingsFormComponent.add_content_item"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent.add_content_item()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.settings_form_component.SettingsFormComponent.get_content_item"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent.get_content_item()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.settings_form_component.SettingsFormComponent.add_toolbar_title"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent.add_toolbar_title()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.settings_form_component.SettingsFormComponent.add_button"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent.add_button()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.settings_form_component.SettingsFormComponent.get_button_by_name"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent.get_button_by_name()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.settings_form_component.SettingsFormComponent.click_button"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent.click_button()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.settings_form_component.SettingsFormComponent.check_vertical_scrolling"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent.check_vertical_scrolling()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.settings_form_component.SettingsFormComponent.check_button_visibility"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent.check_button_visibility()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.settings_form_component.SettingsFormComponent.should_be_toolbar"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent.should_be_toolbar()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="components.html#module-components.table_component">components.table_component module</a><ul>
<li class="toctree-l3"><a class="reference internal" href="components.html#components.table_component.TableComponent"><code class="docutils literal notranslate"><span class="pre">TableComponent</span></code></a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.table_component.TableComponent.__init__"><code class="docutils literal notranslate"><span class="pre">TableComponent.__init__()</span></code></a></li>
@ -365,6 +658,17 @@
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="components_derived.html#module-components_derived.interactive_dropdown_list">components_derived.interactive_dropdown_list module</a><ul>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#components_derived.interactive_dropdown_list.InteractiveDropdownList"><code class="docutils literal notranslate"><span class="pre">InteractiveDropdownList</span></code></a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.interactive_dropdown_list.InteractiveDropdownList.__init__"><code class="docutils literal notranslate"><span class="pre">InteractiveDropdownList.__init__()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.interactive_dropdown_list.InteractiveDropdownList.get_checkbox_locator"><code class="docutils literal notranslate"><span class="pre">InteractiveDropdownList.get_checkbox_locator()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.interactive_dropdown_list.InteractiveDropdownList.deselect_item_with_text"><code class="docutils literal notranslate"><span class="pre">InteractiveDropdownList.deselect_item_with_text()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.interactive_dropdown_list.InteractiveDropdownList.select_item_with_text"><code class="docutils literal notranslate"><span class="pre">InteractiveDropdownList.select_item_with_text()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.interactive_dropdown_list.InteractiveDropdownList.get_selected_items"><code class="docutils literal notranslate"><span class="pre">InteractiveDropdownList.get_selected_items()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="components_derived.html#module-components_derived.modal_add_AD_user">components_derived.modal_add_AD_user module</a><ul>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#components_derived.modal_add_AD_user.AddADUserModalWindow"><code class="docutils literal notranslate"><span class="pre">AddADUserModalWindow</span></code></a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_add_AD_user.AddADUserModalWindow.__init__"><code class="docutils literal notranslate"><span class="pre">AddADUserModalWindow.__init__()</span></code></a></li>
@ -472,6 +776,24 @@
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="components_derived.html#module-components_derived.settings_form_component">components_derived.settings_form_component module</a><ul>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#components_derived.settings_form_component.SettingsFormComponent"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent</span></code></a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.settings_form_component.SettingsFormComponent.__init__"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent.__init__()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.settings_form_component.SettingsFormComponent.add_content_item"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent.add_content_item()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.settings_form_component.SettingsFormComponent.get_content_item"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent.get_content_item()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.settings_form_component.SettingsFormComponent.add_toolbar_title"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent.add_toolbar_title()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.settings_form_component.SettingsFormComponent.add_button"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent.add_button()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.settings_form_component.SettingsFormComponent.add_tooltip_button"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent.add_tooltip_button()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.settings_form_component.SettingsFormComponent.get_button_by_name"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent.get_button_by_name()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.settings_form_component.SettingsFormComponent.click_button"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent.click_button()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.settings_form_component.SettingsFormComponent.check_vertical_scrolling"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent.check_vertical_scrolling()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.settings_form_component.SettingsFormComponent.check_button_tooltip"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent.check_button_tooltip()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.settings_form_component.SettingsFormComponent.check_button_visibility"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent.check_button_visibility()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.settings_form_component.SettingsFormComponent.should_be_toolbar"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent.should_be_toolbar()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="components_derived.html#module-components_derived.sidebar_filter_component">components_derived.sidebar_filter_component module</a><ul>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#components_derived.sidebar_filter_component.SidebarFilterComponent"><code class="docutils literal notranslate"><span class="pre">SidebarFilterComponent</span></code></a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.sidebar_filter_component.SidebarFilterComponent.__init__"><code class="docutils literal notranslate"><span class="pre">SidebarFilterComponent.__init__()</span></code></a></li>
@ -710,16 +1032,6 @@
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="pages.html#module-pages.location_page">pages.location_page module</a><ul>
<li class="toctree-l3"><a class="reference internal" href="pages.html#pages.location_page.LocationPage"><code class="docutils literal notranslate"><span class="pre">LocationPage</span></code></a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.location_page.LocationPage.__init__"><code class="docutils literal notranslate"><span class="pre">LocationPage.__init__()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.location_page.LocationPage.click_create_button"><code class="docutils literal notranslate"><span class="pre">LocationPage.click_create_button()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.location_page.LocationPage.is_create_button_visible"><code class="docutils literal notranslate"><span class="pre">LocationPage.is_create_button_visible()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.location_page.LocationPage.wait_for_timeout"><code class="docutils literal notranslate"><span class="pre">LocationPage.wait_for_timeout()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="pages.html#module-pages.login_page">pages.login_page module</a><ul>
<li class="toctree-l3"><a class="reference internal" href="pages.html#pages.login_page.LoginPage"><code class="docutils literal notranslate"><span class="pre">LoginPage</span></code></a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.login_page.LoginPage.__init__"><code class="docutils literal notranslate"><span class="pre">LoginPage.__init__()</span></code></a></li>
@ -759,6 +1071,24 @@
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="pages.html#module-pages.push_notifications_settings_tab">pages.push_notifications_settings_tab module</a><ul>
<li class="toctree-l3"><a class="reference internal" href="pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab"><code class="docutils literal notranslate"><span class="pre">PushNotificationsSettingsTab</span></code></a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab.__init__"><code class="docutils literal notranslate"><span class="pre">PushNotificationsSettingsTab.__init__()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab.clear_users_setting_value"><code class="docutils literal notranslate"><span class="pre">PushNotificationsSettingsTab.clear_users_setting_value()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab.click_submit_button"><code class="docutils literal notranslate"><span class="pre">PushNotificationsSettingsTab.click_submit_button()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab.get_message_setting_value"><code class="docutils literal notranslate"><span class="pre">PushNotificationsSettingsTab.get_message_setting_value()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab.get_users_setting_value"><code class="docutils literal notranslate"><span class="pre">PushNotificationsSettingsTab.get_users_setting_value()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab.input_message"><code class="docutils literal notranslate"><span class="pre">PushNotificationsSettingsTab.input_message()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab.deselect_users"><code class="docutils literal notranslate"><span class="pre">PushNotificationsSettingsTab.deselect_users()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab.select_users"><code class="docutils literal notranslate"><span class="pre">PushNotificationsSettingsTab.select_users()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab.check_content"><code class="docutils literal notranslate"><span class="pre">PushNotificationsSettingsTab.check_content()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab.should_be_toolbar"><code class="docutils literal notranslate"><span class="pre">PushNotificationsSettingsTab.should_be_toolbar()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab.should_be_form_toolbar"><code class="docutils literal notranslate"><span class="pre">PushNotificationsSettingsTab.should_be_form_toolbar()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab.should_be_success_alert"><code class="docutils literal notranslate"><span class="pre">PushNotificationsSettingsTab.should_be_success_alert()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="pages.html#module-pages.service_status_tab">pages.service_status_tab module</a><ul>
<li class="toctree-l3"><a class="reference internal" href="pages.html#pages.service_status_tab.ServiceStatusTab"><code class="docutils literal notranslate"><span class="pre">ServiceStatusTab</span></code></a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.service_status_tab.ServiceStatusTab.__init__"><code class="docutils literal notranslate"><span class="pre">ServiceStatusTab.__init__()</span></code></a></li>
@ -952,7 +1282,10 @@
</div>
</div>
<footer>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Нижняя область">
<a href="index.html" class="btn btn-neutral float-left" title="Документация e-nms-qa-automation" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Предыдущая</a>
<a href="components.html" class="btn btn-neutral float-right" title="components package" accesskey="n" rel="next">Следующая <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>

Binary file not shown.

View File

@ -19,7 +19,9 @@
<script src="_static/translations.js?v=cd1d70c9"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="Алфавитный указатель" href="genindex.html" />
<link rel="search" title="Поиск" href="search.html" />
<link rel="search" title="Поиск" href="search.html" />
<link rel="next" title="tools package" href="tools.html" />
<link rel="prev" title="fixtures package" href="fixtures.html" />
</head>
<body class="wy-body-for-nav">
@ -41,289 +43,318 @@
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Меню навигации">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">pages package</a><ul>
<li><a class="reference internal" href="#submodules">Submodules</a></li>
<li><a class="reference internal" href="#module-pages.base_page">pages.base_page module</a><ul>
<li><a class="reference internal" href="#pages.base_page.BasePage"><code class="docutils literal notranslate"><span class="pre">BasePage</span></code></a><ul>
<li><a class="reference internal" href="#pages.base_page.BasePage.__init__"><code class="docutils literal notranslate"><span class="pre">BasePage.__init__()</span></code></a></li>
<li><a class="reference internal" href="#pages.base_page.BasePage.current_url"><code class="docutils literal notranslate"><span class="pre">BasePage.current_url()</span></code></a></li>
<li><a class="reference internal" href="#pages.base_page.BasePage.open"><code class="docutils literal notranslate"><span class="pre">BasePage.open()</span></code></a></li>
<li><a class="reference internal" href="#pages.base_page.BasePage.page_reload"><code class="docutils literal notranslate"><span class="pre">BasePage.page_reload()</span></code></a></li>
<li><a class="reference internal" href="#pages.base_page.BasePage.wait_for_timeout"><code class="docutils literal notranslate"><span class="pre">BasePage.wait_for_timeout()</span></code></a></li>
<li><a class="reference internal" href="#pages.base_page.BasePage.get_api_request_context"><code class="docutils literal notranslate"><span class="pre">BasePage.get_api_request_context()</span></code></a></li>
<li><a class="reference internal" href="#pages.base_page.BasePage.send_get_api_request"><code class="docutils literal notranslate"><span class="pre">BasePage.send_get_api_request()</span></code></a></li>
<li><a class="reference internal" href="#pages.base_page.BasePage.send_post_api_request"><code class="docutils literal notranslate"><span class="pre">BasePage.send_post_api_request()</span></code></a></li>
<li><a class="reference internal" href="#pages.base_page.BasePage.get_response_body"><code class="docutils literal notranslate"><span class="pre">BasePage.get_response_body()</span></code></a></li>
<li><a class="reference internal" href="#pages.base_page.BasePage.check_URL"><code class="docutils literal notranslate"><span class="pre">BasePage.check_URL()</span></code></a></li>
<li><a class="reference internal" href="#pages.base_page.BasePage.check_equals"><code class="docutils literal notranslate"><span class="pre">BasePage.check_equals()</span></code></a></li>
<li><a class="reference internal" href="#pages.base_page.BasePage.check_lists_equals"><code class="docutils literal notranslate"><span class="pre">BasePage.check_lists_equals()</span></code></a></li>
<p class="caption" role="heading"><span class="caption-text">Содержание:</span></p>
<ul class="current">
<li class="toctree-l1 current"><a class="reference internal" href="modules.html">e-nms_qa_automation</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="components.html">components package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="components.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.alert_component">components.alert_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.alert_component.AlertComponent"><code class="docutils literal notranslate"><span class="pre">AlertComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.base_component">components.base_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.base_component.BaseComponent"><code class="docutils literal notranslate"><span class="pre">BaseComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.card_component">components.card_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.card_component.CardComponent"><code class="docutils literal notranslate"><span class="pre">CardComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.confirm_component">components.confirm_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.confirm_component.ConfirmComponent"><code class="docutils literal notranslate"><span class="pre">ConfirmComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.date_picker_component">components.date_picker_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.date_picker_component.DatePickerComponent"><code class="docutils literal notranslate"><span class="pre">DatePickerComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.dropdown_list_component">components.dropdown_list_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.dropdown_list_component.DropdownList"><code class="docutils literal notranslate"><span class="pre">DropdownList</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.eventbar_component">components.eventbar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.eventbar_component.EventPanelComponent"><code class="docutils literal notranslate"><span class="pre">EventPanelComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.events_container_component">components.events_container_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.events_container_component.EventsContainerComponent"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.json_container_component">components.json_container_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.json_container_component.JsonContainerComponent"><code class="docutils literal notranslate"><span class="pre">JsonContainerComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.modal_window_component">components.modal_window_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.modal_window_component.ModalWindowComponent"><code class="docutils literal notranslate"><span class="pre">ModalWindowComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.navbar_component">components.navbar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.navbar_component.NavigationPanelComponent"><code class="docutils literal notranslate"><span class="pre">NavigationPanelComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.table_component">components.table_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.table_component.TableComponent"><code class="docutils literal notranslate"><span class="pre">TableComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.toolbar_component">components.toolbar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.toolbar_component.ToolbarComponent"><code class="docutils literal notranslate"><span class="pre">ToolbarComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="components_derived.html">components_derived package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.container_system_log_events">components_derived.container_system_log_events module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.container_system_log_events.SystemLogEventsContainer"><code class="docutils literal notranslate"><span class="pre">SystemLogEventsContainer</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.date_input_component">components_derived.date_input_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.date_input_component.DateInput"><code class="docutils literal notranslate"><span class="pre">DateInput</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.interactive_dropdown_list">components_derived.interactive_dropdown_list module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.interactive_dropdown_list.InteractiveDropdownList"><code class="docutils literal notranslate"><span class="pre">InteractiveDropdownList</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_add_AD_user">components_derived.modal_add_AD_user module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_add_AD_user.AddADUserModalWindow"><code class="docutils literal notranslate"><span class="pre">AddADUserModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_add_local_user">components_derived.modal_add_local_user module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_add_local_user.AddLocalUserModalWindow"><code class="docutils literal notranslate"><span class="pre">AddLocalUserModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_change_password">components_derived.modal_change_password module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_change_password.ChangePasswordModalWindow"><code class="docutils literal notranslate"><span class="pre">ChangePasswordModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_edit_user">components_derived.modal_edit_user module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_edit_user.EditUserModalWindow"><code class="docutils literal notranslate"><span class="pre">EditUserModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_view_template">components_derived.modal_view_template module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_view_template.ViewTemplateModalWindow"><code class="docutils literal notranslate"><span class="pre">ViewTemplateModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_view_ztp_template">components_derived.modal_view_ztp_template module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_view_ztp_template.ViewZTPTemplateModalWindow"><code class="docutils literal notranslate"><span class="pre">ViewZTPTemplateModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.selection_bar_component">components_derived.selection_bar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.selection_bar_component.SelectionBarComponent"><code class="docutils literal notranslate"><span class="pre">SelectionBarComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.settings_form_component">components_derived.settings_form_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.settings_form_component.SettingsFormComponent"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.sidebar_filter_component">components_derived.sidebar_filter_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.sidebar_filter_component.SidebarFilterComponent"><code class="docutils literal notranslate"><span class="pre">SidebarFilterComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.user_card">components_derived.user_card module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.user_card.UserCard"><code class="docutils literal notranslate"><span class="pre">UserCard</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="conftest.html">conftest module</a><ul>
<li class="toctree-l3"><a class="reference internal" href="conftest.html#conftest.pytest_sessionfinish"><code class="docutils literal notranslate"><span class="pre">pytest_sessionfinish()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="conftest.html#conftest.pytest_addoption"><code class="docutils literal notranslate"><span class="pre">pytest_addoption()</span></code></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="data.html">data package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="data.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="data.html#module-data.constants">data.constants module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="data.html#data.constants.Constants"><code class="docutils literal notranslate"><span class="pre">Constants</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="data.html#module-data.environment">data.environment module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="data.html#data.environment.Environment"><code class="docutils literal notranslate"><span class="pre">Environment</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="data.html#module-data.roles_dict">data.roles_dict module</a></li>
<li class="toctree-l3"><a class="reference internal" href="data.html#module-data">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="elements.html">elements package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="elements.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.base_element">elements.base_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.base_element.BaseElement"><code class="docutils literal notranslate"><span class="pre">BaseElement</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.button_element">elements.button_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.button_element.Button"><code class="docutils literal notranslate"><span class="pre">Button</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.checkbox_element">elements.checkbox_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.checkbox_element.Checkbox"><code class="docutils literal notranslate"><span class="pre">Checkbox</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.icon_element">elements.icon_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.icon_element.Icon"><code class="docutils literal notranslate"><span class="pre">Icon</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.tab_button_element">elements.tab_button_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.tab_button_element.TabButton"><code class="docutils literal notranslate"><span class="pre">TabButton</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.text_element">elements.text_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.text_element.Text"><code class="docutils literal notranslate"><span class="pre">Text</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.text_input_element">elements.text_input_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.text_input_element.TextInput"><code class="docutils literal notranslate"><span class="pre">TextInput</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.tooltip_button_element">elements.tooltip_button_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.tooltip_button_element.TooltipButton"><code class="docutils literal notranslate"><span class="pre">TooltipButton</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="fixtures.html">fixtures package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="fixtures.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="fixtures.html#module-fixtures.pages">fixtures.pages module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.pytest_addoption"><code class="docutils literal notranslate"><span class="pre">pytest_addoption()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.browser"><code class="docutils literal notranslate"><span class="pre">browser()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.get_firefox_browser"><code class="docutils literal notranslate"><span class="pre">get_firefox_browser()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.get_chrome_browser"><code class="docutils literal notranslate"><span class="pre">get_chrome_browser()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.get_remote_chrome"><code class="docutils literal notranslate"><span class="pre">get_remote_chrome()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.get_context"><code class="docutils literal notranslate"><span class="pre">get_context()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.return_back"><code class="docutils literal notranslate"><span class="pre">return_back()</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="fixtures.html#module-fixtures">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">pages package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="#module-pages.base_page">pages.base_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#pages.base_page.BasePage"><code class="docutils literal notranslate"><span class="pre">BasePage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-pages.current_session_tab">pages.current_session_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#pages.current_session_tab.CurrentSessionsTab"><code class="docutils literal notranslate"><span class="pre">CurrentSessionsTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-pages.license_tab">pages.license_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#pages.license_tab.LicenseTab"><code class="docutils literal notranslate"><span class="pre">LicenseTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-pages.login_page">pages.login_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#pages.login_page.LoginPage"><code class="docutils literal notranslate"><span class="pre">LoginPage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-pages.main_page">pages.main_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#pages.main_page.MainPage"><code class="docutils literal notranslate"><span class="pre">MainPage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-pages.push_notifications_settings_tab">pages.push_notifications_settings_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#pages.push_notifications_settings_tab.PushNotificationsSettingsTab"><code class="docutils literal notranslate"><span class="pre">PushNotificationsSettingsTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-pages.service_status_tab">pages.service_status_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#pages.service_status_tab.ServiceStatusTab"><code class="docutils literal notranslate"><span class="pre">ServiceStatusTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-pages.session_settings_tab">pages.session_settings_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#pages.session_settings_tab.SessionSettingsTab"><code class="docutils literal notranslate"><span class="pre">SessionSettingsTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-pages.templates_tab">pages.templates_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#pages.templates_tab.TemplatesTab"><code class="docutils literal notranslate"><span class="pre">TemplatesTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-pages.users_tab">pages.users_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#pages.users_tab.UsersTab"><code class="docutils literal notranslate"><span class="pre">UsersTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-pages.ztp_config_tab">pages.ztp_config_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#pages.ztp_config_tab.ZTPConfigTab"><code class="docutils literal notranslate"><span class="pre">ZTPConfigTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-pages.ztp_templates_tab">pages.ztp_templates_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#pages.ztp_templates_tab.ZTPTemplatesTab"><code class="docutils literal notranslate"><span class="pre">ZTPTemplatesTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-pages">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="tools.html">tools package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="tools.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="tools.html#module-tools.fix_python_project">tools.fix_python_project module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="tools.html#tools.fix_python_project.ProjectFixer"><code class="docutils literal notranslate"><span class="pre">ProjectFixer</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="tools.html#module-tools.logger">tools.logger module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="tools.html#tools.logger.get_logger"><code class="docutils literal notranslate"><span class="pre">get_logger()</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="tools.html#module-tools">Module contents</a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#module-pages.current_session_tab">pages.current_session_tab module</a><ul>
<li><a class="reference internal" href="#pages.current_session_tab.CurrentSessionsTab"><code class="docutils literal notranslate"><span class="pre">CurrentSessionsTab</span></code></a><ul>
<li><a class="reference internal" href="#pages.current_session_tab.CurrentSessionsTab.__init__"><code class="docutils literal notranslate"><span class="pre">CurrentSessionsTab.__init__()</span></code></a></li>
<li><a class="reference internal" href="#pages.current_session_tab.CurrentSessionsTab.get_rows_count"><code class="docutils literal notranslate"><span class="pre">CurrentSessionsTab.get_rows_count()</span></code></a></li>
<li><a class="reference internal" href="#pages.current_session_tab.CurrentSessionsTab.get_delete_session_button_from_row"><code class="docutils literal notranslate"><span class="pre">CurrentSessionsTab.get_delete_session_button_from_row()</span></code></a></li>
<li><a class="reference internal" href="#pages.current_session_tab.CurrentSessionsTab.get_session_token"><code class="docutils literal notranslate"><span class="pre">CurrentSessionsTab.get_session_token()</span></code></a></li>
<li><a class="reference internal" href="#pages.current_session_tab.CurrentSessionsTab.find_session_in_table"><code class="docutils literal notranslate"><span class="pre">CurrentSessionsTab.find_session_in_table()</span></code></a></li>
<li><a class="reference internal" href="#pages.current_session_tab.CurrentSessionsTab.delete_session_by_token"><code class="docutils literal notranslate"><span class="pre">CurrentSessionsTab.delete_session_by_token()</span></code></a></li>
<li><a class="reference internal" href="#pages.current_session_tab.CurrentSessionsTab.delete_session_by_index"><code class="docutils literal notranslate"><span class="pre">CurrentSessionsTab.delete_session_by_index()</span></code></a></li>
<li><a class="reference internal" href="#pages.current_session_tab.CurrentSessionsTab.scroll_sessions_table_up"><code class="docutils literal notranslate"><span class="pre">CurrentSessionsTab.scroll_sessions_table_up()</span></code></a></li>
<li><a class="reference internal" href="#pages.current_session_tab.CurrentSessionsTab.scroll_sessions_table_down"><code class="docutils literal notranslate"><span class="pre">CurrentSessionsTab.scroll_sessions_table_down()</span></code></a></li>
<li><a class="reference internal" href="#pages.current_session_tab.CurrentSessionsTab.check_delete_session_confirm_window"><code class="docutils literal notranslate"><span class="pre">CurrentSessionsTab.check_delete_session_confirm_window()</span></code></a></li>
<li><a class="reference internal" href="#pages.current_session_tab.CurrentSessionsTab.check_sessions_table_content"><code class="docutils literal notranslate"><span class="pre">CurrentSessionsTab.check_sessions_table_content()</span></code></a></li>
<li><a class="reference internal" href="#pages.current_session_tab.CurrentSessionsTab.check_sessions_table_verticall_scrolling"><code class="docutils literal notranslate"><span class="pre">CurrentSessionsTab.check_sessions_table_verticall_scrolling()</span></code></a></li>
<li><a class="reference internal" href="#pages.current_session_tab.CurrentSessionsTab.check_sessions_table_first_row_visibility"><code class="docutils literal notranslate"><span class="pre">CurrentSessionsTab.check_sessions_table_first_row_visibility()</span></code></a></li>
<li><a class="reference internal" href="#pages.current_session_tab.CurrentSessionsTab.check_sessions_table_last_row_visibility"><code class="docutils literal notranslate"><span class="pre">CurrentSessionsTab.check_sessions_table_last_row_visibility()</span></code></a></li>
<li><a class="reference internal" href="#pages.current_session_tab.CurrentSessionsTab.check_sessions_table_row_highlighting"><code class="docutils literal notranslate"><span class="pre">CurrentSessionsTab.check_sessions_table_row_highlighting()</span></code></a></li>
<li><a class="reference internal" href="#pages.current_session_tab.CurrentSessionsTab.should_be_toolbar"><code class="docutils literal notranslate"><span class="pre">CurrentSessionsTab.should_be_toolbar()</span></code></a></li>
<li><a class="reference internal" href="#pages.current_session_tab.CurrentSessionsTab.should_be_sessions_table"><code class="docutils literal notranslate"><span class="pre">CurrentSessionsTab.should_be_sessions_table()</span></code></a></li>
<li><a class="reference internal" href="#pages.current_session_tab.CurrentSessionsTab.should_be_delete_button_on_sessions_table_row"><code class="docutils literal notranslate"><span class="pre">CurrentSessionsTab.should_be_delete_button_on_sessions_table_row()</span></code></a></li>
<li><a class="reference internal" href="#pages.current_session_tab.CurrentSessionsTab.should_be_session_in_table"><code class="docutils literal notranslate"><span class="pre">CurrentSessionsTab.should_be_session_in_table()</span></code></a></li>
<li><a class="reference internal" href="#pages.current_session_tab.CurrentSessionsTab.should_not_be_session_in_table"><code class="docutils literal notranslate"><span class="pre">CurrentSessionsTab.should_not_be_session_in_table()</span></code></a></li>
<li><a class="reference internal" href="#pages.current_session_tab.CurrentSessionsTab.verify_sessions_table_content"><code class="docutils literal notranslate"><span class="pre">CurrentSessionsTab.verify_sessions_table_content()</span></code></a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Документация и руководства:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="sphinx_guide.html">Руководство по документации тестов с помощью Sphinx</a><ul>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id2">1 Расположение документа</a></li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id3">2 Первичная настройка для нового проекта</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id4">2.1 Подготовка зависимостей</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id5">2.2 Инициализация Sphinx</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id6">2.3 Настройка конфигурации</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id7">2.4 Настройка главной страницы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id8">3 Работа с существующим проектом</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id9">3.1 Установка зависимостей</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id10">3.2 Генерация документации</a><ul>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id11">3.2.1 Базовая генерация</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id12">3.2.2 Генерация с исключениями</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id13">3.2.3 Принудительная перегенерация</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id14">3.3 Очистка документации</a><ul>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id15">3.3.1 Команды очистки</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id16">3.3.2 Автоматизация очистки</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id17">3.4 Сборка и деплой</a><ul>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id18">3.4.1 Локальная сборка</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id19">3.4.2 Проверка качества</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id20">3.4.3 Сборка для публикации</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#ci-cd">3.4.4 Настройка для CI/CD</a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#module-pages.license_tab">pages.license_tab module</a><ul>
<li><a class="reference internal" href="#pages.license_tab.LicenseTab"><code class="docutils literal notranslate"><span class="pre">LicenseTab</span></code></a><ul>
<li><a class="reference internal" href="#pages.license_tab.LicenseTab.__init__"><code class="docutils literal notranslate"><span class="pre">LicenseTab.__init__()</span></code></a></li>
<li><a class="reference internal" href="#pages.license_tab.LicenseTab.fill_license_input_form"><code class="docutils literal notranslate"><span class="pre">LicenseTab.fill_license_input_form()</span></code></a></li>
<li><a class="reference internal" href="#pages.license_tab.LicenseTab.scroll_json_container_up"><code class="docutils literal notranslate"><span class="pre">LicenseTab.scroll_json_container_up()</span></code></a></li>
<li><a class="reference internal" href="#pages.license_tab.LicenseTab.scroll_json_container_down"><code class="docutils literal notranslate"><span class="pre">LicenseTab.scroll_json_container_down()</span></code></a></li>
<li><a class="reference internal" href="#pages.license_tab.LicenseTab.check_json_container_verticall_scrolling"><code class="docutils literal notranslate"><span class="pre">LicenseTab.check_json_container_verticall_scrolling()</span></code></a></li>
<li><a class="reference internal" href="#pages.license_tab.LicenseTab.check_content"><code class="docutils literal notranslate"><span class="pre">LicenseTab.check_content()</span></code></a></li>
<li><a class="reference internal" href="#pages.license_tab.LicenseTab.should_be_error_alert_window_with_text"><code class="docutils literal notranslate"><span class="pre">LicenseTab.should_be_error_alert_window_with_text()</span></code></a></li>
<li><a class="reference internal" href="#pages.license_tab.LicenseTab.should_be_toolbar"><code class="docutils literal notranslate"><span class="pre">LicenseTab.should_be_toolbar()</span></code></a></li>
<li><a class="reference internal" href="#pages.license_tab.LicenseTab.should_be_json_container"><code class="docutils literal notranslate"><span class="pre">LicenseTab.should_be_json_container()</span></code></a></li>
<li><a class="reference internal" href="#pages.license_tab.LicenseTab.should_be_input_form_title"><code class="docutils literal notranslate"><span class="pre">LicenseTab.should_be_input_form_title()</span></code></a></li>
<li><a class="reference internal" href="#pages.license_tab.LicenseTab.should_be_empty_input_form"><code class="docutils literal notranslate"><span class="pre">LicenseTab.should_be_empty_input_form()</span></code></a></li>
<li><a class="reference internal" href="#pages.license_tab.LicenseTab.should_be_update_button"><code class="docutils literal notranslate"><span class="pre">LicenseTab.should_be_update_button()</span></code></a></li>
<li><a class="reference internal" href="#pages.license_tab.LicenseTab.verify_json_container_content"><code class="docutils literal notranslate"><span class="pre">LicenseTab.verify_json_container_content()</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#mkdocs-sphinx">4 Конвертация контента из MkDocs в Sphinx</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id21">4.1 Текст</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id22">4.2 Таблицы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id23">5 Особенности Sphinx</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#docstrings">5.1 Поддержка docstrings</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id24">5.2 Кастомные директивы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id25">6 Решение проблем</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id26">6.1 Проблема: Модули не находятся</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id27">6.2 Проблема: Не генерируются docstrings</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id28">6.3 Проблема: Тема не применяется</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id29">7 Дополнительные возможности</a></li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#version-history">История версий</a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#module-pages.location_page">pages.location_page module</a><ul>
<li><a class="reference internal" href="#pages.location_page.LocationPage"><code class="docutils literal notranslate"><span class="pre">LocationPage</span></code></a><ul>
<li><a class="reference internal" href="#pages.location_page.LocationPage.__init__"><code class="docutils literal notranslate"><span class="pre">LocationPage.__init__()</span></code></a></li>
<li><a class="reference internal" href="#pages.location_page.LocationPage.click_create_button"><code class="docutils literal notranslate"><span class="pre">LocationPage.click_create_button()</span></code></a></li>
<li><a class="reference internal" href="#pages.location_page.LocationPage.is_create_button_visible"><code class="docutils literal notranslate"><span class="pre">LocationPage.is_create_button_visible()</span></code></a></li>
<li><a class="reference internal" href="#pages.location_page.LocationPage.wait_for_timeout"><code class="docutils literal notranslate"><span class="pre">LocationPage.wait_for_timeout()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#module-pages.login_page">pages.login_page module</a><ul>
<li><a class="reference internal" href="#pages.login_page.LoginPage"><code class="docutils literal notranslate"><span class="pre">LoginPage</span></code></a><ul>
<li><a class="reference internal" href="#pages.login_page.LoginPage.__init__"><code class="docutils literal notranslate"><span class="pre">LoginPage.__init__()</span></code></a></li>
<li><a class="reference internal" href="#pages.login_page.LoginPage.click_password_hidden_icon"><code class="docutils literal notranslate"><span class="pre">LoginPage.click_password_hidden_icon()</span></code></a></li>
<li><a class="reference internal" href="#pages.login_page.LoginPage.do_login"><code class="docutils literal notranslate"><span class="pre">LoginPage.do_login()</span></code></a></li>
<li><a class="reference internal" href="#pages.login_page.LoginPage.do_unsuccessful_login"><code class="docutils literal notranslate"><span class="pre">LoginPage.do_unsuccessful_login()</span></code></a></li>
<li><a class="reference internal" href="#pages.login_page.LoginPage.is_password_icon_hidden"><code class="docutils literal notranslate"><span class="pre">LoginPage.is_password_icon_hidden()</span></code></a></li>
<li><a class="reference internal" href="#pages.login_page.LoginPage.is_password_hidden"><code class="docutils literal notranslate"><span class="pre">LoginPage.is_password_hidden()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#module-pages.main_page">pages.main_page module</a><ul>
<li><a class="reference internal" href="#pages.main_page.MainPage"><code class="docutils literal notranslate"><span class="pre">MainPage</span></code></a><ul>
<li><a class="reference internal" href="#pages.main_page.MainPage.__init__"><code class="docutils literal notranslate"><span class="pre">MainPage.__init__()</span></code></a></li>
<li><a class="reference internal" href="#pages.main_page.MainPage.click_events_panel_expand_less_button"><code class="docutils literal notranslate"><span class="pre">MainPage.click_events_panel_expand_less_button()</span></code></a></li>
<li><a class="reference internal" href="#pages.main_page.MainPage.click_events_panel_expand_more_button"><code class="docutils literal notranslate"><span class="pre">MainPage.click_events_panel_expand_more_button()</span></code></a></li>
<li><a class="reference internal" href="#pages.main_page.MainPage.click_events_panel_system_log_tab"><code class="docutils literal notranslate"><span class="pre">MainPage.click_events_panel_system_log_tab()</span></code></a></li>
<li><a class="reference internal" href="#pages.main_page.MainPage.click_main_navigation_panel_item"><code class="docutils literal notranslate"><span class="pre">MainPage.click_main_navigation_panel_item()</span></code></a></li>
<li><a class="reference internal" href="#pages.main_page.MainPage.click_subpanel_item"><code class="docutils literal notranslate"><span class="pre">MainPage.click_subpanel_item()</span></code></a></li>
<li><a class="reference internal" href="#pages.main_page.MainPage.click_user_button"><code class="docutils literal notranslate"><span class="pre">MainPage.click_user_button()</span></code></a></li>
<li><a class="reference internal" href="#pages.main_page.MainPage.do_logout"><code class="docutils literal notranslate"><span class="pre">MainPage.do_logout()</span></code></a></li>
<li><a class="reference internal" href="#pages.main_page.MainPage.expand_navigation_subpanel"><code class="docutils literal notranslate"><span class="pre">MainPage.expand_navigation_subpanel()</span></code></a></li>
<li><a class="reference internal" href="#pages.main_page.MainPage.get_event_counters_by_buttons"><code class="docutils literal notranslate"><span class="pre">MainPage.get_event_counters_by_buttons()</span></code></a></li>
<li><a class="reference internal" href="#pages.main_page.MainPage.get_event_counters_by_tooltips"><code class="docutils literal notranslate"><span class="pre">MainPage.get_event_counters_by_tooltips()</span></code></a></li>
<li><a class="reference internal" href="#pages.main_page.MainPage.get_events_panel_position"><code class="docutils literal notranslate"><span class="pre">MainPage.get_events_panel_position()</span></code></a></li>
<li><a class="reference internal" href="#pages.main_page.MainPage.scroll_navigation_panel_down"><code class="docutils literal notranslate"><span class="pre">MainPage.scroll_navigation_panel_down()</span></code></a></li>
<li><a class="reference internal" href="#pages.main_page.MainPage.scroll_navigation_panel_up"><code class="docutils literal notranslate"><span class="pre">MainPage.scroll_navigation_panel_up()</span></code></a></li>
<li><a class="reference internal" href="#pages.main_page.MainPage.check_expand_less_button"><code class="docutils literal notranslate"><span class="pre">MainPage.check_expand_less_button()</span></code></a></li>
<li><a class="reference internal" href="#pages.main_page.MainPage.check_expand_more_button"><code class="docutils literal notranslate"><span class="pre">MainPage.check_expand_more_button()</span></code></a></li>
<li><a class="reference internal" href="#pages.main_page.MainPage.check_navigation_item_exists"><code class="docutils literal notranslate"><span class="pre">MainPage.check_navigation_item_exists()</span></code></a></li>
<li><a class="reference internal" href="#pages.main_page.MainPage.check_navigation_panel_item_visibility"><code class="docutils literal notranslate"><span class="pre">MainPage.check_navigation_panel_item_visibility()</span></code></a></li>
<li><a class="reference internal" href="#pages.main_page.MainPage.check_navigation_panel_verticall_scrolling"><code class="docutils literal notranslate"><span class="pre">MainPage.check_navigation_panel_verticall_scrolling()</span></code></a></li>
<li><a class="reference internal" href="#pages.main_page.MainPage.should_be_event_panel"><code class="docutils literal notranslate"><span class="pre">MainPage.should_be_event_panel()</span></code></a></li>
<li><a class="reference internal" href="#pages.main_page.MainPage.should_be_navigation_panel"><code class="docutils literal notranslate"><span class="pre">MainPage.should_be_navigation_panel()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#module-pages.service_status_tab">pages.service_status_tab module</a><ul>
<li><a class="reference internal" href="#pages.service_status_tab.ServiceStatusTab"><code class="docutils literal notranslate"><span class="pre">ServiceStatusTab</span></code></a><ul>
<li><a class="reference internal" href="#pages.service_status_tab.ServiceStatusTab.__init__"><code class="docutils literal notranslate"><span class="pre">ServiceStatusTab.__init__()</span></code></a></li>
<li><a class="reference internal" href="#pages.service_status_tab.ServiceStatusTab.get_rows_count"><code class="docutils literal notranslate"><span class="pre">ServiceStatusTab.get_rows_count()</span></code></a></li>
<li><a class="reference internal" href="#pages.service_status_tab.ServiceStatusTab.scroll_services_table_up"><code class="docutils literal notranslate"><span class="pre">ServiceStatusTab.scroll_services_table_up()</span></code></a></li>
<li><a class="reference internal" href="#pages.service_status_tab.ServiceStatusTab.scroll_services_table_down"><code class="docutils literal notranslate"><span class="pre">ServiceStatusTab.scroll_services_table_down()</span></code></a></li>
<li><a class="reference internal" href="#pages.service_status_tab.ServiceStatusTab.check_services_table_content"><code class="docutils literal notranslate"><span class="pre">ServiceStatusTab.check_services_table_content()</span></code></a></li>
<li><a class="reference internal" href="#pages.service_status_tab.ServiceStatusTab.check_services_table_verticall_scrolling"><code class="docutils literal notranslate"><span class="pre">ServiceStatusTab.check_services_table_verticall_scrolling()</span></code></a></li>
<li><a class="reference internal" href="#pages.service_status_tab.ServiceStatusTab.check_services_table_first_row_visibility"><code class="docutils literal notranslate"><span class="pre">ServiceStatusTab.check_services_table_first_row_visibility()</span></code></a></li>
<li><a class="reference internal" href="#pages.service_status_tab.ServiceStatusTab.check_services_table_last_row_visibility"><code class="docutils literal notranslate"><span class="pre">ServiceStatusTab.check_services_table_last_row_visibility()</span></code></a></li>
<li><a class="reference internal" href="#pages.service_status_tab.ServiceStatusTab.check_services_table_row_highlighting"><code class="docutils literal notranslate"><span class="pre">ServiceStatusTab.check_services_table_row_highlighting()</span></code></a></li>
<li><a class="reference internal" href="#pages.service_status_tab.ServiceStatusTab.should_be_toolbar"><code class="docutils literal notranslate"><span class="pre">ServiceStatusTab.should_be_toolbar()</span></code></a></li>
<li><a class="reference internal" href="#pages.service_status_tab.ServiceStatusTab.should_be_services_table"><code class="docutils literal notranslate"><span class="pre">ServiceStatusTab.should_be_services_table()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#module-pages.session_settings_tab">pages.session_settings_tab module</a><ul>
<li><a class="reference internal" href="#pages.session_settings_tab.SessionSettingsTab"><code class="docutils literal notranslate"><span class="pre">SessionSettingsTab</span></code></a><ul>
<li><a class="reference internal" href="#pages.session_settings_tab.SessionSettingsTab.__init__"><code class="docutils literal notranslate"><span class="pre">SessionSettingsTab.__init__()</span></code></a></li>
<li><a class="reference internal" href="#pages.session_settings_tab.SessionSettingsTab.click_cancel_button"><code class="docutils literal notranslate"><span class="pre">SessionSettingsTab.click_cancel_button()</span></code></a></li>
<li><a class="reference internal" href="#pages.session_settings_tab.SessionSettingsTab.click_edit_button"><code class="docutils literal notranslate"><span class="pre">SessionSettingsTab.click_edit_button()</span></code></a></li>
<li><a class="reference internal" href="#pages.session_settings_tab.SessionSettingsTab.click_save_button"><code class="docutils literal notranslate"><span class="pre">SessionSettingsTab.click_save_button()</span></code></a></li>
<li><a class="reference internal" href="#pages.session_settings_tab.SessionSettingsTab.decrease_setting_value"><code class="docutils literal notranslate"><span class="pre">SessionSettingsTab.decrease_setting_value()</span></code></a></li>
<li><a class="reference internal" href="#pages.session_settings_tab.SessionSettingsTab.increase_setting_value"><code class="docutils literal notranslate"><span class="pre">SessionSettingsTab.increase_setting_value()</span></code></a></li>
<li><a class="reference internal" href="#pages.session_settings_tab.SessionSettingsTab.get_field_by_name"><code class="docutils literal notranslate"><span class="pre">SessionSettingsTab.get_field_by_name()</span></code></a></li>
<li><a class="reference internal" href="#pages.session_settings_tab.SessionSettingsTab.get_label_by_name"><code class="docutils literal notranslate"><span class="pre">SessionSettingsTab.get_label_by_name()</span></code></a></li>
<li><a class="reference internal" href="#pages.session_settings_tab.SessionSettingsTab.get_setting_value"><code class="docutils literal notranslate"><span class="pre">SessionSettingsTab.get_setting_value()</span></code></a></li>
<li><a class="reference internal" href="#pages.session_settings_tab.SessionSettingsTab.get_settings_values"><code class="docutils literal notranslate"><span class="pre">SessionSettingsTab.get_settings_values()</span></code></a></li>
<li><a class="reference internal" href="#pages.session_settings_tab.SessionSettingsTab.edit_settings"><code class="docutils literal notranslate"><span class="pre">SessionSettingsTab.edit_settings()</span></code></a></li>
<li><a class="reference internal" href="#pages.session_settings_tab.SessionSettingsTab.scroll_down"><code class="docutils literal notranslate"><span class="pre">SessionSettingsTab.scroll_down()</span></code></a></li>
<li><a class="reference internal" href="#pages.session_settings_tab.SessionSettingsTab.scroll_up"><code class="docutils literal notranslate"><span class="pre">SessionSettingsTab.scroll_up()</span></code></a></li>
<li><a class="reference internal" href="#pages.session_settings_tab.SessionSettingsTab.check_content"><code class="docutils literal notranslate"><span class="pre">SessionSettingsTab.check_content()</span></code></a></li>
<li><a class="reference internal" href="#pages.session_settings_tab.SessionSettingsTab.check_vertical_scrolling"><code class="docutils literal notranslate"><span class="pre">SessionSettingsTab.check_vertical_scrolling()</span></code></a></li>
<li><a class="reference internal" href="#pages.session_settings_tab.SessionSettingsTab.should_be_toolbar"><code class="docutils literal notranslate"><span class="pre">SessionSettingsTab.should_be_toolbar()</span></code></a></li>
<li><a class="reference internal" href="#pages.session_settings_tab.SessionSettingsTab.should_be_toolbar_buttons"><code class="docutils literal notranslate"><span class="pre">SessionSettingsTab.should_be_toolbar_buttons()</span></code></a></li>
<li><a class="reference internal" href="#pages.session_settings_tab.SessionSettingsTab.should_be_form_toolbar"><code class="docutils literal notranslate"><span class="pre">SessionSettingsTab.should_be_form_toolbar()</span></code></a></li>
<li><a class="reference internal" href="#pages.session_settings_tab.SessionSettingsTab.verify_form_data"><code class="docutils literal notranslate"><span class="pre">SessionSettingsTab.verify_form_data()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#module-pages.templates_tab">pages.templates_tab module</a><ul>
<li><a class="reference internal" href="#pages.templates_tab.TemplatesTab"><code class="docutils literal notranslate"><span class="pre">TemplatesTab</span></code></a><ul>
<li><a class="reference internal" href="#pages.templates_tab.TemplatesTab.__init__"><code class="docutils literal notranslate"><span class="pre">TemplatesTab.__init__()</span></code></a></li>
<li><a class="reference internal" href="#pages.templates_tab.TemplatesTab.add_modal_window"><code class="docutils literal notranslate"><span class="pre">TemplatesTab.add_modal_window()</span></code></a></li>
<li><a class="reference internal" href="#pages.templates_tab.TemplatesTab.get_modal_window"><code class="docutils literal notranslate"><span class="pre">TemplatesTab.get_modal_window()</span></code></a></li>
<li><a class="reference internal" href="#pages.templates_tab.TemplatesTab.delete_modal_window"><code class="docutils literal notranslate"><span class="pre">TemplatesTab.delete_modal_window()</span></code></a></li>
<li><a class="reference internal" href="#pages.templates_tab.TemplatesTab.open_template_modal_by_index"><code class="docutils literal notranslate"><span class="pre">TemplatesTab.open_template_modal_by_index()</span></code></a></li>
<li><a class="reference internal" href="#pages.templates_tab.TemplatesTab.close_modal_window_by_toolbar_button"><code class="docutils literal notranslate"><span class="pre">TemplatesTab.close_modal_window_by_toolbar_button()</span></code></a></li>
<li><a class="reference internal" href="#pages.templates_tab.TemplatesTab.get_rows_count"><code class="docutils literal notranslate"><span class="pre">TemplatesTab.get_rows_count()</span></code></a></li>
<li><a class="reference internal" href="#pages.templates_tab.TemplatesTab.scroll_templates_table_up"><code class="docutils literal notranslate"><span class="pre">TemplatesTab.scroll_templates_table_up()</span></code></a></li>
<li><a class="reference internal" href="#pages.templates_tab.TemplatesTab.scroll_templates_table_down"><code class="docutils literal notranslate"><span class="pre">TemplatesTab.scroll_templates_table_down()</span></code></a></li>
<li><a class="reference internal" href="#pages.templates_tab.TemplatesTab.scroll_modal_up"><code class="docutils literal notranslate"><span class="pre">TemplatesTab.scroll_modal_up()</span></code></a></li>
<li><a class="reference internal" href="#pages.templates_tab.TemplatesTab.scroll_modal_down"><code class="docutils literal notranslate"><span class="pre">TemplatesTab.scroll_modal_down()</span></code></a></li>
<li><a class="reference internal" href="#pages.templates_tab.TemplatesTab.extract_specific_template"><code class="docutils literal notranslate"><span class="pre">TemplatesTab.extract_specific_template()</span></code></a></li>
<li><a class="reference internal" href="#pages.templates_tab.TemplatesTab.get_template_data_from_api"><code class="docutils literal notranslate"><span class="pre">TemplatesTab.get_template_data_from_api()</span></code></a></li>
<li><a class="reference internal" href="#pages.templates_tab.TemplatesTab.verify_json_container_content"><code class="docutils literal notranslate"><span class="pre">TemplatesTab.verify_json_container_content()</span></code></a></li>
<li><a class="reference internal" href="#pages.templates_tab.TemplatesTab.check_templates_modal_content"><code class="docutils literal notranslate"><span class="pre">TemplatesTab.check_templates_modal_content()</span></code></a></li>
<li><a class="reference internal" href="#pages.templates_tab.TemplatesTab.check_templates_table_content"><code class="docutils literal notranslate"><span class="pre">TemplatesTab.check_templates_table_content()</span></code></a></li>
<li><a class="reference internal" href="#pages.templates_tab.TemplatesTab.check_templates_table_vertical_scrolling"><code class="docutils literal notranslate"><span class="pre">TemplatesTab.check_templates_table_vertical_scrolling()</span></code></a></li>
<li><a class="reference internal" href="#pages.templates_tab.TemplatesTab.check_templates_table_first_row_visibility"><code class="docutils literal notranslate"><span class="pre">TemplatesTab.check_templates_table_first_row_visibility()</span></code></a></li>
<li><a class="reference internal" href="#pages.templates_tab.TemplatesTab.check_templates_table_last_row_visibility"><code class="docutils literal notranslate"><span class="pre">TemplatesTab.check_templates_table_last_row_visibility()</span></code></a></li>
<li><a class="reference internal" href="#pages.templates_tab.TemplatesTab.check_templates_table_row_highlighting"><code class="docutils literal notranslate"><span class="pre">TemplatesTab.check_templates_table_row_highlighting()</span></code></a></li>
<li><a class="reference internal" href="#pages.templates_tab.TemplatesTab.should_be_toolbar"><code class="docutils literal notranslate"><span class="pre">TemplatesTab.should_be_toolbar()</span></code></a></li>
<li><a class="reference internal" href="#pages.templates_tab.TemplatesTab.should_be_templates_table"><code class="docutils literal notranslate"><span class="pre">TemplatesTab.should_be_templates_table()</span></code></a></li>
<li><a class="reference internal" href="#pages.templates_tab.TemplatesTab.should_be_modal_window"><code class="docutils literal notranslate"><span class="pre">TemplatesTab.should_be_modal_window()</span></code></a></li>
<li><a class="reference internal" href="#pages.templates_tab.TemplatesTab.should_not_be_modal_window"><code class="docutils literal notranslate"><span class="pre">TemplatesTab.should_not_be_modal_window()</span></code></a></li>
<li><a class="reference internal" href="#pages.templates_tab.TemplatesTab.check_modal_vertical_scrolling"><code class="docutils literal notranslate"><span class="pre">TemplatesTab.check_modal_vertical_scrolling()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#module-pages.users_tab">pages.users_tab module</a><ul>
<li><a class="reference internal" href="#pages.users_tab.UsersTab"><code class="docutils literal notranslate"><span class="pre">UsersTab</span></code></a><ul>
<li><a class="reference internal" href="#pages.users_tab.UsersTab.__init__"><code class="docutils literal notranslate"><span class="pre">UsersTab.__init__()</span></code></a></li>
<li><a class="reference internal" href="#pages.users_tab.UsersTab.add_modal_window"><code class="docutils literal notranslate"><span class="pre">UsersTab.add_modal_window()</span></code></a></li>
<li><a class="reference internal" href="#pages.users_tab.UsersTab.add_new_user"><code class="docutils literal notranslate"><span class="pre">UsersTab.add_new_user()</span></code></a></li>
<li><a class="reference internal" href="#pages.users_tab.UsersTab.close_add_AD_user_window"><code class="docutils literal notranslate"><span class="pre">UsersTab.close_add_AD_user_window()</span></code></a></li>
<li><a class="reference internal" href="#pages.users_tab.UsersTab.close_add_AD_user_window_by_toolbar_button"><code class="docutils literal notranslate"><span class="pre">UsersTab.close_add_AD_user_window_by_toolbar_button()</span></code></a></li>
<li><a class="reference internal" href="#pages.users_tab.UsersTab.close_add_user_window"><code class="docutils literal notranslate"><span class="pre">UsersTab.close_add_user_window()</span></code></a></li>
<li><a class="reference internal" href="#pages.users_tab.UsersTab.close_add_user_window_by_toolbar_button"><code class="docutils literal notranslate"><span class="pre">UsersTab.close_add_user_window_by_toolbar_button()</span></code></a></li>
<li><a class="reference internal" href="#pages.users_tab.UsersTab.close_edit_user_window"><code class="docutils literal notranslate"><span class="pre">UsersTab.close_edit_user_window()</span></code></a></li>
<li><a class="reference internal" href="#pages.users_tab.UsersTab.close_edit_user_window_by_toolbar_button"><code class="docutils literal notranslate"><span class="pre">UsersTab.close_edit_user_window_by_toolbar_button()</span></code></a></li>
<li><a class="reference internal" href="#pages.users_tab.UsersTab.close_modal_window"><code class="docutils literal notranslate"><span class="pre">UsersTab.close_modal_window()</span></code></a></li>
<li><a class="reference internal" href="#pages.users_tab.UsersTab.close_modal_window_by_toolbar_button"><code class="docutils literal notranslate"><span class="pre">UsersTab.close_modal_window_by_toolbar_button()</span></code></a></li>
<li><a class="reference internal" href="#pages.users_tab.UsersTab.delete_modal_window"><code class="docutils literal notranslate"><span class="pre">UsersTab.delete_modal_window()</span></code></a></li>
<li><a class="reference internal" href="#pages.users_tab.UsersTab.delete_user"><code class="docutils literal notranslate"><span class="pre">UsersTab.delete_user()</span></code></a></li>
<li><a class="reference internal" href="#pages.users_tab.UsersTab.edit_user"><code class="docutils literal notranslate"><span class="pre">UsersTab.edit_user()</span></code></a></li>
<li><a class="reference internal" href="#pages.users_tab.UsersTab.find_user_in_table"><code class="docutils literal notranslate"><span class="pre">UsersTab.find_user_in_table()</span></code></a></li>
<li><a class="reference internal" href="#pages.users_tab.UsersTab.get_modal_window"><code class="docutils literal notranslate"><span class="pre">UsersTab.get_modal_window()</span></code></a></li>
<li><a class="reference internal" href="#pages.users_tab.UsersTab.open_add_user_window"><code class="docutils literal notranslate"><span class="pre">UsersTab.open_add_user_window()</span></code></a></li>
<li><a class="reference internal" href="#pages.users_tab.UsersTab.open_edit_user_page_by_index"><code class="docutils literal notranslate"><span class="pre">UsersTab.open_edit_user_page_by_index()</span></code></a></li>
<li><a class="reference internal" href="#pages.users_tab.UsersTab.open_edit_user_page_by_user"><code class="docutils literal notranslate"><span class="pre">UsersTab.open_edit_user_page_by_user()</span></code></a></li>
<li><a class="reference internal" href="#pages.users_tab.UsersTab.reset_password"><code class="docutils literal notranslate"><span class="pre">UsersTab.reset_password()</span></code></a></li>
<li><a class="reference internal" href="#pages.users_tab.UsersTab.transform_to_add_AD_user_window"><code class="docutils literal notranslate"><span class="pre">UsersTab.transform_to_add_AD_user_window()</span></code></a></li>
<li><a class="reference internal" href="#pages.users_tab.UsersTab.transform_to_add_user_window"><code class="docutils literal notranslate"><span class="pre">UsersTab.transform_to_add_user_window()</span></code></a></li>
<li><a class="reference internal" href="#pages.users_tab.UsersTab.check_add_AD_user_window_content"><code class="docutils literal notranslate"><span class="pre">UsersTab.check_add_AD_user_window_content()</span></code></a></li>
<li><a class="reference internal" href="#pages.users_tab.UsersTab.check_add_user_window_content"><code class="docutils literal notranslate"><span class="pre">UsersTab.check_add_user_window_content()</span></code></a></li>
<li><a class="reference internal" href="#pages.users_tab.UsersTab.check_edit_user_window_content"><code class="docutils literal notranslate"><span class="pre">UsersTab.check_edit_user_window_content()</span></code></a></li>
<li><a class="reference internal" href="#pages.users_tab.UsersTab.check_users_table_content"><code class="docutils literal notranslate"><span class="pre">UsersTab.check_users_table_content()</span></code></a></li>
<li><a class="reference internal" href="#pages.users_tab.UsersTab.should_be_toolbar"><code class="docutils literal notranslate"><span class="pre">UsersTab.should_be_toolbar()</span></code></a></li>
<li><a class="reference internal" href="#pages.users_tab.UsersTab.should_be_toolbar_buttons"><code class="docutils literal notranslate"><span class="pre">UsersTab.should_be_toolbar_buttons()</span></code></a></li>
<li><a class="reference internal" href="#pages.users_tab.UsersTab.should_be_user_in_table"><code class="docutils literal notranslate"><span class="pre">UsersTab.should_be_user_in_table()</span></code></a></li>
<li><a class="reference internal" href="#pages.users_tab.UsersTab.should_be_users_table"><code class="docutils literal notranslate"><span class="pre">UsersTab.should_be_users_table()</span></code></a></li>
<li><a class="reference internal" href="#pages.users_tab.UsersTab.should_not_be_user_in_table"><code class="docutils literal notranslate"><span class="pre">UsersTab.should_not_be_user_in_table()</span></code></a></li>
<li><a class="reference internal" href="#pages.users_tab.UsersTab.verify_users_table_content"><code class="docutils literal notranslate"><span class="pre">UsersTab.verify_users_table_content()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#module-pages.ztp_config_tab">pages.ztp_config_tab module</a><ul>
<li><a class="reference internal" href="#pages.ztp_config_tab.ZTPConfigTab"><code class="docutils literal notranslate"><span class="pre">ZTPConfigTab</span></code></a><ul>
<li><a class="reference internal" href="#pages.ztp_config_tab.ZTPConfigTab.__init__"><code class="docutils literal notranslate"><span class="pre">ZTPConfigTab.__init__()</span></code></a></li>
<li><a class="reference internal" href="#pages.ztp_config_tab.ZTPConfigTab.click_sync_button"><code class="docutils literal notranslate"><span class="pre">ZTPConfigTab.click_sync_button()</span></code></a></li>
<li><a class="reference internal" href="#pages.ztp_config_tab.ZTPConfigTab.get_rows_count"><code class="docutils literal notranslate"><span class="pre">ZTPConfigTab.get_rows_count()</span></code></a></li>
<li><a class="reference internal" href="#pages.ztp_config_tab.ZTPConfigTab.scroll_config_table_up"><code class="docutils literal notranslate"><span class="pre">ZTPConfigTab.scroll_config_table_up()</span></code></a></li>
<li><a class="reference internal" href="#pages.ztp_config_tab.ZTPConfigTab.scroll_config_table_down"><code class="docutils literal notranslate"><span class="pre">ZTPConfigTab.scroll_config_table_down()</span></code></a></li>
<li><a class="reference internal" href="#pages.ztp_config_tab.ZTPConfigTab.check_config_table_content"><code class="docutils literal notranslate"><span class="pre">ZTPConfigTab.check_config_table_content()</span></code></a></li>
<li><a class="reference internal" href="#pages.ztp_config_tab.ZTPConfigTab.check_sync_button_visibility"><code class="docutils literal notranslate"><span class="pre">ZTPConfigTab.check_sync_button_visibility()</span></code></a></li>
<li><a class="reference internal" href="#pages.ztp_config_tab.ZTPConfigTab.check_sync_button_tooltip"><code class="docutils literal notranslate"><span class="pre">ZTPConfigTab.check_sync_button_tooltip()</span></code></a></li>
<li><a class="reference internal" href="#pages.ztp_config_tab.ZTPConfigTab.check_config_table_vertical_scrolling"><code class="docutils literal notranslate"><span class="pre">ZTPConfigTab.check_config_table_vertical_scrolling()</span></code></a></li>
<li><a class="reference internal" href="#pages.ztp_config_tab.ZTPConfigTab.check_config_table_first_row_visibility"><code class="docutils literal notranslate"><span class="pre">ZTPConfigTab.check_config_table_first_row_visibility()</span></code></a></li>
<li><a class="reference internal" href="#pages.ztp_config_tab.ZTPConfigTab.check_config_table_last_row_visibility"><code class="docutils literal notranslate"><span class="pre">ZTPConfigTab.check_config_table_last_row_visibility()</span></code></a></li>
<li><a class="reference internal" href="#pages.ztp_config_tab.ZTPConfigTab.check_config_table_row_highlighting"><code class="docutils literal notranslate"><span class="pre">ZTPConfigTab.check_config_table_row_highlighting()</span></code></a></li>
<li><a class="reference internal" href="#pages.ztp_config_tab.ZTPConfigTab.should_be_toolbar"><code class="docutils literal notranslate"><span class="pre">ZTPConfigTab.should_be_toolbar()</span></code></a></li>
<li><a class="reference internal" href="#pages.ztp_config_tab.ZTPConfigTab.should_be_config_table"><code class="docutils literal notranslate"><span class="pre">ZTPConfigTab.should_be_config_table()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#module-pages.ztp_templates_tab">pages.ztp_templates_tab module</a><ul>
<li><a class="reference internal" href="#pages.ztp_templates_tab.ZTPTemplatesTab"><code class="docutils literal notranslate"><span class="pre">ZTPTemplatesTab</span></code></a><ul>
<li><a class="reference internal" href="#pages.ztp_templates_tab.ZTPTemplatesTab.__init__"><code class="docutils literal notranslate"><span class="pre">ZTPTemplatesTab.__init__()</span></code></a></li>
<li><a class="reference internal" href="#pages.ztp_templates_tab.ZTPTemplatesTab.add_modal_window"><code class="docutils literal notranslate"><span class="pre">ZTPTemplatesTab.add_modal_window()</span></code></a></li>
<li><a class="reference internal" href="#pages.ztp_templates_tab.ZTPTemplatesTab.get_modal_window"><code class="docutils literal notranslate"><span class="pre">ZTPTemplatesTab.get_modal_window()</span></code></a></li>
<li><a class="reference internal" href="#pages.ztp_templates_tab.ZTPTemplatesTab.delete_modal_window"><code class="docutils literal notranslate"><span class="pre">ZTPTemplatesTab.delete_modal_window()</span></code></a></li>
<li><a class="reference internal" href="#pages.ztp_templates_tab.ZTPTemplatesTab.open_template_modal_by_index"><code class="docutils literal notranslate"><span class="pre">ZTPTemplatesTab.open_template_modal_by_index()</span></code></a></li>
<li><a class="reference internal" href="#pages.ztp_templates_tab.ZTPTemplatesTab.close_modal_window_by_toolbar_button"><code class="docutils literal notranslate"><span class="pre">ZTPTemplatesTab.close_modal_window_by_toolbar_button()</span></code></a></li>
<li><a class="reference internal" href="#pages.ztp_templates_tab.ZTPTemplatesTab.close_modal_window"><code class="docutils literal notranslate"><span class="pre">ZTPTemplatesTab.close_modal_window()</span></code></a></li>
<li><a class="reference internal" href="#pages.ztp_templates_tab.ZTPTemplatesTab.get_rows_count"><code class="docutils literal notranslate"><span class="pre">ZTPTemplatesTab.get_rows_count()</span></code></a></li>
<li><a class="reference internal" href="#pages.ztp_templates_tab.ZTPTemplatesTab.scroll_templates_table_up"><code class="docutils literal notranslate"><span class="pre">ZTPTemplatesTab.scroll_templates_table_up()</span></code></a></li>
<li><a class="reference internal" href="#pages.ztp_templates_tab.ZTPTemplatesTab.scroll_templates_table_down"><code class="docutils literal notranslate"><span class="pre">ZTPTemplatesTab.scroll_templates_table_down()</span></code></a></li>
<li><a class="reference internal" href="#pages.ztp_templates_tab.ZTPTemplatesTab.scroll_modal_up"><code class="docutils literal notranslate"><span class="pre">ZTPTemplatesTab.scroll_modal_up()</span></code></a></li>
<li><a class="reference internal" href="#pages.ztp_templates_tab.ZTPTemplatesTab.scroll_modal_down"><code class="docutils literal notranslate"><span class="pre">ZTPTemplatesTab.scroll_modal_down()</span></code></a></li>
<li><a class="reference internal" href="#pages.ztp_templates_tab.ZTPTemplatesTab.check_ztp_templates_modal_content"><code class="docutils literal notranslate"><span class="pre">ZTPTemplatesTab.check_ztp_templates_modal_content()</span></code></a></li>
<li><a class="reference internal" href="#pages.ztp_templates_tab.ZTPTemplatesTab.check_ztp_templates_table_content"><code class="docutils literal notranslate"><span class="pre">ZTPTemplatesTab.check_ztp_templates_table_content()</span></code></a></li>
<li><a class="reference internal" href="#pages.ztp_templates_tab.ZTPTemplatesTab.check_templates_table_vertical_scrolling"><code class="docutils literal notranslate"><span class="pre">ZTPTemplatesTab.check_templates_table_vertical_scrolling()</span></code></a></li>
<li><a class="reference internal" href="#pages.ztp_templates_tab.ZTPTemplatesTab.check_templates_table_first_row_visibility"><code class="docutils literal notranslate"><span class="pre">ZTPTemplatesTab.check_templates_table_first_row_visibility()</span></code></a></li>
<li><a class="reference internal" href="#pages.ztp_templates_tab.ZTPTemplatesTab.check_templates_table_last_row_visibility"><code class="docutils literal notranslate"><span class="pre">ZTPTemplatesTab.check_templates_table_last_row_visibility()</span></code></a></li>
<li><a class="reference internal" href="#pages.ztp_templates_tab.ZTPTemplatesTab.check_templates_table_row_highlighting"><code class="docutils literal notranslate"><span class="pre">ZTPTemplatesTab.check_templates_table_row_highlighting()</span></code></a></li>
<li><a class="reference internal" href="#pages.ztp_templates_tab.ZTPTemplatesTab.should_be_toolbar"><code class="docutils literal notranslate"><span class="pre">ZTPTemplatesTab.should_be_toolbar()</span></code></a></li>
<li><a class="reference internal" href="#pages.ztp_templates_tab.ZTPTemplatesTab.should_be_templates_table"><code class="docutils literal notranslate"><span class="pre">ZTPTemplatesTab.should_be_templates_table()</span></code></a></li>
<li><a class="reference internal" href="#pages.ztp_templates_tab.ZTPTemplatesTab.should_be_modal_window"><code class="docutils literal notranslate"><span class="pre">ZTPTemplatesTab.should_be_modal_window()</span></code></a></li>
<li><a class="reference internal" href="#pages.ztp_templates_tab.ZTPTemplatesTab.should_not_be_modal_window"><code class="docutils literal notranslate"><span class="pre">ZTPTemplatesTab.should_not_be_modal_window()</span></code></a></li>
<li><a class="reference internal" href="#pages.ztp_templates_tab.ZTPTemplatesTab.check_modal_vertical_scrolling"><code class="docutils literal notranslate"><span class="pre">ZTPTemplatesTab.check_modal_vertical_scrolling()</span></code></a></li>
<li><a class="reference internal" href="#pages.ztp_templates_tab.ZTPTemplatesTab.verify_template_data_with_api"><code class="docutils literal notranslate"><span class="pre">ZTPTemplatesTab.verify_template_data_with_api()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#module-pages">Module contents</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</nav>
@ -338,6 +369,7 @@
<div role="navigation" aria-label="Навигация по страницам">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="modules.html">e-nms_qa_automation</a></li>
<li class="breadcrumb-item active">pages package</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/pages.rst.txt" rel="nofollow"> Просмотреть исходный код страницы</a>
@ -1088,78 +1120,6 @@
</dd></dl>
</section>
<section id="module-pages.location_page">
<span id="pages-location-page-module"></span><h2>pages.location_page module<a class="headerlink" href="#module-pages.location_page" title="Ссылка на этот заголовок"></a></h2>
<p>Модуль страницы локации.</p>
<dl class="py class">
<dt class="sig sig-object py" id="pages.location_page.LocationPage">
<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">LocationPage</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">page</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pages/location_page.html#LocationPage"><span class="viewcode-link"><span class="pre">[исходный</span> <span class="pre">код]</span></span></a><a class="headerlink" href="#pages.location_page.LocationPage" title="Ссылка на это определение"></a></dt>
<dd><p>Базовые классы: <a class="reference internal" href="#pages.base_page.BasePage" title="pages.base_page.BasePage"><code class="xref py py-class docutils literal notranslate"><span class="pre">BasePage</span></code></a></p>
<p>Класс для работы со страницей локации.</p>
<dl class="field-list simple">
<dt class="field-odd">Параметры<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>page</strong> (<em>Page</em>)</p>
</dd>
</dl>
<dl class="py method">
<dt class="sig sig-object py" id="pages.location_page.LocationPage.__init__">
<span class="sig-name descname"><span class="pre">__init__</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">page</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pages/location_page.html#LocationPage.__init__"><span class="viewcode-link"><span class="pre">[исходный</span> <span class="pre">код]</span></span></a><a class="headerlink" href="#pages.location_page.LocationPage.__init__" title="Ссылка на это определение"></a></dt>
<dd><p>Инициализирует страницу локации.</p>
<dl class="field-list simple">
<dt class="field-odd">Параметры<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>page</strong> (<em>Page</em>) Экземпляр страницы Playwright</p>
</dd>
<dt class="field-even">Тип результата<span class="colon">:</span></dt>
<dd class="field-even"><p><em>None</em></p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="pages.location_page.LocationPage.click_create_button">
<span class="sig-name descname"><span class="pre">click_create_button</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pages/location_page.html#LocationPage.click_create_button"><span class="viewcode-link"><span class="pre">[исходный</span> <span class="pre">код]</span></span></a><a class="headerlink" href="#pages.location_page.LocationPage.click_create_button" title="Ссылка на это определение"></a></dt>
<dd><p>Кликает на кнопку „Создать“ и возвращает фрейм создания.</p>
<dl class="field-list simple">
<dt class="field-odd">Результат<span class="colon">:</span></dt>
<dd class="field-odd"><p>Фрейм создания дочернего элемента</p>
</dd>
<dt class="field-even">Тип результата<span class="colon">:</span></dt>
<dd class="field-even"><p>CreateChildElementFrame</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="pages.location_page.LocationPage.is_create_button_visible">
<span class="sig-name descname"><span class="pre">is_create_button_visible</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pages/location_page.html#LocationPage.is_create_button_visible"><span class="viewcode-link"><span class="pre">[исходный</span> <span class="pre">код]</span></span></a><a class="headerlink" href="#pages.location_page.LocationPage.is_create_button_visible" title="Ссылка на это определение"></a></dt>
<dd><p>Проверяет видимость кнопки „Создать“.</p>
<dl class="field-list simple">
<dt class="field-odd">Результат<span class="colon">:</span></dt>
<dd class="field-odd"><p>True если кнопка видима</p>
</dd>
<dt class="field-even">Тип результата<span class="colon">:</span></dt>
<dd class="field-even"><p><em>bool</em></p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="pages.location_page.LocationPage.wait_for_timeout">
<span class="sig-name descname"><span class="pre">wait_for_timeout</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">timeout</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pages/location_page.html#LocationPage.wait_for_timeout"><span class="viewcode-link"><span class="pre">[исходный</span> <span class="pre">код]</span></span></a><a class="headerlink" href="#pages.location_page.LocationPage.wait_for_timeout" title="Ссылка на это определение"></a></dt>
<dd><p>Ожидает указанное количество миллисекунд.</p>
<dl class="field-list simple">
<dt class="field-odd">Параметры<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>timeout</strong> (<em>int</em>) Время ожидания в миллисекундах</p>
</dd>
<dt class="field-even">Тип результата<span class="colon">:</span></dt>
<dd class="field-even"><p><em>None</em></p>
</dd>
</dl>
</dd></dl>
</dd></dl>
</section>
<section id="module-pages.login_page">
<span id="pages-login-page-module"></span><h2>pages.login_page module<a class="headerlink" href="#module-pages.login_page" title="Ссылка на этот заголовок"></a></h2>
@ -1556,6 +1516,179 @@ user_card: Карточка пользователя.</p>
</dd></dl>
</section>
<section id="module-pages.push_notifications_settings_tab">
<span id="pages-push-notifications-settings-tab-module"></span><h2>pages.push_notifications_settings_tab module<a class="headerlink" href="#module-pages.push_notifications_settings_tab" title="Ссылка на этот заголовок"></a></h2>
<p>Модуль вкладки настройки Push уведомлений.</p>
<p>Содержит класс PushNotificationsSettings для работы с вкладкой настройки Push уведомлений.
Позволяет проверять состояние и взаимодействовать с элементами вкладки.</p>
<dl class="py class">
<dt class="sig sig-object py" id="pages.push_notifications_settings_tab.PushNotificationsSettingsTab">
<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">PushNotificationsSettingsTab</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">page</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pages/push_notifications_settings_tab.html#PushNotificationsSettingsTab"><span class="viewcode-link"><span class="pre">[исходный</span> <span class="pre">код]</span></span></a><a class="headerlink" href="#pages.push_notifications_settings_tab.PushNotificationsSettingsTab" title="Ссылка на это определение"></a></dt>
<dd><p>Базовые классы: <a class="reference internal" href="#pages.base_page.BasePage" title="pages.base_page.BasePage"><code class="xref py py-class docutils literal notranslate"><span class="pre">BasePage</span></code></a></p>
<p>Класс для работы с вкладкой настройки Push уведомлений.</p>
<p>Предоставляет методы для взаимодействия с вкладкой настройки Push уведомлений.</p>
<dl class="field-list simple">
<dt class="field-odd">Параметры<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>page</strong> (<em>Page</em>) Экземпляр страницы Playwright.</p>
</dd>
</dl>
<dl class="py method">
<dt class="sig sig-object py" id="pages.push_notifications_settings_tab.PushNotificationsSettingsTab.__init__">
<span class="sig-name descname"><span class="pre">__init__</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">page</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pages/push_notifications_settings_tab.html#PushNotificationsSettingsTab.__init__"><span class="viewcode-link"><span class="pre">[исходный</span> <span class="pre">код]</span></span></a><a class="headerlink" href="#pages.push_notifications_settings_tab.PushNotificationsSettingsTab.__init__" title="Ссылка на это определение"></a></dt>
<dd><p>Инициализирует компоненты вкладки настройки Push уведомлений.</p>
<dl class="field-list simple">
<dt class="field-odd">Параметры<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>page</strong> (<em>Page</em>)</p>
</dd>
<dt class="field-even">Тип результата<span class="colon">:</span></dt>
<dd class="field-even"><p><em>None</em></p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="pages.push_notifications_settings_tab.PushNotificationsSettingsTab.clear_users_setting_value">
<span class="sig-name descname"><span class="pre">clear_users_setting_value</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pages/push_notifications_settings_tab.html#PushNotificationsSettingsTab.clear_users_setting_value"><span class="viewcode-link"><span class="pre">[исходный</span> <span class="pre">код]</span></span></a><a class="headerlink" href="#pages.push_notifications_settings_tab.PushNotificationsSettingsTab.clear_users_setting_value" title="Ссылка на это определение"></a></dt>
<dd><p>Очищает текущее значение поля настроек „Пользователи“.</p>
<dl class="field-list simple">
<dt class="field-odd">Тип результата<span class="colon">:</span></dt>
<dd class="field-odd"><p><em>None</em></p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="pages.push_notifications_settings_tab.PushNotificationsSettingsTab.click_submit_button">
<span class="sig-name descname"><span class="pre">click_submit_button</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pages/push_notifications_settings_tab.html#PushNotificationsSettingsTab.click_submit_button"><span class="viewcode-link"><span class="pre">[исходный</span> <span class="pre">код]</span></span></a><a class="headerlink" href="#pages.push_notifications_settings_tab.PushNotificationsSettingsTab.click_submit_button" title="Ссылка на это определение"></a></dt>
<dd><p>Нажатие кнопки „Отправить“ в форме ввода настроек.</p>
<dl class="field-list simple">
<dt class="field-odd">Тип результата<span class="colon">:</span></dt>
<dd class="field-odd"><p><em>None</em></p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="pages.push_notifications_settings_tab.PushNotificationsSettingsTab.get_message_setting_value">
<span class="sig-name descname"><span class="pre">get_message_setting_value</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pages/push_notifications_settings_tab.html#PushNotificationsSettingsTab.get_message_setting_value"><span class="viewcode-link"><span class="pre">[исходный</span> <span class="pre">код]</span></span></a><a class="headerlink" href="#pages.push_notifications_settings_tab.PushNotificationsSettingsTab.get_message_setting_value" title="Ссылка на это определение"></a></dt>
<dd><p>Возвращает текущее значение поля настроек „Сообщение“.</p>
<dl class="field-list simple">
<dt class="field-odd">Результат<span class="colon">:</span></dt>
<dd class="field-odd"><p>Текущее значение поля настроек „Сообщение“.</p>
</dd>
<dt class="field-even">Тип результата<span class="colon">:</span></dt>
<dd class="field-even"><p><em>str</em></p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="pages.push_notifications_settings_tab.PushNotificationsSettingsTab.get_users_setting_value">
<span class="sig-name descname"><span class="pre">get_users_setting_value</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pages/push_notifications_settings_tab.html#PushNotificationsSettingsTab.get_users_setting_value"><span class="viewcode-link"><span class="pre">[исходный</span> <span class="pre">код]</span></span></a><a class="headerlink" href="#pages.push_notifications_settings_tab.PushNotificationsSettingsTab.get_users_setting_value" title="Ссылка на это определение"></a></dt>
<dd><p>Возвращает текущее значение поля настроек „Пользователи“.</p>
<dl class="field-list simple">
<dt class="field-odd">Результат<span class="colon">:</span></dt>
<dd class="field-odd"><p>Текущее значение поля настроек „Пользователи“.</p>
</dd>
<dt class="field-even">Тип результата<span class="colon">:</span></dt>
<dd class="field-even"><p><em>str</em></p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="pages.push_notifications_settings_tab.PushNotificationsSettingsTab.input_message">
<span class="sig-name descname"><span class="pre">input_message</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">text</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pages/push_notifications_settings_tab.html#PushNotificationsSettingsTab.input_message"><span class="viewcode-link"><span class="pre">[исходный</span> <span class="pre">код]</span></span></a><a class="headerlink" href="#pages.push_notifications_settings_tab.PushNotificationsSettingsTab.input_message" title="Ссылка на это определение"></a></dt>
<dd><p>Заполнение поля „Сообщение“.</p>
<dl class="field-list simple">
<dt class="field-odd">Параметры<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>text</strong> (<em>str</em>)</p>
</dd>
<dt class="field-even">Тип результата<span class="colon">:</span></dt>
<dd class="field-even"><p><em>None</em></p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="pages.push_notifications_settings_tab.PushNotificationsSettingsTab.deselect_users">
<span class="sig-name descname"><span class="pre">deselect_users</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">users</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pages/push_notifications_settings_tab.html#PushNotificationsSettingsTab.deselect_users"><span class="viewcode-link"><span class="pre">[исходный</span> <span class="pre">код]</span></span></a><a class="headerlink" href="#pages.push_notifications_settings_tab.PushNotificationsSettingsTab.deselect_users" title="Ссылка на это определение"></a></dt>
<dd><p>Изменение значения поля „Пользователи“ путем отмены выбора из выпадающего списка заданных имен.</p>
<dl class="field-list simple">
<dt class="field-odd">Параметры<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>users</strong> (<em>list</em><em>[</em><em>str</em><em>]</em>)</p>
</dd>
<dt class="field-even">Тип результата<span class="colon">:</span></dt>
<dd class="field-even"><p><em>None</em></p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="pages.push_notifications_settings_tab.PushNotificationsSettingsTab.select_users">
<span class="sig-name descname"><span class="pre">select_users</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">users</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pages/push_notifications_settings_tab.html#PushNotificationsSettingsTab.select_users"><span class="viewcode-link"><span class="pre">[исходный</span> <span class="pre">код]</span></span></a><a class="headerlink" href="#pages.push_notifications_settings_tab.PushNotificationsSettingsTab.select_users" title="Ссылка на это определение"></a></dt>
<dd><p>Заполнение поля „Пользователи“ путем выбора из выпадающего списка заданных имен.</p>
<dl class="field-list simple">
<dt class="field-odd">Параметры<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>users</strong> (<em>list</em><em>[</em><em>str</em><em>]</em>)</p>
</dd>
<dt class="field-even">Тип результата<span class="colon">:</span></dt>
<dd class="field-even"><p><em>None</em></p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="pages.push_notifications_settings_tab.PushNotificationsSettingsTab.check_content">
<span class="sig-name descname"><span class="pre">check_content</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pages/push_notifications_settings_tab.html#PushNotificationsSettingsTab.check_content"><span class="viewcode-link"><span class="pre">[исходный</span> <span class="pre">код]</span></span></a><a class="headerlink" href="#pages.push_notifications_settings_tab.PushNotificationsSettingsTab.check_content" title="Ссылка на это определение"></a></dt>
<dd><p>Проверяет наличие и корректность всех элементов страницы.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="pages.push_notifications_settings_tab.PushNotificationsSettingsTab.should_be_toolbar">
<span class="sig-name descname"><span class="pre">should_be_toolbar</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pages/push_notifications_settings_tab.html#PushNotificationsSettingsTab.should_be_toolbar"><span class="viewcode-link"><span class="pre">[исходный</span> <span class="pre">код]</span></span></a><a class="headerlink" href="#pages.push_notifications_settings_tab.PushNotificationsSettingsTab.should_be_toolbar" title="Ссылка на это определение"></a></dt>
<dd><p>Проверяет наличие тулбара страницы.</p>
<dl class="field-list simple">
<dt class="field-odd">Исключение<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>AssertionError</strong> Если тулбар или кнопка редактирования отсутствуют.</p>
</dd>
<dt class="field-even">Тип результата<span class="colon">:</span></dt>
<dd class="field-even"><p><em>None</em></p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="pages.push_notifications_settings_tab.PushNotificationsSettingsTab.should_be_form_toolbar">
<span class="sig-name descname"><span class="pre">should_be_form_toolbar</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pages/push_notifications_settings_tab.html#PushNotificationsSettingsTab.should_be_form_toolbar"><span class="viewcode-link"><span class="pre">[исходный</span> <span class="pre">код]</span></span></a><a class="headerlink" href="#pages.push_notifications_settings_tab.PushNotificationsSettingsTab.should_be_form_toolbar" title="Ссылка на это определение"></a></dt>
<dd><p>Проверяет наличие тулбара формы редактирования настроек.</p>
<dl class="field-list simple">
<dt class="field-odd">Исключение<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>AssertionError</strong> Если тулбар отсутствует.</p>
</dd>
<dt class="field-even">Тип результата<span class="colon">:</span></dt>
<dd class="field-even"><p><em>None</em></p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="pages.push_notifications_settings_tab.PushNotificationsSettingsTab.should_be_success_alert">
<span class="sig-name descname"><span class="pre">should_be_success_alert</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pages/push_notifications_settings_tab.html#PushNotificationsSettingsTab.should_be_success_alert"><span class="viewcode-link"><span class="pre">[исходный</span> <span class="pre">код]</span></span></a><a class="headerlink" href="#pages.push_notifications_settings_tab.PushNotificationsSettingsTab.should_be_success_alert" title="Ссылка на это определение"></a></dt>
<dd><p>Проверяет наличие сообщения об успешной отправке push-уведомления.</p>
<dl class="field-list simple">
<dt class="field-odd">Исключение<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>AssertionError</strong> Если тулбар отсутствует.</p>
</dd>
<dt class="field-even">Тип результата<span class="colon">:</span></dt>
<dd class="field-even"><p><em>None</em></p>
</dd>
</dl>
</dd></dl>
</dd></dl>
</section>
<section id="module-pages.service_status_tab">
<span id="pages-service-status-tab-module"></span><h2>pages.service_status_tab module<a class="headerlink" href="#module-pages.service_status_tab" title="Ссылка на этот заголовок"></a></h2>
@ -3537,7 +3670,10 @@ user_card: Карточка пользователя.</p>
</div>
</div>
<footer>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Нижняя область">
<a href="fixtures.html" class="btn btn-neutral float-left" title="fixtures package" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Предыдущая</a>
<a href="tools.html" class="btn btn-neutral float-right" title="tools package" accesskey="n" rel="next">Следующая <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>

View File

@ -92,10 +92,6 @@
<li class="toctree-l4"><a class="reference internal" href="components.html#components.navbar_component.NavigationPanelComponent"><code class="docutils literal notranslate"><span class="pre">NavigationPanelComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.settings_form_component">components.settings_form_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.settings_form_component.SettingsFormComponent"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.table_component">components.table_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.table_component.TableComponent"><code class="docutils literal notranslate"><span class="pre">TableComponent</span></code></a></li>
</ul>
@ -117,6 +113,10 @@
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.date_input_component.DateInput"><code class="docutils literal notranslate"><span class="pre">DateInput</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.interactive_dropdown_list">components_derived.interactive_dropdown_list module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.interactive_dropdown_list.InteractiveDropdownList"><code class="docutils literal notranslate"><span class="pre">InteractiveDropdownList</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_add_AD_user">components_derived.modal_add_AD_user module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_add_AD_user.AddADUserModalWindow"><code class="docutils literal notranslate"><span class="pre">AddADUserModalWindow</span></code></a></li>
</ul>
@ -145,6 +145,10 @@
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.selection_bar_component.SelectionBarComponent"><code class="docutils literal notranslate"><span class="pre">SelectionBarComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.settings_form_component">components_derived.settings_form_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.settings_form_component.SettingsFormComponent"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.sidebar_filter_component">components_derived.sidebar_filter_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.sidebar_filter_component.SidebarFilterComponent"><code class="docutils literal notranslate"><span class="pre">SidebarFilterComponent</span></code></a></li>
</ul>
@ -241,10 +245,6 @@
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.license_tab.LicenseTab"><code class="docutils literal notranslate"><span class="pre">LicenseTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.location_page">pages.location_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.location_page.LocationPage"><code class="docutils literal notranslate"><span class="pre">LocationPage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.login_page">pages.login_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.login_page.LoginPage"><code class="docutils literal notranslate"><span class="pre">LoginPage</span></code></a></li>
</ul>
@ -253,6 +253,10 @@
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.main_page.MainPage"><code class="docutils literal notranslate"><span class="pre">MainPage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.push_notifications_settings_tab">pages.push_notifications_settings_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab"><code class="docutils literal notranslate"><span class="pre">PushNotificationsSettingsTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.service_status_tab">pages.service_status_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.service_status_tab.ServiceStatusTab"><code class="docutils literal notranslate"><span class="pre">ServiceStatusTab</span></code></a></li>
</ul>
@ -295,6 +299,60 @@
</li>
</ul>
</li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Документация и руководства:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="sphinx_guide.html">Руководство по документации тестов с помощью Sphinx</a><ul>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id2">1 Расположение документа</a></li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id3">2 Первичная настройка для нового проекта</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id4">2.1 Подготовка зависимостей</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id5">2.2 Инициализация Sphinx</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id6">2.3 Настройка конфигурации</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id7">2.4 Настройка главной страницы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id8">3 Работа с существующим проектом</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id9">3.1 Установка зависимостей</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id10">3.2 Генерация документации</a><ul>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id11">3.2.1 Базовая генерация</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id12">3.2.2 Генерация с исключениями</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id13">3.2.3 Принудительная перегенерация</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id14">3.3 Очистка документации</a><ul>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id15">3.3.1 Команды очистки</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id16">3.3.2 Автоматизация очистки</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id17">3.4 Сборка и деплой</a><ul>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id18">3.4.1 Локальная сборка</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id19">3.4.2 Проверка качества</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id20">3.4.3 Сборка для публикации</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#ci-cd">3.4.4 Настройка для CI/CD</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#mkdocs-sphinx">4 Конвертация контента из MkDocs в Sphinx</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id21">4.1 Текст</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id22">4.2 Таблицы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id23">5 Особенности Sphinx</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#docstrings">5.1 Поддержка docstrings</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id24">5.2 Кастомные директивы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id25">6 Решение проблем</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id26">6.1 Проблема: Модули не находятся</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id27">6.2 Проблема: Не генерируются docstrings</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id28">6.3 Проблема: Тема не применяется</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id29">7 Дополнительные возможности</a></li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#version-history">История версий</a></li>
</ul>
</li>
</ul>
</div>
@ -397,11 +455,6 @@
<td>&#160;&#160;&#160;
<a href="components.html#module-components.navbar_component"><code class="xref">components.navbar_component</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="components.html#module-components.settings_form_component"><code class="xref">components.settings_form_component</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
@ -428,6 +481,11 @@
<td>&#160;&#160;&#160;
<a href="components_derived.html#module-components_derived.date_input_component"><code class="xref">components_derived.date_input_component</code></a></td><td>
<em></em></td></tr>
<tr class="cg-2">
<td></td>
<td>&#160;&#160;&#160;
<a href="components_derived.html#module-components_derived.interactive_dropdown_list"><code class="xref">components_derived.interactive_dropdown_list</code></a></td><td>
<em></em></td></tr>
<tr class="cg-2">
<td></td>
<td>&#160;&#160;&#160;
@ -463,6 +521,11 @@
<td>&#160;&#160;&#160;
<a href="components_derived.html#module-components_derived.selection_bar_component"><code class="xref">components_derived.selection_bar_component</code></a></td><td>
<em></em></td></tr>
<tr class="cg-2">
<td></td>
<td>&#160;&#160;&#160;
<a href="components_derived.html#module-components_derived.settings_form_component"><code class="xref">components_derived.settings_form_component</code></a></td><td>
<em></em></td></tr>
<tr class="cg-2">
<td></td>
<td>&#160;&#160;&#160;
@ -589,11 +652,6 @@
<td>&#160;&#160;&#160;
<a href="pages.html#module-pages.license_tab"><code class="xref">pages.license_tab</code></a></td><td>
<em></em></td></tr>
<tr class="cg-6">
<td></td>
<td>&#160;&#160;&#160;
<a href="pages.html#module-pages.location_page"><code class="xref">pages.location_page</code></a></td><td>
<em></em></td></tr>
<tr class="cg-6">
<td></td>
<td>&#160;&#160;&#160;
@ -604,6 +662,11 @@
<td>&#160;&#160;&#160;
<a href="pages.html#module-pages.main_page"><code class="xref">pages.main_page</code></a></td><td>
<em></em></td></tr>
<tr class="cg-6">
<td></td>
<td>&#160;&#160;&#160;
<a href="pages.html#module-pages.push_notifications_settings_tab"><code class="xref">pages.push_notifications_settings_tab</code></a></td><td>
<em></em></td></tr>
<tr class="cg-6">
<td></td>
<td>&#160;&#160;&#160;

View File

@ -92,10 +92,6 @@
<li class="toctree-l4"><a class="reference internal" href="components.html#components.navbar_component.NavigationPanelComponent"><code class="docutils literal notranslate"><span class="pre">NavigationPanelComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.settings_form_component">components.settings_form_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.settings_form_component.SettingsFormComponent"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.table_component">components.table_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.table_component.TableComponent"><code class="docutils literal notranslate"><span class="pre">TableComponent</span></code></a></li>
</ul>
@ -117,6 +113,10 @@
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.date_input_component.DateInput"><code class="docutils literal notranslate"><span class="pre">DateInput</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.interactive_dropdown_list">components_derived.interactive_dropdown_list module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.interactive_dropdown_list.InteractiveDropdownList"><code class="docutils literal notranslate"><span class="pre">InteractiveDropdownList</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_add_AD_user">components_derived.modal_add_AD_user module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_add_AD_user.AddADUserModalWindow"><code class="docutils literal notranslate"><span class="pre">AddADUserModalWindow</span></code></a></li>
</ul>
@ -145,6 +145,10 @@
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.selection_bar_component.SelectionBarComponent"><code class="docutils literal notranslate"><span class="pre">SelectionBarComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.settings_form_component">components_derived.settings_form_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.settings_form_component.SettingsFormComponent"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.sidebar_filter_component">components_derived.sidebar_filter_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.sidebar_filter_component.SidebarFilterComponent"><code class="docutils literal notranslate"><span class="pre">SidebarFilterComponent</span></code></a></li>
</ul>
@ -241,10 +245,6 @@
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.license_tab.LicenseTab"><code class="docutils literal notranslate"><span class="pre">LicenseTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.location_page">pages.location_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.location_page.LocationPage"><code class="docutils literal notranslate"><span class="pre">LocationPage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.login_page">pages.login_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.login_page.LoginPage"><code class="docutils literal notranslate"><span class="pre">LoginPage</span></code></a></li>
</ul>
@ -253,6 +253,10 @@
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.main_page.MainPage"><code class="docutils literal notranslate"><span class="pre">MainPage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.push_notifications_settings_tab">pages.push_notifications_settings_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab"><code class="docutils literal notranslate"><span class="pre">PushNotificationsSettingsTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.service_status_tab">pages.service_status_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.service_status_tab.ServiceStatusTab"><code class="docutils literal notranslate"><span class="pre">ServiceStatusTab</span></code></a></li>
</ul>
@ -295,6 +299,60 @@
</li>
</ul>
</li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Документация и руководства:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="sphinx_guide.html">Руководство по документации тестов с помощью Sphinx</a><ul>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id2">1 Расположение документа</a></li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id3">2 Первичная настройка для нового проекта</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id4">2.1 Подготовка зависимостей</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id5">2.2 Инициализация Sphinx</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id6">2.3 Настройка конфигурации</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id7">2.4 Настройка главной страницы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id8">3 Работа с существующим проектом</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id9">3.1 Установка зависимостей</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id10">3.2 Генерация документации</a><ul>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id11">3.2.1 Базовая генерация</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id12">3.2.2 Генерация с исключениями</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id13">3.2.3 Принудительная перегенерация</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id14">3.3 Очистка документации</a><ul>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id15">3.3.1 Команды очистки</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id16">3.3.2 Автоматизация очистки</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id17">3.4 Сборка и деплой</a><ul>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id18">3.4.1 Локальная сборка</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id19">3.4.2 Проверка качества</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id20">3.4.3 Сборка для публикации</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#ci-cd">3.4.4 Настройка для CI/CD</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#mkdocs-sphinx">4 Конвертация контента из MkDocs в Sphinx</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id21">4.1 Текст</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id22">4.2 Таблицы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id23">5 Особенности Sphinx</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#docstrings">5.1 Поддержка docstrings</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id24">5.2 Кастомные директивы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id25">6 Решение проблем</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id26">6.1 Проблема: Модули не находятся</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id27">6.2 Проблема: Не генерируются docstrings</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id28">6.3 Проблема: Тема не применяется</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id29">7 Дополнительные возможности</a></li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#version-history">История версий</a></li>
</ul>
</li>
</ul>
</div>

File diff suppressed because one or more lines are too long

822
docs/build/html/sphinx_guide.html vendored Normal file
View File

@ -0,0 +1,822 @@
<!DOCTYPE html>
<html class="writer-html5" lang="ru" data-content_root="./">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Руководство по документации тестов с помощью Sphinx &mdash; документация e-nms-qa-automation 0.1.0</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="_static/css/theme.css?v=e59714d7" />
<script src="_static/jquery.js?v=5d32c60e"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="_static/documentation_options.js?v=6ff560e8"></script>
<script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/translations.js?v=cd1d70c9"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="Алфавитный указатель" href="genindex.html" />
<link rel="search" title="Поиск" href="search.html" />
<link rel="prev" title="tools package" href="tools.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="index.html" class="icon icon-home">
e-nms-qa-automation
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Поиск в документации" aria-label="Поиск в документации" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Меню навигации">
<p class="caption" role="heading"><span class="caption-text">Содержание:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="modules.html">e-nms_qa_automation</a><ul>
<li class="toctree-l2"><a class="reference internal" href="components.html">components package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="components.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.alert_component">components.alert_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.alert_component.AlertComponent"><code class="docutils literal notranslate"><span class="pre">AlertComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.base_component">components.base_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.base_component.BaseComponent"><code class="docutils literal notranslate"><span class="pre">BaseComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.card_component">components.card_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.card_component.CardComponent"><code class="docutils literal notranslate"><span class="pre">CardComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.confirm_component">components.confirm_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.confirm_component.ConfirmComponent"><code class="docutils literal notranslate"><span class="pre">ConfirmComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.date_picker_component">components.date_picker_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.date_picker_component.DatePickerComponent"><code class="docutils literal notranslate"><span class="pre">DatePickerComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.dropdown_list_component">components.dropdown_list_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.dropdown_list_component.DropdownList"><code class="docutils literal notranslate"><span class="pre">DropdownList</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.eventbar_component">components.eventbar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.eventbar_component.EventPanelComponent"><code class="docutils literal notranslate"><span class="pre">EventPanelComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.events_container_component">components.events_container_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.events_container_component.EventsContainerComponent"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.json_container_component">components.json_container_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.json_container_component.JsonContainerComponent"><code class="docutils literal notranslate"><span class="pre">JsonContainerComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.modal_window_component">components.modal_window_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.modal_window_component.ModalWindowComponent"><code class="docutils literal notranslate"><span class="pre">ModalWindowComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.navbar_component">components.navbar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.navbar_component.NavigationPanelComponent"><code class="docutils literal notranslate"><span class="pre">NavigationPanelComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.table_component">components.table_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.table_component.TableComponent"><code class="docutils literal notranslate"><span class="pre">TableComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.toolbar_component">components.toolbar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.toolbar_component.ToolbarComponent"><code class="docutils literal notranslate"><span class="pre">ToolbarComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="components_derived.html">components_derived package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.container_system_log_events">components_derived.container_system_log_events module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.container_system_log_events.SystemLogEventsContainer"><code class="docutils literal notranslate"><span class="pre">SystemLogEventsContainer</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.date_input_component">components_derived.date_input_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.date_input_component.DateInput"><code class="docutils literal notranslate"><span class="pre">DateInput</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.interactive_dropdown_list">components_derived.interactive_dropdown_list module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.interactive_dropdown_list.InteractiveDropdownList"><code class="docutils literal notranslate"><span class="pre">InteractiveDropdownList</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_add_AD_user">components_derived.modal_add_AD_user module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_add_AD_user.AddADUserModalWindow"><code class="docutils literal notranslate"><span class="pre">AddADUserModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_add_local_user">components_derived.modal_add_local_user module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_add_local_user.AddLocalUserModalWindow"><code class="docutils literal notranslate"><span class="pre">AddLocalUserModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_change_password">components_derived.modal_change_password module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_change_password.ChangePasswordModalWindow"><code class="docutils literal notranslate"><span class="pre">ChangePasswordModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_edit_user">components_derived.modal_edit_user module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_edit_user.EditUserModalWindow"><code class="docutils literal notranslate"><span class="pre">EditUserModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_view_template">components_derived.modal_view_template module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_view_template.ViewTemplateModalWindow"><code class="docutils literal notranslate"><span class="pre">ViewTemplateModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_view_ztp_template">components_derived.modal_view_ztp_template module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_view_ztp_template.ViewZTPTemplateModalWindow"><code class="docutils literal notranslate"><span class="pre">ViewZTPTemplateModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.selection_bar_component">components_derived.selection_bar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.selection_bar_component.SelectionBarComponent"><code class="docutils literal notranslate"><span class="pre">SelectionBarComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.settings_form_component">components_derived.settings_form_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.settings_form_component.SettingsFormComponent"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.sidebar_filter_component">components_derived.sidebar_filter_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.sidebar_filter_component.SidebarFilterComponent"><code class="docutils literal notranslate"><span class="pre">SidebarFilterComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.user_card">components_derived.user_card module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.user_card.UserCard"><code class="docutils literal notranslate"><span class="pre">UserCard</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="conftest.html">conftest module</a><ul>
<li class="toctree-l3"><a class="reference internal" href="conftest.html#conftest.pytest_sessionfinish"><code class="docutils literal notranslate"><span class="pre">pytest_sessionfinish()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="conftest.html#conftest.pytest_addoption"><code class="docutils literal notranslate"><span class="pre">pytest_addoption()</span></code></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="data.html">data package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="data.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="data.html#module-data.constants">data.constants module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="data.html#data.constants.Constants"><code class="docutils literal notranslate"><span class="pre">Constants</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="data.html#module-data.environment">data.environment module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="data.html#data.environment.Environment"><code class="docutils literal notranslate"><span class="pre">Environment</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="data.html#module-data.roles_dict">data.roles_dict module</a></li>
<li class="toctree-l3"><a class="reference internal" href="data.html#module-data">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="elements.html">elements package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="elements.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.base_element">elements.base_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.base_element.BaseElement"><code class="docutils literal notranslate"><span class="pre">BaseElement</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.button_element">elements.button_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.button_element.Button"><code class="docutils literal notranslate"><span class="pre">Button</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.checkbox_element">elements.checkbox_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.checkbox_element.Checkbox"><code class="docutils literal notranslate"><span class="pre">Checkbox</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.icon_element">elements.icon_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.icon_element.Icon"><code class="docutils literal notranslate"><span class="pre">Icon</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.tab_button_element">elements.tab_button_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.tab_button_element.TabButton"><code class="docutils literal notranslate"><span class="pre">TabButton</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.text_element">elements.text_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.text_element.Text"><code class="docutils literal notranslate"><span class="pre">Text</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.text_input_element">elements.text_input_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.text_input_element.TextInput"><code class="docutils literal notranslate"><span class="pre">TextInput</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.tooltip_button_element">elements.tooltip_button_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.tooltip_button_element.TooltipButton"><code class="docutils literal notranslate"><span class="pre">TooltipButton</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="fixtures.html">fixtures package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="fixtures.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="fixtures.html#module-fixtures.pages">fixtures.pages module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.pytest_addoption"><code class="docutils literal notranslate"><span class="pre">pytest_addoption()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.browser"><code class="docutils literal notranslate"><span class="pre">browser()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.get_firefox_browser"><code class="docutils literal notranslate"><span class="pre">get_firefox_browser()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.get_chrome_browser"><code class="docutils literal notranslate"><span class="pre">get_chrome_browser()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.get_remote_chrome"><code class="docutils literal notranslate"><span class="pre">get_remote_chrome()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.get_context"><code class="docutils literal notranslate"><span class="pre">get_context()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.return_back"><code class="docutils literal notranslate"><span class="pre">return_back()</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="fixtures.html#module-fixtures">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="pages.html">pages package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="pages.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.base_page">pages.base_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.base_page.BasePage"><code class="docutils literal notranslate"><span class="pre">BasePage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.current_session_tab">pages.current_session_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.current_session_tab.CurrentSessionsTab"><code class="docutils literal notranslate"><span class="pre">CurrentSessionsTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.license_tab">pages.license_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.license_tab.LicenseTab"><code class="docutils literal notranslate"><span class="pre">LicenseTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.login_page">pages.login_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.login_page.LoginPage"><code class="docutils literal notranslate"><span class="pre">LoginPage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.main_page">pages.main_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.main_page.MainPage"><code class="docutils literal notranslate"><span class="pre">MainPage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.push_notifications_settings_tab">pages.push_notifications_settings_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab"><code class="docutils literal notranslate"><span class="pre">PushNotificationsSettingsTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.service_status_tab">pages.service_status_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.service_status_tab.ServiceStatusTab"><code class="docutils literal notranslate"><span class="pre">ServiceStatusTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.session_settings_tab">pages.session_settings_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.session_settings_tab.SessionSettingsTab"><code class="docutils literal notranslate"><span class="pre">SessionSettingsTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.templates_tab">pages.templates_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.templates_tab.TemplatesTab"><code class="docutils literal notranslate"><span class="pre">TemplatesTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.users_tab">pages.users_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.users_tab.UsersTab"><code class="docutils literal notranslate"><span class="pre">UsersTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.ztp_config_tab">pages.ztp_config_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.ztp_config_tab.ZTPConfigTab"><code class="docutils literal notranslate"><span class="pre">ZTPConfigTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.ztp_templates_tab">pages.ztp_templates_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.ztp_templates_tab.ZTPTemplatesTab"><code class="docutils literal notranslate"><span class="pre">ZTPTemplatesTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="tools.html">tools package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="tools.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="tools.html#module-tools.fix_python_project">tools.fix_python_project module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="tools.html#tools.fix_python_project.ProjectFixer"><code class="docutils literal notranslate"><span class="pre">ProjectFixer</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="tools.html#module-tools.logger">tools.logger module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="tools.html#tools.logger.get_logger"><code class="docutils literal notranslate"><span class="pre">get_logger()</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="tools.html#module-tools">Module contents</a></li>
</ul>
</li>
</ul>
</li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Документация и руководства:</span></p>
<ul class="current">
<li class="toctree-l1 current"><a class="current reference internal" href="#">Руководство по документации тестов с помощью Sphinx</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#id2">1 Расположение документа</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id3">2 Первичная настройка для нового проекта</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#id4">2.1 Подготовка зависимостей</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id5">2.2 Инициализация Sphinx</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id6">2.3 Настройка конфигурации</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id7">2.4 Настройка главной страницы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#id8">3 Работа с существующим проектом</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#id9">3.1 Установка зависимостей</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id10">3.2 Генерация документации</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#id11">3.2.1 Базовая генерация</a></li>
<li class="toctree-l4"><a class="reference internal" href="#id12">3.2.2 Генерация с исключениями</a></li>
<li class="toctree-l4"><a class="reference internal" href="#id13">3.2.3 Принудительная перегенерация</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#id14">3.3 Очистка документации</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#id15">3.3.1 Команды очистки</a></li>
<li class="toctree-l4"><a class="reference internal" href="#id16">3.3.2 Автоматизация очистки</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#id17">3.4 Сборка и деплой</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#id18">3.4.1 Локальная сборка</a></li>
<li class="toctree-l4"><a class="reference internal" href="#id19">3.4.2 Проверка качества</a></li>
<li class="toctree-l4"><a class="reference internal" href="#id20">3.4.3 Сборка для публикации</a></li>
<li class="toctree-l4"><a class="reference internal" href="#ci-cd">3.4.4 Настройка для CI/CD</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#mkdocs-sphinx">4 Конвертация контента из MkDocs в Sphinx</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#id21">4.1 Текст</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id22">4.2 Таблицы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#id23">5 Особенности Sphinx</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#docstrings">5.1 Поддержка docstrings</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id24">5.2 Кастомные директивы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#id25">6 Решение проблем</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#id26">6.1 Проблема: Модули не находятся</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id27">6.2 Проблема: Не генерируются docstrings</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id28">6.3 Проблема: Тема не применяется</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#id29">7 Дополнительные возможности</a></li>
<li class="toctree-l2"><a class="reference internal" href="#version-history">История версий</a></li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Меню навигации для мобильных устройств" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">e-nms-qa-automation</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Навигация по страницам">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">Руководство по документации тестов с помощью Sphinx</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/sphinx_guide.rst.txt" rel="nofollow"> Просмотреть исходный код страницы</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="sphinx">
<h1>Руководство по документации тестов с помощью Sphinx<a class="headerlink" href="#sphinx" title="Ссылка на этот заголовок"></a></h1>
<p><strong>Версия документа:</strong> 1.0
<strong>Дата последнего обновления:</strong> 2025-11-27</p>
<nav class="contents local" id="id1">
<p class="topic-title">Содержание</p>
<ul class="simple">
<li><p><a class="reference internal" href="#id2" id="id31">1 Расположение документа</a></p></li>
<li><p><a class="reference internal" href="#id3" id="id32">2 Первичная настройка для нового проекта</a></p>
<ul>
<li><p><a class="reference internal" href="#id4" id="id33">2.1 Подготовка зависимостей</a></p></li>
<li><p><a class="reference internal" href="#id5" id="id34">2.2 Инициализация Sphinx</a></p></li>
<li><p><a class="reference internal" href="#id6" id="id35">2.3 Настройка конфигурации</a></p></li>
<li><p><a class="reference internal" href="#id7" id="id36">2.4 Настройка главной страницы</a></p></li>
</ul>
</li>
<li><p><a class="reference internal" href="#id8" id="id37">3 Работа с существующим проектом</a></p>
<ul>
<li><p><a class="reference internal" href="#id9" id="id38">3.1 Установка зависимостей</a></p></li>
<li><p><a class="reference internal" href="#id10" id="id39">3.2 Генерация документации</a></p>
<ul>
<li><p><a class="reference internal" href="#id11" id="id40">3.2.1 Базовая генерация</a></p></li>
<li><p><a class="reference internal" href="#id12" id="id41">3.2.2 Генерация с исключениями</a></p></li>
<li><p><a class="reference internal" href="#id13" id="id42">3.2.3 Принудительная перегенерация</a></p></li>
</ul>
</li>
<li><p><a class="reference internal" href="#id14" id="id43">3.3 Очистка документации</a></p>
<ul>
<li><p><a class="reference internal" href="#id15" id="id44">3.3.1 Команды очистки</a></p></li>
<li><p><a class="reference internal" href="#id16" id="id45">3.3.2 Автоматизация очистки</a></p></li>
</ul>
</li>
<li><p><a class="reference internal" href="#id17" id="id46">3.4 Сборка и деплой</a></p>
<ul>
<li><p><a class="reference internal" href="#id18" id="id47">3.4.1 Локальная сборка</a></p></li>
<li><p><a class="reference internal" href="#id19" id="id48">3.4.2 Проверка качества</a></p></li>
<li><p><a class="reference internal" href="#id20" id="id49">3.4.3 Сборка для публикации</a></p></li>
<li><p><a class="reference internal" href="#ci-cd" id="id50">3.4.4 Настройка для CI/CD</a></p></li>
</ul>
</li>
</ul>
</li>
<li><p><a class="reference internal" href="#mkdocs-sphinx" id="id51">4 Конвертация контента из MkDocs в Sphinx</a></p>
<ul>
<li><p><a class="reference internal" href="#id21" id="id52">4.1 Текст</a></p></li>
<li><p><a class="reference internal" href="#id22" id="id53">4.2 Таблицы</a></p></li>
</ul>
</li>
<li><p><a class="reference internal" href="#id23" id="id54">5 Особенности Sphinx</a></p>
<ul>
<li><p><a class="reference internal" href="#docstrings" id="id55">5.1 Поддержка docstrings</a></p></li>
<li><p><a class="reference internal" href="#id24" id="id56">5.2 Кастомные директивы</a></p></li>
</ul>
</li>
<li><p><a class="reference internal" href="#id25" id="id57">6 Решение проблем</a></p>
<ul>
<li><p><a class="reference internal" href="#id26" id="id58">6.1 Проблема: Модули не находятся</a></p></li>
<li><p><a class="reference internal" href="#id27" id="id59">6.2 Проблема: Не генерируются docstrings</a></p></li>
<li><p><a class="reference internal" href="#id28" id="id60">6.3 Проблема: Тема не применяется</a></p></li>
</ul>
</li>
<li><p><a class="reference internal" href="#id29" id="id61">7 Дополнительные возможности</a></p></li>
<li><p><a class="reference internal" href="#version-history" id="id62">История версий</a></p></li>
</ul>
</nav>
<section id="id2">
<h2><a class="toc-backref" href="#id31" role="doc-backlink">1 Расположение документа</a><a class="headerlink" href="#id2" title="Ссылка на этот заголовок"></a></h2>
<p>Данное руководство расположено в структуре проекта по пути:</p>
<div class="highlight-text notranslate"><div class="highlight"><pre><span></span>project_root/
├── docs/
│ ├── source/
│ │ ├── conf.py
│ │ ├── index.rst
│ │ ├── sphinx_guide.rst &lt;-- Этот файл
│ │ └── modules.rst
│ └── build/
├── src/
│ └── your_package/
└── pyproject.toml
</pre></div>
</div>
</section>
<section id="id3">
<h2><a class="toc-backref" href="#id32" role="doc-backlink">2 Первичная настройка для нового проекта</a><a class="headerlink" href="#id3" title="Ссылка на этот заголовок"></a></h2>
<section id="id4">
<h3><a class="toc-backref" href="#id33" role="doc-backlink">2.1 Подготовка зависимостей</a><a class="headerlink" href="#id4" title="Ссылка на этот заголовок"></a></h3>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># Установка Sphinx и тем</span>
pip<span class="w"> </span>install<span class="w"> </span>sphinx<span class="w"> </span>sphinx-rtd-theme<span class="w"> </span>myst-parser
<span class="c1"># Добавление в pyproject.toml</span>
<span class="nb">echo</span><span class="w"> </span><span class="o">[</span>project.optional-dependencies<span class="o">]</span><span class="w"> </span>&gt;&gt;<span class="w"> </span>pyproject.toml
<span class="nb">echo</span><span class="w"> </span><span class="nv">docs</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">[</span><span class="w"> </span>&gt;&gt;<span class="w"> </span>pyproject.toml
<span class="nb">echo</span><span class="w"> </span><span class="s2">&quot;sphinx&gt;=8.2.3&quot;</span>,<span class="w"> </span>&gt;&gt;<span class="w"> </span>pyproject.toml
<span class="nb">echo</span><span class="w"> </span><span class="s2">&quot;sphinx-rtd-theme&gt;=2.0.0&quot;</span>,<span class="w"> </span>&gt;&gt;<span class="w"> </span>pyproject.toml
<span class="nb">echo</span><span class="w"> </span><span class="s2">&quot;myst-parser&gt;=2.0.0&quot;</span><span class="w"> </span>&gt;&gt;<span class="w"> </span>pyproject.toml
<span class="nb">echo</span><span class="w"> </span><span class="o">]</span><span class="w"> </span>&gt;&gt;<span class="w"> </span>pyproject.toml
</pre></div>
</div>
</section>
<section id="id5">
<h3><a class="toc-backref" href="#id34" role="doc-backlink">2.2 Инициализация Sphinx</a><a class="headerlink" href="#id5" title="Ссылка на этот заголовок"></a></h3>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># Создание структуры документации</span>
sphinx-quickstart<span class="w"> </span>docs<span class="w"> </span>--sep<span class="w"> </span>-p<span class="w"> </span><span class="s2">&quot;PROJECT_NAME&quot;</span><span class="w"> </span>-a<span class="w"> </span><span class="s2">&quot;TEAM_NAME&quot;</span><span class="w"> </span>-l<span class="w"> </span>ru<span class="w"> </span>--ext-autodoc<span class="w"> </span>--ext-viewcode<span class="w"> </span>--makefile<span class="w"> </span>--no-batchfile
</pre></div>
</div>
</section>
<section id="id6">
<h3><a class="toc-backref" href="#id35" role="doc-backlink">2.3 Настройка конфигурации</a><a class="headerlink" href="#id6" title="Ссылка на этот заголовок"></a></h3>
<p>Обновите <code class="docutils literal notranslate"><span class="pre">docs/source/conf.py</span></code>:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span><span class="w"> </span><span class="nn">os</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">sys</span>
<span class="n">sys</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="s1">&#39;../..&#39;</span><span class="p">))</span>
<span class="n">extensions</span> <span class="o">=</span> <span class="p">[</span>
<span class="s1">&#39;sphinx.ext.autodoc&#39;</span><span class="p">,</span>
<span class="s1">&#39;sphinx.ext.napoleon&#39;</span><span class="p">,</span>
<span class="s1">&#39;sphinx.ext.viewcode&#39;</span><span class="p">,</span>
<span class="s1">&#39;sphinx.ext.intersphinx&#39;</span><span class="p">,</span>
<span class="s1">&#39;sphinx_rtd_theme&#39;</span><span class="p">,</span>
<span class="p">]</span>
<span class="n">autodoc_default_options</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">&#39;members&#39;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
<span class="s1">&#39;member-order&#39;</span><span class="p">:</span> <span class="s1">&#39;bysource&#39;</span><span class="p">,</span>
<span class="s1">&#39;special-members&#39;</span><span class="p">:</span> <span class="s1">&#39;__init__&#39;</span><span class="p">,</span>
<span class="s1">&#39;undoc-members&#39;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
<span class="s1">&#39;exclude-members&#39;</span><span class="p">:</span> <span class="s1">&#39;__weakref__&#39;</span>
<span class="p">}</span>
<span class="n">autodoc_typehints</span> <span class="o">=</span> <span class="s1">&#39;description&#39;</span>
<span class="n">napoleon_google_docstring</span> <span class="o">=</span> <span class="kc">True</span>
<span class="n">napoleon_numpy_docstring</span> <span class="o">=</span> <span class="kc">False</span>
<span class="n">html_theme</span> <span class="o">=</span> <span class="s1">&#39;sphinx_rtd_theme&#39;</span>
</pre></div>
</div>
</section>
<section id="id7">
<h3><a class="toc-backref" href="#id36" role="doc-backlink">2.4 Настройка главной страницы</a><a class="headerlink" href="#id7" title="Ссылка на этот заголовок"></a></h3>
<p>Обновите <code class="docutils literal notranslate"><span class="pre">docs/source/index.rst</span></code>:</p>
<div class="highlight-rst notranslate"><div class="highlight"><pre><span></span><span class="gh">Документация проекта</span>
<span class="gh">====================</span>
<span class="p">..</span> <span class="ow">toctree</span><span class="p">::</span>
<span class="nc">:maxdepth:</span> 3
<span class="nc">:caption:</span> Содержание:
modules
<span class="gh">Инструкции и процессы</span>
<span class="gh">---------------------</span>
<span class="p">..</span> <span class="ow">toctree</span><span class="p">::</span>
<span class="nc">:maxdepth:</span> 2
<span class="nc">:caption:</span> Документация и руководства:
sphinx_guide
<span class="gh">Описание</span>
<span class="gh">-----------</span>
Основная документация проекта.
<span class="gh">Индексы</span>
<span class="gh">=======</span>
<span class="m">*</span> <span class="na">:ref:</span><span class="nv">`genindex`</span>
<span class="m">*</span> <span class="na">:ref:</span><span class="nv">`modindex`</span>
<span class="m">*</span> <span class="na">:ref:</span><span class="nv">`search`</span>
</pre></div>
</div>
</section>
</section>
<section id="id8">
<h2><a class="toc-backref" href="#id37" role="doc-backlink">3 Работа с существующим проектом</a><a class="headerlink" href="#id8" title="Ссылка на этот заголовок"></a></h2>
<p><strong>Примечание:</strong> Для работы с существующим проектом требуется установка Sphinx на локальной машине.</p>
<section id="id9">
<h3><a class="toc-backref" href="#id38" role="doc-backlink">3.1 Установка зависимостей</a><a class="headerlink" href="#id9" title="Ссылка на этот заголовок"></a></h3>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># Установка Sphinx и необходимых расширений</span>
pip<span class="w"> </span>install<span class="w"> </span>sphinx<span class="w"> </span>sphinx-rtd-theme<span class="w"> </span>myst-parser
<span class="c1"># Или установка из зависимостей проекта (если настроено в pyproject.toml)</span>
pip<span class="w"> </span>install<span class="w"> </span>-e<span class="w"> </span><span class="s2">&quot;.[docs]&quot;</span>
</pre></div>
</div>
</section>
<section id="id10">
<h3><a class="toc-backref" href="#id39" role="doc-backlink">3.2 Генерация документации</a><a class="headerlink" href="#id10" title="Ссылка на этот заголовок"></a></h3>
<section id="id11">
<h4><a class="toc-backref" href="#id40" role="doc-backlink">3.2.1 Базовая генерация</a><a class="headerlink" href="#id11" title="Ссылка на этот заголовок"></a></h4>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># Генерация .rst файлов из структуры проекта</span>
sphinx-apidoc<span class="w"> </span>-o<span class="w"> </span>docs/source<span class="w"> </span>.<span class="w"> </span>-f
<span class="c1"># Сборка HTML документации</span>
sphinx-build<span class="w"> </span>-b<span class="w"> </span>html<span class="w"> </span>docs/source<span class="w"> </span>docs/build/html
</pre></div>
</div>
</section>
<section id="id12">
<h4><a class="toc-backref" href="#id41" role="doc-backlink">3.2.2 Генерация с исключениями</a><a class="headerlink" href="#id12" title="Ссылка на этот заголовок"></a></h4>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># Исключение определенных папок из документации</span>
sphinx-apidoc<span class="w"> </span>-o<span class="w"> </span>docs/source<span class="w"> </span>.<span class="w"> </span>-f<span class="w"> </span>--exclude<span class="w"> </span>tests/<span class="w"> </span>--exclude<span class="w"> </span>migrations/
</pre></div>
</div>
</section>
<section id="id13">
<h4><a class="toc-backref" href="#id42" role="doc-backlink">3.2.3 Принудительная перегенерация</a><a class="headerlink" href="#id13" title="Ссылка на этот заголовок"></a></h4>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># Принудительная перезапись существующих файлов</span>
sphinx-apidoc<span class="w"> </span>-o<span class="w"> </span>docs/source<span class="w"> </span>.<span class="w"> </span>-f<span class="w"> </span>--force
</pre></div>
</div>
</section>
</section>
<section id="id14">
<h3><a class="toc-backref" href="#id43" role="doc-backlink">3.3 Очистка документации</a><a class="headerlink" href="#id14" title="Ссылка на этот заголовок"></a></h3>
<p>Когда требуется очистка:</p>
<ul class="simple">
<li><p><strong>После удаления модулей</strong> - чтобы убрать ссылки на несуществующие файлы</p></li>
<li><p><strong>После переименования пакетов</strong> - для актуализации структуры</p></li>
<li><p><strong>При изменении архитектуры проекта</strong> - для отражения новых модулей</p></li>
<li><p><strong>При появлении предупреждений</strong> о несуществующих модулях</p></li>
</ul>
<section id="id15">
<h4><a class="toc-backref" href="#id44" role="doc-backlink">3.3.1 Команды очистки</a><a class="headerlink" href="#id15" title="Ссылка на этот заголовок"></a></h4>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># Удаление старых сгенерированных .rst файлов кроме основных</span>
rm<span class="w"> </span>docs/source/modules.rst
rm<span class="w"> </span>docs/source/pages.rst
rm<span class="w"> </span>docs/source/components.rst
<span class="c1"># Удаление всех .rst файлов кроме основных (Linux/Mac)</span>
find<span class="w"> </span>docs/source<span class="w"> </span>-name<span class="w"> </span><span class="s2">&quot;*.rst&quot;</span><span class="w"> </span>!<span class="w"> </span>-name<span class="w"> </span><span class="s2">&quot;index.rst&quot;</span><span class="w"> </span>!<span class="w"> </span>-name<span class="w"> </span><span class="s2">&quot;sphinx_guide.rst&quot;</span><span class="w"> </span>-delete
<span class="c1"># Удаление всех .rst файлов кроме основных (Windows PowerShell)</span>
Get-ChildItem<span class="w"> </span>docs/source<span class="w"> </span>-Filter<span class="w"> </span><span class="s2">&quot;*.rst&quot;</span><span class="w"> </span><span class="p">|</span><span class="w"> </span>Where-Object<span class="w"> </span><span class="o">{</span><span class="w"> </span><span class="nv">$_</span>.Name<span class="w"> </span>-notin<span class="w"> </span>@<span class="o">(</span><span class="s2">&quot;index.rst&quot;</span>,<span class="w"> </span><span class="s2">&quot;sphinx_guide.rst&quot;</span><span class="o">)</span><span class="w"> </span><span class="o">}</span><span class="w"> </span><span class="p">|</span><span class="w"> </span>Remove-Item
</pre></div>
</div>
</section>
<section id="id16">
<h4><a class="toc-backref" href="#id45" role="doc-backlink">3.3.2 Автоматизация очистки</a><a class="headerlink" href="#id16" title="Ссылка на этот заголовок"></a></h4>
<div class="highlight-makefile notranslate"><div class="highlight"><pre><span></span><span class="nf">.PHONY</span><span class="o">:</span><span class="w"> </span><span class="n">clean</span>-<span class="n">docs</span> <span class="n">rebuild</span>-<span class="n">docs</span>
<span class="nf">clean-docs</span><span class="o">:</span>
<span class="w"> </span>rm<span class="w"> </span>-rf<span class="w"> </span>docs/build/
<span class="w"> </span>find<span class="w"> </span>docs/source<span class="w"> </span>-name<span class="w"> </span><span class="s2">&quot;*.rst&quot;</span><span class="w"> </span>!<span class="w"> </span>-name<span class="w"> </span><span class="s2">&quot;index.rst&quot;</span><span class="w"> </span>!<span class="w"> </span>-name<span class="w"> </span><span class="s2">&quot;sphinx_guide.rst&quot;</span><span class="w"> </span>-delete
<span class="nf">rebuild-docs</span><span class="o">:</span><span class="w"> </span><span class="n">clean</span>-<span class="n">docs</span>
<span class="w"> </span>sphinx-apidoc<span class="w"> </span>-o<span class="w"> </span>docs/source<span class="w"> </span>.<span class="w"> </span>-f
<span class="w"> </span>sphinx-build<span class="w"> </span>-b<span class="w"> </span>html<span class="w"> </span>docs/source<span class="w"> </span>docs/build/html
</pre></div>
</div>
</section>
</section>
<section id="id17">
<h3><a class="toc-backref" href="#id46" role="doc-backlink">3.4 Сборка и деплой</a><a class="headerlink" href="#id17" title="Ссылка на этот заголовок"></a></h3>
<section id="id18">
<h4><a class="toc-backref" href="#id47" role="doc-backlink">3.4.1 Локальная сборка</a><a class="headerlink" href="#id18" title="Ссылка на этот заголовок"></a></h4>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># Базовая сборка HTML</span>
sphinx-build<span class="w"> </span>-b<span class="w"> </span>html<span class="w"> </span>docs/source<span class="w"> </span>docs/build/html
<span class="c1"># Сборка с автоматическим обновлением</span>
sphinx-autobuild<span class="w"> </span>docs/source<span class="w"> </span>docs/build/html
</pre></div>
</div>
</section>
<section id="id19">
<h4><a class="toc-backref" href="#id48" role="doc-backlink">3.4.2 Проверка качества</a><a class="headerlink" href="#id19" title="Ссылка на этот заголовок"></a></h4>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># Проверка ссылок</span>
sphinx-build<span class="w"> </span>-b<span class="w"> </span>linkcheck<span class="w"> </span>docs/source<span class="w"> </span>docs/build/linkcheck
<span class="c1"># Проверка орфографии (требуется установка sphinxcontrib-spelling)</span>
sphinx-build<span class="w"> </span>-b<span class="w"> </span>spelling<span class="w"> </span>docs/source<span class="w"> </span>docs/build/spelling
</pre></div>
</div>
</section>
<section id="id20">
<h4><a class="toc-backref" href="#id49" role="doc-backlink">3.4.3 Сборка для публикации</a><a class="headerlink" href="#id20" title="Ссылка на этот заголовок"></a></h4>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># Сборка PDF (требуется LaTeX)</span>
sphinx-build<span class="w"> </span>-b<span class="w"> </span>latex<span class="w"> </span>docs/source<span class="w"> </span>docs/build/latex
<span class="c1"># Сборка EPUB</span>
sphinx-build<span class="w"> </span>-b<span class="w"> </span>epub<span class="w"> </span>docs/source<span class="w"> </span>docs/build/epub
</pre></div>
</div>
</section>
<section id="ci-cd">
<h4><a class="toc-backref" href="#id50" role="doc-backlink">3.4.4 Настройка для CI/CD</a><a class="headerlink" href="#ci-cd" title="Ссылка на этот заголовок"></a></h4>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># Игнорирование билд-папки в Git</span>
<span class="nb">echo</span><span class="w"> </span><span class="s2">&quot;docs/_build/html/&quot;</span><span class="w"> </span>&gt;&gt;<span class="w"> </span>.gitignore
<span class="nb">echo</span><span class="w"> </span><span class="s2">&quot;docs/_build/latex/&quot;</span><span class="w"> </span>&gt;&gt;<span class="w"> </span>.gitignore
</pre></div>
</div>
</section>
</section>
</section>
<section id="mkdocs-sphinx">
<h2><a class="toc-backref" href="#id51" role="doc-backlink">4 Конвертация контента из MkDocs в Sphinx</a><a class="headerlink" href="#mkdocs-sphinx" title="Ссылка на этот заголовок"></a></h2>
<section id="id21">
<h3><a class="toc-backref" href="#id52" role="doc-backlink">4.1 Текст</a><a class="headerlink" href="#id21" title="Ссылка на этот заголовок"></a></h3>
<p><strong>MkDocs (markdown):</strong></p>
<div class="highlight-markdown notranslate"><div class="highlight"><pre><span></span><span class="gh"># Заголовок</span>
Текст с <span class="gs">**жирным**</span> шрифтом.
<span class="k">-</span><span class="w"> </span>Элемент списка 1
<span class="k">-</span><span class="w"> </span>Элемент списка 2
</pre></div>
</div>
<p><strong>Sphinx (reStructuredText):</strong></p>
<div class="highlight-rst notranslate"><div class="highlight"><pre><span></span><span class="gh">Заголовок</span>
<span class="gh">=========</span>
Текст с <span class="gs">**жирным**</span> шрифтом.
<span class="m">*</span> Элемент списка 1
<span class="m">*</span> Элемент списка 2
</pre></div>
</div>
</section>
<section id="id22">
<h3><a class="toc-backref" href="#id53" role="doc-backlink">4.2 Таблицы</a><a class="headerlink" href="#id22" title="Ссылка на этот заголовок"></a></h3>
<p><strong>MkDocs:</strong></p>
<div class="highlight-markdown notranslate"><div class="highlight"><pre><span></span>| Заголовок 1 | Заголовок 2 |
|-------------|-------------|
| Данные 1 | Данные 2 |
</pre></div>
</div>
<p><strong>Sphinx:</strong></p>
<div class="highlight-rst notranslate"><div class="highlight"><pre><span></span>+-------------+-------------+
<span class="o">|</span> Заголовок 1 | Заголовок 2 |
+=============+=============+
<span class="o">|</span> Данные 1 | Данные 2 |
+-------------+-------------+
</pre></div>
</div>
</section>
</section>
<section id="id23">
<h2><a class="toc-backref" href="#id54" role="doc-backlink">5 Особенности Sphinx</a><a class="headerlink" href="#id23" title="Ссылка на этот заголовок"></a></h2>
<section id="docstrings">
<h3><a class="toc-backref" href="#id55" role="doc-backlink">5.1 Поддержка docstrings</a><a class="headerlink" href="#docstrings" title="Ссылка на этот заголовок"></a></h3>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="k">def</span><span class="w"> </span><span class="nf">my_function</span><span class="p">(</span><span class="n">param1</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">param2</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Краткое описание функции.</span>
<span class="sd"> Args:</span>
<span class="sd"> param1: Описание параметра 1</span>
<span class="sd"> param2: Описание параметра 2</span>
<span class="sd"> Returns:</span>
<span class="sd"> bool: Описание возвращаемого значения</span>
<span class="sd"> Example:</span>
<span class="sd"> &gt;&gt;&gt; my_function(&quot;test&quot;, 5)</span>
<span class="sd"> True</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="kc">True</span>
</pre></div>
</div>
</section>
<section id="id24">
<h3><a class="toc-backref" href="#id56" role="doc-backlink">5.2 Кастомные директивы</a><a class="headerlink" href="#id24" title="Ссылка на этот заголовок"></a></h3>
<div class="highlight-rst notranslate"><div class="highlight"><pre><span></span><span class="p">..</span> <span class="ow">note</span><span class="p">::</span>
Это важное примечание.
<span class="p">..</span> <span class="ow">warning</span><span class="p">::</span>
Это предупреждение.
<span class="p">..</span> <span class="ow">code-block</span><span class="p">::</span> <span class="k">python</span>
<span class="k">def</span><span class="w"> </span><span class="nf">example</span><span class="p">():</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Hello Sphinx!&quot;</span><span class="p">)</span>
</pre></div>
</div>
</section>
</section>
<section id="id25">
<h2><a class="toc-backref" href="#id57" role="doc-backlink">6 Решение проблем</a><a class="headerlink" href="#id25" title="Ссылка на этот заголовок"></a></h2>
<section id="id26">
<h3><a class="toc-backref" href="#id58" role="doc-backlink">6.1 Проблема: Модули не находятся</a><a class="headerlink" href="#id26" title="Ссылка на этот заголовок"></a></h3>
<p><strong>Решение:</strong> Проверьте <code class="docutils literal notranslate"><span class="pre">sys.path</span></code> в <code class="docutils literal notranslate"><span class="pre">conf.py</span></code></p>
</section>
<section id="id27">
<h3><a class="toc-backref" href="#id59" role="doc-backlink">6.2 Проблема: Не генерируются docstrings</a><a class="headerlink" href="#id27" title="Ссылка на этот заголовок"></a></h3>
<p><strong>Решение:</strong> Убедитесь, что установлены расширения <code class="docutils literal notranslate"><span class="pre">autodoc</span></code> и <code class="docutils literal notranslate"><span class="pre">napoleon</span></code></p>
</section>
<section id="id28">
<h3><a class="toc-backref" href="#id60" role="doc-backlink">6.3 Проблема: Тема не применяется</a><a class="headerlink" href="#id28" title="Ссылка на этот заголовок"></a></h3>
<p><strong>Решение:</strong> Проверьте <code class="docutils literal notranslate"><span class="pre">html_theme</span></code> в <code class="docutils literal notranslate"><span class="pre">conf.py</span></code></p>
</section>
</section>
<section id="id29">
<h2><a class="toc-backref" href="#id61" role="doc-backlink">7 Дополнительные возможности</a><a class="headerlink" href="#id29" title="Ссылка на этот заголовок"></a></h2>
<ul class="simple">
<li><p><strong>Autosummary</strong> - автоматические summary таблицы</p></li>
<li><p><strong>Intersphinx</strong> - ссылки между проектами</p></li>
<li><p><strong>Custom domains</strong> - домены для специфичной документации</p></li>
</ul>
</section>
<section id="version-history">
<span id="id30"></span><h2><a class="toc-backref" href="#id62" role="doc-backlink">История версий</a><a class="headerlink" href="#version-history" title="Ссылка на этот заголовок"></a></h2>
<table class="docutils align-default">
<thead>
<tr class="row-odd"><th class="head"><p>Версия</p></th>
<th class="head"><p>Дата</p></th>
<th class="head"><p>Изменения</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>1.0</p></td>
<td><p>2025-11-27</p></td>
<td><p>Первоначальная версия руководства</p></td>
</tr>
</tbody>
</table>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Нижняя область">
<a href="tools.html" class="btn btn-neutral float-left" title="tools package" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Предыдущая</a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Авторские права 2025, NPO KIS. </p>
</div>
Собрано при помощи <a href="https://www.sphinx-doc.org/">Sphinx</a> с использованием
<a href="https://github.com/readthedocs/sphinx_rtd_theme">темы,</a>
предоставленной <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

View File

@ -19,7 +19,9 @@
<script src="_static/translations.js?v=cd1d70c9"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="Алфавитный указатель" href="genindex.html" />
<link rel="search" title="Поиск" href="search.html" />
<link rel="search" title="Поиск" href="search.html" />
<link rel="next" title="Руководство по документации тестов с помощью Sphinx" href="sphinx_guide.html" />
<link rel="prev" title="pages package" href="pages.html" />
</head>
<body class="wy-body-for-nav">
@ -41,32 +43,318 @@
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Меню навигации">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">tools package</a><ul>
<li><a class="reference internal" href="#submodules">Submodules</a></li>
<li><a class="reference internal" href="#module-tools.fix_python_project">tools.fix_python_project module</a><ul>
<li><a class="reference internal" href="#tools.fix_python_project.ProjectFixer"><code class="docutils literal notranslate"><span class="pre">ProjectFixer</span></code></a><ul>
<li><a class="reference internal" href="#tools.fix_python_project.ProjectFixer.__init__"><code class="docutils literal notranslate"><span class="pre">ProjectFixer.__init__()</span></code></a></li>
<li><a class="reference internal" href="#tools.fix_python_project.ProjectFixer.remove_bom"><code class="docutils literal notranslate"><span class="pre">ProjectFixer.remove_bom()</span></code></a></li>
<li><a class="reference internal" href="#tools.fix_python_project.ProjectFixer.should_skip_init"><code class="docutils literal notranslate"><span class="pre">ProjectFixer.should_skip_init()</span></code></a></li>
<li><a class="reference internal" href="#tools.fix_python_project.ProjectFixer.needs_init_py"><code class="docutils literal notranslate"><span class="pre">ProjectFixer.needs_init_py()</span></code></a></li>
<li><a class="reference internal" href="#tools.fix_python_project.ProjectFixer.create_init_py"><code class="docutils literal notranslate"><span class="pre">ProjectFixer.create_init_py()</span></code></a></li>
<li><a class="reference internal" href="#tools.fix_python_project.ProjectFixer.process_directory"><code class="docutils literal notranslate"><span class="pre">ProjectFixer.process_directory()</span></code></a></li>
<li><a class="reference internal" href="#tools.fix_python_project.ProjectFixer.save_log"><code class="docutils literal notranslate"><span class="pre">ProjectFixer.save_log()</span></code></a></li>
<p class="caption" role="heading"><span class="caption-text">Содержание:</span></p>
<ul class="current">
<li class="toctree-l1 current"><a class="reference internal" href="modules.html">e-nms_qa_automation</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="components.html">components package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="components.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.alert_component">components.alert_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.alert_component.AlertComponent"><code class="docutils literal notranslate"><span class="pre">AlertComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.base_component">components.base_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.base_component.BaseComponent"><code class="docutils literal notranslate"><span class="pre">BaseComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.card_component">components.card_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.card_component.CardComponent"><code class="docutils literal notranslate"><span class="pre">CardComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.confirm_component">components.confirm_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.confirm_component.ConfirmComponent"><code class="docutils literal notranslate"><span class="pre">ConfirmComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.date_picker_component">components.date_picker_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.date_picker_component.DatePickerComponent"><code class="docutils literal notranslate"><span class="pre">DatePickerComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.dropdown_list_component">components.dropdown_list_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.dropdown_list_component.DropdownList"><code class="docutils literal notranslate"><span class="pre">DropdownList</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.eventbar_component">components.eventbar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.eventbar_component.EventPanelComponent"><code class="docutils literal notranslate"><span class="pre">EventPanelComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.events_container_component">components.events_container_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.events_container_component.EventsContainerComponent"><code class="docutils literal notranslate"><span class="pre">EventsContainerComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.json_container_component">components.json_container_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.json_container_component.JsonContainerComponent"><code class="docutils literal notranslate"><span class="pre">JsonContainerComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.modal_window_component">components.modal_window_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.modal_window_component.ModalWindowComponent"><code class="docutils literal notranslate"><span class="pre">ModalWindowComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.navbar_component">components.navbar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.navbar_component.NavigationPanelComponent"><code class="docutils literal notranslate"><span class="pre">NavigationPanelComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.table_component">components.table_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.table_component.TableComponent"><code class="docutils literal notranslate"><span class="pre">TableComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components.toolbar_component">components.toolbar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components.html#components.toolbar_component.ToolbarComponent"><code class="docutils literal notranslate"><span class="pre">ToolbarComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components.html#module-components">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="components_derived.html">components_derived package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.container_system_log_events">components_derived.container_system_log_events module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.container_system_log_events.SystemLogEventsContainer"><code class="docutils literal notranslate"><span class="pre">SystemLogEventsContainer</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.date_input_component">components_derived.date_input_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.date_input_component.DateInput"><code class="docutils literal notranslate"><span class="pre">DateInput</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.interactive_dropdown_list">components_derived.interactive_dropdown_list module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.interactive_dropdown_list.InteractiveDropdownList"><code class="docutils literal notranslate"><span class="pre">InteractiveDropdownList</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_add_AD_user">components_derived.modal_add_AD_user module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_add_AD_user.AddADUserModalWindow"><code class="docutils literal notranslate"><span class="pre">AddADUserModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_add_local_user">components_derived.modal_add_local_user module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_add_local_user.AddLocalUserModalWindow"><code class="docutils literal notranslate"><span class="pre">AddLocalUserModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_change_password">components_derived.modal_change_password module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_change_password.ChangePasswordModalWindow"><code class="docutils literal notranslate"><span class="pre">ChangePasswordModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_edit_user">components_derived.modal_edit_user module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_edit_user.EditUserModalWindow"><code class="docutils literal notranslate"><span class="pre">EditUserModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_view_template">components_derived.modal_view_template module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_view_template.ViewTemplateModalWindow"><code class="docutils literal notranslate"><span class="pre">ViewTemplateModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.modal_view_ztp_template">components_derived.modal_view_ztp_template module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.modal_view_ztp_template.ViewZTPTemplateModalWindow"><code class="docutils literal notranslate"><span class="pre">ViewZTPTemplateModalWindow</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.selection_bar_component">components_derived.selection_bar_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.selection_bar_component.SelectionBarComponent"><code class="docutils literal notranslate"><span class="pre">SelectionBarComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.settings_form_component">components_derived.settings_form_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.settings_form_component.SettingsFormComponent"><code class="docutils literal notranslate"><span class="pre">SettingsFormComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.sidebar_filter_component">components_derived.sidebar_filter_component module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.sidebar_filter_component.SidebarFilterComponent"><code class="docutils literal notranslate"><span class="pre">SidebarFilterComponent</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived.user_card">components_derived.user_card module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="components_derived.html#components_derived.user_card.UserCard"><code class="docutils literal notranslate"><span class="pre">UserCard</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="components_derived.html#module-components_derived">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="conftest.html">conftest module</a><ul>
<li class="toctree-l3"><a class="reference internal" href="conftest.html#conftest.pytest_sessionfinish"><code class="docutils literal notranslate"><span class="pre">pytest_sessionfinish()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="conftest.html#conftest.pytest_addoption"><code class="docutils literal notranslate"><span class="pre">pytest_addoption()</span></code></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="data.html">data package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="data.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="data.html#module-data.constants">data.constants module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="data.html#data.constants.Constants"><code class="docutils literal notranslate"><span class="pre">Constants</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="data.html#module-data.environment">data.environment module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="data.html#data.environment.Environment"><code class="docutils literal notranslate"><span class="pre">Environment</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="data.html#module-data.roles_dict">data.roles_dict module</a></li>
<li class="toctree-l3"><a class="reference internal" href="data.html#module-data">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="elements.html">elements package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="elements.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.base_element">elements.base_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.base_element.BaseElement"><code class="docutils literal notranslate"><span class="pre">BaseElement</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.button_element">elements.button_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.button_element.Button"><code class="docutils literal notranslate"><span class="pre">Button</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.checkbox_element">elements.checkbox_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.checkbox_element.Checkbox"><code class="docutils literal notranslate"><span class="pre">Checkbox</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.icon_element">elements.icon_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.icon_element.Icon"><code class="docutils literal notranslate"><span class="pre">Icon</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.tab_button_element">elements.tab_button_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.tab_button_element.TabButton"><code class="docutils literal notranslate"><span class="pre">TabButton</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.text_element">elements.text_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.text_element.Text"><code class="docutils literal notranslate"><span class="pre">Text</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.text_input_element">elements.text_input_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.text_input_element.TextInput"><code class="docutils literal notranslate"><span class="pre">TextInput</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements.tooltip_button_element">elements.tooltip_button_element module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="elements.html#elements.tooltip_button_element.TooltipButton"><code class="docutils literal notranslate"><span class="pre">TooltipButton</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="elements.html#module-elements">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="fixtures.html">fixtures package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="fixtures.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="fixtures.html#module-fixtures.pages">fixtures.pages module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.pytest_addoption"><code class="docutils literal notranslate"><span class="pre">pytest_addoption()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.browser"><code class="docutils literal notranslate"><span class="pre">browser()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.get_firefox_browser"><code class="docutils literal notranslate"><span class="pre">get_firefox_browser()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.get_chrome_browser"><code class="docutils literal notranslate"><span class="pre">get_chrome_browser()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.get_remote_chrome"><code class="docutils literal notranslate"><span class="pre">get_remote_chrome()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.get_context"><code class="docutils literal notranslate"><span class="pre">get_context()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="fixtures.html#fixtures.pages.return_back"><code class="docutils literal notranslate"><span class="pre">return_back()</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="fixtures.html#module-fixtures">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="pages.html">pages package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="pages.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.base_page">pages.base_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.base_page.BasePage"><code class="docutils literal notranslate"><span class="pre">BasePage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.current_session_tab">pages.current_session_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.current_session_tab.CurrentSessionsTab"><code class="docutils literal notranslate"><span class="pre">CurrentSessionsTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.license_tab">pages.license_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.license_tab.LicenseTab"><code class="docutils literal notranslate"><span class="pre">LicenseTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.login_page">pages.login_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.login_page.LoginPage"><code class="docutils literal notranslate"><span class="pre">LoginPage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.main_page">pages.main_page module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.main_page.MainPage"><code class="docutils literal notranslate"><span class="pre">MainPage</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.push_notifications_settings_tab">pages.push_notifications_settings_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.push_notifications_settings_tab.PushNotificationsSettingsTab"><code class="docutils literal notranslate"><span class="pre">PushNotificationsSettingsTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.service_status_tab">pages.service_status_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.service_status_tab.ServiceStatusTab"><code class="docutils literal notranslate"><span class="pre">ServiceStatusTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.session_settings_tab">pages.session_settings_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.session_settings_tab.SessionSettingsTab"><code class="docutils literal notranslate"><span class="pre">SessionSettingsTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.templates_tab">pages.templates_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.templates_tab.TemplatesTab"><code class="docutils literal notranslate"><span class="pre">TemplatesTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.users_tab">pages.users_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.users_tab.UsersTab"><code class="docutils literal notranslate"><span class="pre">UsersTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.ztp_config_tab">pages.ztp_config_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.ztp_config_tab.ZTPConfigTab"><code class="docutils literal notranslate"><span class="pre">ZTPConfigTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages.ztp_templates_tab">pages.ztp_templates_tab module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pages.html#pages.ztp_templates_tab.ZTPTemplatesTab"><code class="docutils literal notranslate"><span class="pre">ZTPTemplatesTab</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pages.html#module-pages">Module contents</a></li>
</ul>
</li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">tools package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="#module-tools.fix_python_project">tools.fix_python_project module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#tools.fix_python_project.ProjectFixer"><code class="docutils literal notranslate"><span class="pre">ProjectFixer</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-tools.logger">tools.logger module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#tools.logger.get_logger"><code class="docutils literal notranslate"><span class="pre">get_logger()</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-tools">Module contents</a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#module-tools.logger">tools.logger module</a><ul>
<li><a class="reference internal" href="#tools.logger.get_logger"><code class="docutils literal notranslate"><span class="pre">get_logger()</span></code></a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Документация и руководства:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="sphinx_guide.html">Руководство по документации тестов с помощью Sphinx</a><ul>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id2">1 Расположение документа</a></li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id3">2 Первичная настройка для нового проекта</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id4">2.1 Подготовка зависимостей</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id5">2.2 Инициализация Sphinx</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id6">2.3 Настройка конфигурации</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id7">2.4 Настройка главной страницы</a></li>
</ul>
</li>
<li><a class="reference internal" href="#module-tools">Module contents</a></li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id8">3 Работа с существующим проектом</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id9">3.1 Установка зависимостей</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id10">3.2 Генерация документации</a><ul>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id11">3.2.1 Базовая генерация</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id12">3.2.2 Генерация с исключениями</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id13">3.2.3 Принудительная перегенерация</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id14">3.3 Очистка документации</a><ul>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id15">3.3.1 Команды очистки</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id16">3.3.2 Автоматизация очистки</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id17">3.4 Сборка и деплой</a><ul>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id18">3.4.1 Локальная сборка</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id19">3.4.2 Проверка качества</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#id20">3.4.3 Сборка для публикации</a></li>
<li class="toctree-l4"><a class="reference internal" href="sphinx_guide.html#ci-cd">3.4.4 Настройка для CI/CD</a></li>
</ul>
</li>
</ul>
</div>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#mkdocs-sphinx">4 Конвертация контента из MkDocs в Sphinx</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id21">4.1 Текст</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id22">4.2 Таблицы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id23">5 Особенности Sphinx</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#docstrings">5.1 Поддержка docstrings</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id24">5.2 Кастомные директивы</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id25">6 Решение проблем</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id26">6.1 Проблема: Модули не находятся</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id27">6.2 Проблема: Не генерируются docstrings</a></li>
<li class="toctree-l3"><a class="reference internal" href="sphinx_guide.html#id28">6.3 Проблема: Тема не применяется</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#id29">7 Дополнительные возможности</a></li>
<li class="toctree-l2"><a class="reference internal" href="sphinx_guide.html#version-history">История версий</a></li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
@ -81,6 +369,7 @@
<div role="navigation" aria-label="Навигация по страницам">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="modules.html">e-nms_qa_automation</a></li>
<li class="breadcrumb-item active">tools package</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/tools.rst.txt" rel="nofollow"> Просмотреть исходный код страницы</a>
@ -261,7 +550,10 @@ logger.debug(«Тестовое сообщение»)</p>
</div>
</div>
<footer>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Нижняя область">
<a href="pages.html" class="btn btn-neutral float-left" title="pages package" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Предыдущая</a>
<a href="sphinx_guide.html" class="btn btn-neutral float-right" title="Руководство по документации тестов с помощью Sphinx" accesskey="n" rel="next">Следующая <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>

View File

@ -92,14 +92,6 @@ components.navbar\_component module
:show-inheritance:
:undoc-members:
components.settings\_form\_component module
-------------------------------------------
.. automodule:: components.settings_form_component
:members:
:show-inheritance:
:undoc-members:
components.table\_component module
----------------------------------

View File

@ -20,6 +20,14 @@ components\_derived.date\_input\_component module
:show-inheritance:
:undoc-members:
components\_derived.interactive\_dropdown\_list module
------------------------------------------------------
.. automodule:: components_derived.interactive_dropdown_list
:members:
:show-inheritance:
:undoc-members:
components\_derived.modal\_add\_AD\_user module
-----------------------------------------------
@ -76,6 +84,14 @@ components\_derived.selection\_bar\_component module
:show-inheritance:
:undoc-members:
components\_derived.settings\_form\_component module
----------------------------------------------------
.. automodule:: components_derived.settings_form_component
:members:
:show-inheritance:
:undoc-members:
components\_derived.sidebar\_filter\_component module
-----------------------------------------------------

View File

@ -27,6 +27,24 @@
* **Фикстуры (Fixtures)** - подготовка данных
* **Утилиты (Tools)** - вспомогательные функции
Инструкции и процессы
---------------------
.. toctree::
:maxdepth: 2
:caption: Документация и руководства:
sphinx_guide
Быстрый старт
-------------
Для начала работы с проектом:
1. Установите зависимости: ``pip install -e .``
2. Запустите тесты: ``pytest tests/``
3. Соберите документацию: ``sphinx-build docs/source docs/build``
Индексы и поиск
================

View File

@ -28,14 +28,6 @@ pages.license\_tab module
:show-inheritance:
:undoc-members:
pages.location\_page module
---------------------------
.. automodule:: pages.location_page
:members:
:show-inheritance:
:undoc-members:
pages.login\_page module
------------------------
@ -52,6 +44,14 @@ pages.main\_page module
:show-inheritance:
:undoc-members:
pages.push\_notifications\_settings\_tab module
-----------------------------------------------
.. automodule:: pages.push_notifications_settings_tab
:members:
:show-inheritance:
:undoc-members:
pages.service\_status\_tab module
---------------------------------

View File

@ -0,0 +1,378 @@
Руководство по документации тестов с помощью Sphinx
====================================================
**Версия документа:** 1.0
**Дата последнего обновления:** 2025-11-27
.. contents:: Содержание
:depth: 3
:local:
1 Расположение документа
-------------------------
Данное руководство расположено в структуре проекта по пути:
.. code-block:: text
project_root/
├── docs/
│ ├── source/
│ │ ├── conf.py
│ │ ├── index.rst
│ │ ├── sphinx_guide.rst <-- Этот файл
│ │ └── modules.rst
│ └── build/
├── src/
│ └── your_package/
└── pyproject.toml
2 Первичная настройка для нового проекта
-----------------------------------------
2.1 Подготовка зависимостей
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block:: bash
# Установка Sphinx и тем
pip install sphinx sphinx-rtd-theme myst-parser
# Добавление в pyproject.toml
echo [project.optional-dependencies] >> pyproject.toml
echo docs = [ >> pyproject.toml
echo "sphinx>=8.2.3", >> pyproject.toml
echo "sphinx-rtd-theme>=2.0.0", >> pyproject.toml
echo "myst-parser>=2.0.0" >> pyproject.toml
echo ] >> pyproject.toml
2.2 Инициализация Sphinx
~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block:: bash
# Создание структуры документации
sphinx-quickstart docs --sep -p "PROJECT_NAME" -a "TEAM_NAME" -l ru --ext-autodoc --ext-viewcode --makefile --no-batchfile
2.3 Настройка конфигурации
~~~~~~~~~~~~~~~~~~~~~~~~~~
Обновите ``docs/source/conf.py``:
.. code-block:: python
import os
import sys
sys.path.insert(0, os.path.abspath('../..'))
extensions = [
'sphinx.ext.autodoc',
'sphinx.ext.napoleon',
'sphinx.ext.viewcode',
'sphinx.ext.intersphinx',
'sphinx_rtd_theme',
]
autodoc_default_options = {
'members': True,
'member-order': 'bysource',
'special-members': '__init__',
'undoc-members': True,
'exclude-members': '__weakref__'
}
autodoc_typehints = 'description'
napoleon_google_docstring = True
napoleon_numpy_docstring = False
html_theme = 'sphinx_rtd_theme'
2.4 Настройка главной страницы
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Обновите ``docs/source/index.rst``:
.. code-block:: rst
Документация проекта
====================
.. toctree::
:maxdepth: 3
:caption: Содержание:
modules
Инструкции и процессы
---------------------
.. toctree::
:maxdepth: 2
:caption: Документация и руководства:
sphinx_guide
Описание
-----------
Основная документация проекта.
Индексы
=======
* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`
3 Работа с существующим проектом
---------------------------------
**Примечание:** Для работы с существующим проектом требуется установка Sphinx на локальной машине.
3.1 Установка зависимостей
~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block:: bash
# Установка Sphinx и необходимых расширений
pip install sphinx sphinx-rtd-theme myst-parser
# Или установка из зависимостей проекта (если настроено в pyproject.toml)
pip install -e ".[docs]"
3.2 Генерация документации
~~~~~~~~~~~~~~~~~~~~~~~~~~~
3.2.1 Базовая генерация
^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: bash
# Генерация .rst файлов из структуры проекта
sphinx-apidoc -o docs/source . -f
# Сборка HTML документации
sphinx-build -b html docs/source docs/build/html
3.2.2 Генерация с исключениями
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: bash
# Исключение определенных папок из документации
sphinx-apidoc -o docs/source . -f --exclude tests/ --exclude migrations/
3.2.3 Принудительная перегенерация
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: bash
# Принудительная перезапись существующих файлов
sphinx-apidoc -o docs/source . -f --force
3.3 Очистка документации
~~~~~~~~~~~~~~~~~~~~~~~~~
Когда требуется очистка:
- **После удаления модулей** - чтобы убрать ссылки на несуществующие файлы
- **После переименования пакетов** - для актуализации структуры
- **При изменении архитектуры проекта** - для отражения новых модулей
- **При появлении предупреждений** о несуществующих модулях
3.3.1 Команды очистки
^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: bash
# Удаление старых сгенерированных .rst файлов кроме основных
rm docs/source/modules.rst
rm docs/source/pages.rst
rm docs/source/components.rst
# Удаление всех .rst файлов кроме основных (Linux/Mac)
find docs/source -name "*.rst" ! -name "index.rst" ! -name "sphinx_guide.rst" -delete
# Удаление всех .rst файлов кроме основных (Windows PowerShell)
Get-ChildItem docs/source -Filter "*.rst" | Where-Object { $_.Name -notin @("index.rst", "sphinx_guide.rst") } | Remove-Item
3.3.2 Автоматизация очистки
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: makefile
.PHONY: clean-docs rebuild-docs
clean-docs:
rm -rf docs/build/
find docs/source -name "*.rst" ! -name "index.rst" ! -name "sphinx_guide.rst" -delete
rebuild-docs: clean-docs
sphinx-apidoc -o docs/source . -f
sphinx-build -b html docs/source docs/build/html
3.4 Сборка и деплой
~~~~~~~~~~~~~~~~~~~~
3.4.1 Локальная сборка
^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: bash
# Базовая сборка HTML
sphinx-build -b html docs/source docs/build/html
# Сборка с автоматическим обновлением
sphinx-autobuild docs/source docs/build/html
3.4.2 Проверка качества
^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: bash
# Проверка ссылок
sphinx-build -b linkcheck docs/source docs/build/linkcheck
# Проверка орфографии (требуется установка sphinxcontrib-spelling)
sphinx-build -b spelling docs/source docs/build/spelling
3.4.3 Сборка для публикации
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: bash
# Сборка PDF (требуется LaTeX)
sphinx-build -b latex docs/source docs/build/latex
# Сборка EPUB
sphinx-build -b epub docs/source docs/build/epub
3.4.4 Настройка для CI/CD
^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: bash
# Игнорирование билд-папки в Git
echo "docs/_build/html/" >> .gitignore
echo "docs/_build/latex/" >> .gitignore
4 Конвертация контента из MkDocs в Sphinx
------------------------------------------
4.1 Текст
~~~~~~~~~~
**MkDocs (markdown):**
.. code-block:: markdown
# Заголовок
Текст с **жирным** шрифтом.
- Элемент списка 1
- Элемент списка 2
**Sphinx (reStructuredText):**
.. code-block:: rst
Заголовок
=========
Текст с **жирным** шрифтом.
* Элемент списка 1
* Элемент списка 2
4.2 Таблицы
~~~~~~~~~~~~
**MkDocs:**
.. code-block:: markdown
| Заголовок 1 | Заголовок 2 |
|-------------|-------------|
| Данные 1 | Данные 2 |
**Sphinx:**
.. code-block:: rst
+-------------+-------------+
| Заголовок 1 | Заголовок 2 |
+=============+=============+
| Данные 1 | Данные 2 |
+-------------+-------------+
5 Особенности Sphinx
---------------------
5.1 Поддержка docstrings
~~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block:: python
def my_function(param1: str, param2: int) -> bool:
"""
Краткое описание функции.
Args:
param1: Описание параметра 1
param2: Описание параметра 2
Returns:
bool: Описание возвращаемого значения
Example:
>>> my_function("test", 5)
True
"""
return True
5.2 Кастомные директивы
~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block:: rst
.. note::
Это важное примечание.
.. warning::
Это предупреждение.
.. code-block:: python
def example():
print("Hello Sphinx!")
6 Решение проблем
------------------
6.1 Проблема: Модули не находятся
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**Решение:** Проверьте ``sys.path`` в ``conf.py``
6.2 Проблема: Не генерируются docstrings
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**Решение:** Убедитесь, что установлены расширения ``autodoc`` и ``napoleon``
6.3 Проблема: Тема не применяется
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**Решение:** Проверьте ``html_theme`` в ``conf.py``
7 Дополнительные возможности
-----------------------------
- **Autosummary** - автоматические summary таблицы
- **Intersphinx** - ссылки между проектами
- **Custom domains** - домены для специфичной документации
.. _version-history:
История версий
--------------
+---------+------------+-----------------------------------+
| Версия | Дата | Изменения |
+=========+============+===================================+
| 1.0 | 2025-11-27 | Первоначальная версия руководства |
+---------+------------+-----------------------------------+

View File

@ -43,11 +43,14 @@ class BaseElement:
return "base element"
# Действия:
def click(self) -> None:
def click(self, force=False) -> None:
"""Выполняет клик по элементу."""
logger.info(f"Clicking {self.type_of} '{self.name}'")
self.locator.click()
if force:
self.locator.click(force=True)
else:
self.locator.click()
def get_text(self, index: int) -> str:
"""Возвращает текст элемента по указанному индексу."""
@ -55,6 +58,11 @@ class BaseElement:
logger.info(f"Get text for {self.type_of} '{self.name}'")
return self.locator.nth(index).text_content()
def get_locator(self) -> Locator:
"""Возвращает локатор элемента."""
return self.locator
def update_locator(self, new_locator: Locator) -> None:
"""Меняет значение локатора для элемента"""

View File

@ -31,4 +31,13 @@ class TabButton(BaseElement):
# (Методы действий будут добавлены по мере необходимости)
# Проверки:
# (Методы проверок будут добавлены по мере необходимости)
def is_active(self) -> bool:
""" Проверяет является ли кнопка-tab активной """
tab_locator = self.get_locator()
attributes = tab_locator.get_attribute("class")
is_active_tab = False
if "v-tabs__item--active" in attributes:
is_active_tab = True
return is_active_tab

View File

@ -67,7 +67,7 @@ class TooltipButton(BaseElement):
"""
# Наведение на элемент для отображения подсказки
self.locator.hover()
self.locator.hover(force=True)
# Получение элемента подсказки
tooltip = self.page.locator(ButtonLocators.TOOLTIP)
@ -82,3 +82,8 @@ class TooltipButton(BaseElement):
f"Текст подсказки не соответствует ожидаемому. "
f"Ожидалось: '{expected_text}', получено: '{actual_text}'"
)
def is_disabled(self) -> bool:
""" Возвращает значение, отключена ли кнопка (является скрытой) """
return self.locator.is_disabled()

View File

@ -164,6 +164,7 @@ def get_context(browser: Browser, request: FixtureRequest, start: str) -> Browse
context = browser.new_context(
# no_viewport=True,
ignore_https_errors=True,
viewport= ast.literal_eval(request.config.getoption('--s')),
locale=request.config.getoption('l')
)

469
forms/base_rack_form.py Normal file
View File

@ -0,0 +1,469 @@
"""Базовый модуль для работы с формами стойки."""
import time
from dataclasses import dataclass
from typing import Optional, List, Dict, Any, Tuple
from abc import ABC, abstractmethod
from playwright.sync_api import Page
from tools.logger import get_logger
from elements.text_input_element import TextInput
from components.base_component import BaseComponent
from components.dropdown_list_component import DropdownList
logger = get_logger("BASE_RACK_FORM")
logger.setLevel("INFO")
@dataclass
class BaseRackData:
"""Базовый класс для хранения данных стойки."""
# Основные поля
name: str = ""
serial: str = ""
inventory: str = ""
comment: str = ""
# Combobox поля
cable_entry: str = ""
state: str = ""
depth: str = ""
usize: str = ""
# Combobox поля (справочники)
owner: str = ""
service_org: str = ""
project: str = ""
class BaseRackForm(BaseComponent, ABC):
"""Базовый компонент для работы с формами стойки."""
# Маппинг текстовых полей (должен быть переопределен в наследниках)
TEXT_FIELDS_MAPPING: Dict[str, Tuple[str, str]] = {}
TEXT_FIELDS_LOCATORS: Dict[str, str] = {}
# Маппинг combobox полей (должен быть переопределен в наследниках)
COMBOBOX_FIELDS_MAPPING: Dict[str, Tuple[str, str, str]] = {}
COMBOBOX_FIELDS_LOCATORS: Dict[str, str] = {}
# Дополнительные типы полей (checkbox и т.д.) - опционально
CHECKBOX_FIELDS_MAPPING: Dict[str, Tuple[str, str]] = {}
CHECKBOX_FIELDS_LOCATORS: Dict[str, str] = {}
def __init__(self, page: Page, form_container_locator: str) -> None:
"""Инициализирует базовый компонент формы стойки.
Args:
page: Экземпляр страницы Playwright
form_container_locator: Локатор контейнера формы
"""
super().__init__(page)
self.page = page
self.form_container_locator = form_container_locator
self.content_items: Dict[str, Any] = {}
self.available_fields = None
# Инициализация полей формы
self._init_form_fields()
def _init_form_fields(self) -> None:
"""Инициализирует все поля формы."""
container_locator = self.page.locator(self.form_container_locator)
if container_locator.count() > 0:
self.available_fields = self.get_input_fields_locators(container_locator)
self._init_text_fields()
self._init_combobox_fields()
self._init_checkbox_fields()
def _init_text_fields(self) -> None:
"""Инициализирует текстовые поля формы."""
for field_label, (attr_name, widget_name) in self.TEXT_FIELDS_MAPPING.items():
locator = self.TEXT_FIELDS_LOCATORS.get(field_label)
if not locator:
continue
self._init_single_text_field(field_label, locator, widget_name)
def _init_single_text_field(self, field_label: str, locator: str, widget_name: str) -> None:
"""Инициализирует одно текстовое поле."""
try:
element = self.page.locator(locator).first
if element.count() > 0 and element.is_visible():
field_input = TextInput(self.page, element, widget_name)
self.content_items[widget_name] = field_input
logger.debug(f"Initialized text field: '{field_label}'")
except Exception as e:
logger.error(f"Error initializing text field '{field_label}': {e}")
def _init_combobox_fields(self) -> None:
"""Инициализирует combobox поля формы."""
for field_label, (attr_name, input_name, list_name) in self.COMBOBOX_FIELDS_MAPPING.items():
locator = self.COMBOBOX_FIELDS_LOCATORS.get(field_label)
if not locator:
continue
self._init_single_combobox_field(field_label, locator, input_name, list_name)
def _init_single_combobox_field(
self, field_label: str, locator: str, input_name: str, list_name: str
) -> None:
"""Инициализирует одно combobox поле."""
try:
element = self.page.locator(locator).first
if element.count() > 0 and element.is_visible():
field_input = TextInput(self.page, element, input_name)
self.content_items[input_name] = field_input
self.content_items[list_name] = DropdownList(self.page)
logger.debug(f"Initialized combobox field: '{field_label}'")
except Exception as e:
logger.error(f"Error initializing combobox field '{field_label}': {e}")
def _init_checkbox_fields(self) -> None:
"""Инициализирует checkbox поля формы (опционально)."""
if not self.CHECKBOX_FIELDS_MAPPING:
return
for field_label, (attr_name, widget_name) in self.CHECKBOX_FIELDS_MAPPING.items():
locator = self.CHECKBOX_FIELDS_LOCATORS.get(field_label)
if not locator:
continue
self._init_single_checkbox_field(field_label, locator, widget_name)
def _init_single_checkbox_field(self, field_label: str, locator: str, widget_name: str) -> None:
"""Инициализирует одно checkbox поле."""
try:
checkbox_input = self.page.locator(locator).first
if checkbox_input.count() == 0:
logger.debug(f"Checkbox '{field_label}' not found")
return
# Импортируем здесь чтобы избежать циклических импортов
from elements.checkbox_element import Checkbox
checkbox = Checkbox(self.page, checkbox_input, widget_name)
self.content_items[widget_name] = checkbox
logger.debug(f"Initialized checkbox field: '{field_label}'")
except Exception as e:
logger.error(f"Error initializing checkbox '{field_label}': {e}")
def get_content_item(self, item_name: str) -> Any:
"""Возвращает элемент контента по имени."""
return self.content_items.get(item_name)
def clear_field(self, field_name: str) -> None:
"""Очищает указанное поле."""
logger.debug(f"Clearing field: '{field_name}'")
# Проверяем, не является ли поле чекбоксом
if field_name in self.CHECKBOX_FIELDS_LOCATORS:
logger.debug(f"Field '{field_name}' is a checkbox, skipping clear operation")
return
# Получаем локатор поля
locator = self._get_field_locator(field_name)
if not locator:
logger.warning(f"Unknown field: {field_name}")
return
field_element = self.page.locator(locator).first
if field_element.count() == 0:
logger.debug(f"Field '{field_name}' not found")
return
# Очистка в зависимости от типа поля
if field_name in self.TEXT_FIELDS_LOCATORS:
self._clear_text_field(field_element, field_name)
elif field_name in self.COMBOBOX_FIELDS_LOCATORS:
self._clear_combobox_field(field_element, field_name)
def _get_field_locator(self, field_name: str) -> Optional[str]:
"""Получает локатор поля по его названию."""
if field_name in self.COMBOBOX_FIELDS_LOCATORS:
return self.COMBOBOX_FIELDS_LOCATORS[field_name]
elif field_name in self.TEXT_FIELDS_LOCATORS:
return self.TEXT_FIELDS_LOCATORS[field_name]
elif field_name in self.CHECKBOX_FIELDS_LOCATORS:
return self.CHECKBOX_FIELDS_LOCATORS[field_name]
return None
def _clear_text_field(self, field_element, field_name: str) -> None:
"""Очищает текстовое поле."""
try:
field_element.click()
field_element.page.keyboard.press("Control+A")
field_element.page.keyboard.press("Backspace")
self.wait_for_timeout(200)
logger.debug(f"Text field '{field_name}' cleared")
except Exception as e:
logger.debug(f"Could not clear text field '{field_name}': {e}")
def _clear_combobox_field(self, field_element, field_name: str) -> None:
"""Очищает combobox поле."""
try:
parent_container = field_element.locator(
"xpath=ancestor::div[contains(@class, 'v-input')]"
).first
if parent_container.count() == 0:
logger.debug(f"Parent container not found for field '{field_name}'")
return
clear_button = parent_container.locator(
".v-input__icon--clear button, .v-input__icon--append button, i.mdi-close-circle, i.mdi-close"
).first
if clear_button.count() > 0 and clear_button.is_visible():
clear_button.click()
self.wait_for_timeout(300)
logger.debug(f"Combobox field '{field_name}' cleared")
else:
logger.debug(f"Clear button not found for field '{field_name}'")
except Exception as e:
logger.debug(f"Error clearing combobox field '{field_name}': {e}")
def _scroll_to_element_in_dropdown(self, value: str) -> bool:
"""Скроллит выпадающий список до элемента с нужным текстом."""
logger.debug(f"Scrolling to find element with text: '{value}'")
dropdown_menu = self.page.locator("div.menuable__content__active").first
if dropdown_menu.count() == 0:
logger.error("Active dropdown menu not found")
return False
max_attempts = 10
attempts = 0
while attempts < max_attempts:
visible_items = dropdown_menu.locator("a.v-list__tile, div[role='listitem']").all()
if visible_items:
for item in visible_items:
item_text = item.text_content() or ""
if value in item_text:
logger.debug(f"Found element with text '{value}'")
item.scroll_into_view_if_needed()
self.wait_for_timeout(300)
return True
last_item = visible_items[-1]
last_item_text = last_item.text_content() or ""
logger.debug(f"Scrolling to last visible item: '{last_item_text}'")
last_item.scroll_into_view_if_needed()
self.wait_for_timeout(500)
else:
dropdown_menu.evaluate("(el) => el.scrollTop += 200")
self.wait_for_timeout(300)
attempts += 1
logger.warning(f"Element with text '{value}' not found after {max_attempts} attempts")
return False
def _fill_text_fields(self, rack_data: BaseRackData, results: Dict[str, int]) -> None:
"""Заполняет текстовые поля."""
for field_label, (attr_name, field_name) in self.TEXT_FIELDS_MAPPING.items():
value = getattr(rack_data, attr_name, "")
if not value or not str(value).strip():
continue
self._fill_single_text_field(field_label, field_name, value, results)
def _fill_single_text_field(
self, field_label: str, field_name: str, value: str, results: Dict[str, int]
) -> None:
"""Заполняет одно текстовое поле."""
try:
input_field = self.get_content_item(field_name)
if input_field:
input_field.input_value(value)
results["text_fields_filled"] += 1
logger.debug(f"Field '{field_label}' filled: '{value}'")
except Exception as e:
logger.error(f"Error filling field '{field_label}': {e}")
def _fill_combobox_fields(self, rack_data: BaseRackData, results: Dict[str, int]) -> None:
"""Заполняет combobox поля."""
for field_label, (attr_name, input_name, list_name) in self.COMBOBOX_FIELDS_MAPPING.items():
value = getattr(rack_data, attr_name, "")
if not value or not str(value).strip():
continue
self._fill_single_combobox_field(field_label, input_name, list_name, value, results)
def _fill_single_combobox_field(
self, field_label: str, input_name: str, list_name: str, value: str, results: Dict[str, int]
) -> None:
"""Заполняет одно combobox поле."""
try:
combobox_field = self.get_content_item(input_name)
if not combobox_field:
logger.warning(f"Field '{field_label}' input not found")
return
combobox_field.click(force=True)
self.wait_for_timeout(1000)
if not self._scroll_to_element_in_dropdown(value):
logger.error(f"Could not find element with text '{value}' after scrolling")
self.page.mouse.click(10, 10)
self.wait_for_timeout(300)
return
dropdown_menu = self.page.locator("div.menuable__content__active").first
item_locator = self._find_dropdown_item(dropdown_menu, value)
if item_locator and item_locator.count() > 0:
item_locator.scroll_into_view_if_needed()
self.wait_for_timeout(300)
item_locator.click()
results["combobox_fields_filled"] += 1
logger.debug(f"Field '{field_label}' set: '{value}'")
self.wait_for_timeout(500)
else:
logger.error(f"Item with text '{value}' not found in dropdown for field '{field_label}'")
self.page.mouse.click(10, 10)
self.wait_for_timeout(300)
except Exception as e:
logger.error(f"Error filling combobox '{field_label}': {e}")
self.page.mouse.click(10, 10)
def _find_dropdown_item(self, dropdown_menu, value: str):
"""Находит элемент в выпадающем списке."""
item_locator = dropdown_menu.locator(f"a.v-list__tile:has-text('{value}')").first
if item_locator.count() == 0:
item_locator = dropdown_menu.locator(f"span:has-text('{value}')").first
if item_locator.count() == 0:
item_locator = dropdown_menu.locator(f"div[role='listitem']:has-text('{value}')").first
return item_locator
def _fill_checkbox_fields(self, rack_data: BaseRackData, results: Dict[str, int]) -> None:
"""Заполняет checkbox поля (опционально)."""
if not hasattr(self, 'CHECKBOX_FIELDS_MAPPING'):
return
for field_label, (attr_name, widget_name) in self.CHECKBOX_FIELDS_MAPPING.items():
value = getattr(rack_data, attr_name, None)
if value is None:
continue
self._fill_single_checkbox_field(field_label, widget_name, value, results)
def _fill_single_checkbox_field(
self, field_label: str, widget_name: str, value: bool, results: Dict[str, int]
) -> None:
"""Заполняет одно checkbox поле."""
try:
checkbox = self.get_content_item(widget_name)
if not checkbox:
logger.warning(f"Checkbox '{field_label}' not found")
return
if value:
checkbox.check(force=True)
logger.debug(f"Checkbox '{field_label}' checked")
else:
checkbox.uncheck(force=True)
logger.debug(f"Checkbox '{field_label}' unchecked")
results["checkboxes_set"] += 1
except Exception as e:
logger.error(f"Error setting checkbox '{field_label}': {e}")
@abstractmethod
def fill_rack_data(self, rack_data: BaseRackData) -> Dict[str, int]:
"""Абстрактный метод для заполнения данных стойки."""
pass
def is_field_highlighted_as_error(self, field_name: str) -> bool:
"""Проверяет, подсвечено ли поле как ошибочное."""
# Для чекбоксов не проверяем ошибки
if field_name in self.CHECKBOX_FIELDS_LOCATORS:
return False
locator = self._get_field_locator(field_name)
if not locator:
return False
field_element = self.page.locator(locator).first
if field_element.count() == 0:
logger.debug(f"Field '{field_name}' not found")
return False
parent_input = field_element.locator(
"xpath=ancestor::div[contains(@class, 'v-input')]"
).first
if parent_input.count() > 0:
class_attr = parent_input.get_attribute("class") or ""
is_error = "v-input--error" in class_attr or "error--text" in class_attr
logger.debug(f"Field '{field_name}' error state: {is_error}")
return is_error
return False
def verify_required_fields_highlighted(self, field_names: List[str]) -> Dict[str, bool]:
"""Проверяет, что указанные поля подсвечены как обязательные."""
results = {}
for field_name in field_names:
results[field_name] = self.is_field_highlighted_as_error(field_name)
logger.debug(f"Field '{field_name}' highlighted: {results[field_name]}")
return results
def wait_for_field_error(self, field_name: str, timeout: int = 5000) -> bool:
"""Ожидает появления подсветки ошибки на поле."""
if field_name in self.CHECKBOX_FIELDS_LOCATORS:
return False
start_time = time.time()
while (time.time() - start_time) * 1000 < timeout:
if self.is_field_highlighted_as_error(field_name):
return True
self.wait_for_timeout(200)
return False
def get_field_value(self, field_name: str) -> Optional[str]:
"""Получает значение поля."""
# Для чекбоксов
if field_name in self.CHECKBOX_FIELDS_LOCATORS:
for field_label, (attr_name, widget_name) in self.CHECKBOX_FIELDS_MAPPING.items():
if attr_name == field_name or field_label == field_name:
checkbox = self.get_content_item(widget_name)
if checkbox:
return str(checkbox.is_checked())
return None
# Для текстовых полей
if field_name in self.TEXT_FIELDS_LOCATORS:
for field_label, (attr_name, widget_name) in self.TEXT_FIELDS_MAPPING.items():
if attr_name == field_name or field_label == field_name:
input_field = self.get_content_item(widget_name)
if input_field:
return input_field.get_input_value()
return None
# Для combobox полей
return self._get_combobox_value(field_name)
def _get_combobox_value(self, field_name: str) -> Optional[str]:
"""Получает значение combobox поля."""
locator = self.COMBOBOX_FIELDS_LOCATORS.get(field_name)
if not locator:
for field_label, (attr_name, input_name, _) in self.COMBOBOX_FIELDS_MAPPING.items():
if attr_name == field_name or field_label == field_name:
input_field = self.get_content_item(input_name)
if input_field:
selections = input_field.element.locator(
"xpath=ancestor::div[contains(@class, 'v-select__selections')]"
).first
if selections.count() > 0:
value_span = selections.locator("span").first
return value_span.text_content() or ""
return None
element = self.page.locator(locator).first
if element.count() > 0:
selections = element.locator(
"xpath=ancestor::div[contains(@class, 'v-select__selections')]"
).first
if selections.count() > 0:
value_span = selections.locator("span").first
return value_span.text_content() or ""
return None

77
forms/create_rack_form.py Normal file
View File

@ -0,0 +1,77 @@
# forms/rack_create_form.py
"""Модуль для работы с формой создания стойки."""
from dataclasses import dataclass
from typing import Dict
from playwright.sync_api import Page
from tools.logger import get_logger
from locators.rack_locators import RackLocators
from forms.base_rack_form import BaseRackForm, BaseRackData
logger = get_logger("CREATE_RACK_FORM")
@dataclass
class CreateRackData(BaseRackData):
"""Класс для хранения данных создаваемой стойки."""
pass # Используем все поля из базового класса
class CreateRackForm(BaseRackForm):
"""Компонент для работы с формой создания стойки."""
# Маппинг текстовых полей
TEXT_FIELDS_MAPPING = {
"Имя": ("name", "name_input"),
"Комментарий": ("comment", "comment_input"),
"Серийный номер": ("serial", "serial_input"),
"Инвентарный номер": ("inventory", "inventory_input"),
}
# Маппинг combobox полей
COMBOBOX_FIELDS_MAPPING = {
"Ввод кабеля": ("cable_entry", "cable_entry_input", "cable_entry_list"),
"Состояние": ("state", "state_input", "state_list"),
"Высота в юнитах": ("usize", "usize_input", "usize_list"),
"Глубина (мм)": ("depth", "depth_input", "depth_list"),
"Владелец": ("owner", "owner_input", "owner_list"),
"Обслуживающая организация": ("service_org", "service_input", "service_list"),
"Проект/Титул": ("project", "project_input", "project_list")
}
# Локаторы для текстовых полей
TEXT_FIELDS_LOCATORS = {
"Имя": RackLocators.CREATE_RACK_FORM_FIELD_NAME,
"Комментарий": RackLocators.CREATE_RACK_FORM_FIELD_COMMENT,
"Серийный номер": RackLocators.CREATE_RACK_FORM_FIELD_SERIAL,
"Инвентарный номер": RackLocators.CREATE_RACK_FORM_FIELD_INVENTORY,
}
# Локаторы для combobox полей
COMBOBOX_FIELDS_LOCATORS = {
"Высота в юнитах": RackLocators.CREATE_RACK_FORM_SELECT_USIZE,
"Глубина (мм)": RackLocators.CREATE_RACK_FORM_SELECT_DEPTH,
"Ввод кабеля": RackLocators.CREATE_RACK_FORM_SELECT_CABLE_INPUT,
"Состояние": RackLocators.CREATE_RACK_FORM_SELECT_CONDITION_TYPE,
"Владелец": RackLocators.CREATE_RACK_FORM_SELECT_OWNER,
"Обслуживающая организация": RackLocators.CREATE_RACK_FORM_SELECT_SERVICE_PROVIDER,
"Проект/Титул": RackLocators.CREATE_RACK_FORM_SELECT_PROJECT,
}
def __init__(self, page: Page) -> None:
"""Инициализирует компонент формы создания стойки."""
super().__init__(page, RackLocators.CREATE_RACK_FORM_CONTAINER)
def fill_rack_data(self, rack_data: CreateRackData) -> Dict[str, int]:
"""Заполняет поля формы создания стойки."""
results = {
"text_fields_filled": 0,
"combobox_fields_filled": 0,
}
self._fill_text_fields(rack_data, results)
self._fill_combobox_fields(rack_data, results)
logger.info(f"Filled {results['text_fields_filled']} text fields and "
f"{results['combobox_fields_filled']} combobox fields")
return results

96
forms/edit_rack_form.py Normal file
View File

@ -0,0 +1,96 @@
# forms/rack_edit_form.py
"""Модуль для работы с формой редактирования стойки."""
from dataclasses import dataclass
from typing import Optional, Dict
from playwright.sync_api import Page
from tools.logger import get_logger
from locators.rack_locators import RackLocators
from forms.base_rack_form import BaseRackForm, BaseRackData
logger = get_logger("EDIT_RACK_FORM")
@dataclass
class EditRackData(BaseRackData):
"""Класс для хранения данных редактируемой стойки."""
# Дополнительное поле для формы редактирования
allocated_power: str = ""
ventilation_panel: Optional[bool] = None
class EditRackForm(BaseRackForm):
"""Компонент для работы с формой редактирования стойки."""
# Маппинг текстовых полей
TEXT_FIELDS_MAPPING = {
"Имя": ("name", "name_input"),
"Комментарий": ("comment", "comment_input"),
"Серийный номер": ("serial", "serial_input"),
"Инвентарный номер": ("inventory", "inventory_input"),
"Выделенная мощность (Вт/ВА)": ("allocated_power", "power_input"),
}
# Маппинг combobox полей
COMBOBOX_FIELDS_MAPPING = {
"Ввод кабеля": ("cable_entry", "cable_entry_input", "cable_entry_list"),
"Состояние": ("state", "state_input", "state_list"),
"Глубина (мм)": ("depth", "depth_input", "depth_list"),
"Высота в юнитах": ("usize", "usize_input", "usize_list"),
"Владелец": ("owner", "owner_input", "owner_list"),
"Обслуживающая организация": ("service_org", "service_input", "service_list"),
"Проект/Титул": ("project", "project_input", "project_list")
}
# Маппинг checkbox полей
CHECKBOX_FIELDS_MAPPING = {
"Вентиляционная панель": ("ventilation_panel", "ventilation_checkbox"),
}
# Локаторы для текстовых полей
TEXT_FIELDS_LOCATORS = {
"Имя": RackLocators.EDIT_RACK_FORM_FIELD_NAME,
"Комментарий": RackLocators.EDIT_RACK_FORM_FIELD_COMMENT,
"Серийный номер": RackLocators.EDIT_RACK_FORM_FIELD_SERIAL,
"Инвентарный номер": RackLocators.EDIT_RACK_FORM_FIELD_INVENTORY,
"Выделенная мощность (Вт/ВА)": RackLocators.EDIT_RACK_FORM_FIELD_POWER,
}
# Локаторы для combobox полей
COMBOBOX_FIELDS_LOCATORS = {
"Ввод кабеля": RackLocators.EDIT_RACK_FORM_SELECT_CABLE_INPUT,
"Состояние": RackLocators.EDIT_RACK_FORM_SELECT_CONDITION_TYPE,
"Глубина (мм)": RackLocators.EDIT_RACK_FORM_SELECT_DEPTH,
"Высота в юнитах": RackLocators.EDIT_RACK_FORM_SELECT_USIZE,
"Владелец": RackLocators.EDIT_RACK_FORM_SELECT_OWNER,
"Обслуживающая организация": RackLocators.EDIT_RACK_FORM_SELECT_SERVICE_PROVIDER,
"Проект/Титул": RackLocators.EDIT_RACK_FORM_SELECT_PROJECT,
}
# Локаторы для checkbox полей
CHECKBOX_FIELDS_LOCATORS = {
"Вентиляционная панель": RackLocators.EDIT_RACK_FORM_CHECKBOX_VENTILATION,
}
def __init__(self, page: Page) -> None:
"""Инициализирует компонент формы редактирования стойки."""
super().__init__(page, RackLocators.EDIT_RACK_FORM)
def fill_rack_data(self, rack_data: EditRackData) -> Dict[str, int]:
"""Заполняет поля формы редактирования стойки."""
results = {
"text_fields_filled": 0,
"combobox_fields_filled": 0,
"checkboxes_set": 0
}
self._fill_text_fields(rack_data, results)
self._fill_combobox_fields(rack_data, results)
self._fill_checkbox_fields(rack_data, results)
logger.info(f"Filled {results['text_fields_filled']} text fields, "
f"{results['combobox_fields_filled']} combobox fields, "
f"{results['checkboxes_set']} checkboxes")
return results

View File

@ -0,0 +1,338 @@
"""Модуль фрейма создания дочернего элемента."""
import re
from typing import Dict, Any, Optional
from playwright.sync_api import Page, Locator
from tools.logger import get_logger
from locators.rack_locators import RackLocators
from locators.selection_bar_locators import SelectionBarLocators
from components.alert_component import AlertComponent
from components.base_component import BaseComponent
from components.toolbar_component import ToolbarComponent
from components_derived.selection_bar_component import SelectionBarComponent
from forms.create_rack_form import CreateRackForm, CreateRackData
logger = get_logger("CREATE_ELEMENT_FRAME")
logger.setLevel("INFO")
class CreateElementFrame(BaseComponent):
"""Фрейм создания дочернего элемента."""
def __init__(self, page: Page) -> None:
"""
Инициализирует фрейм создания дочернего элемента.
Args:
page (Page): Экземпляр страницы Playwright
"""
super().__init__(page)
# Инициализация формы создания стойки
self.rack_form = CreateRackForm(page)
# Инициализация компонентов
self.toolbar = ToolbarComponent(page, "Создать дочерний элемент в")
self.selection_bar = SelectionBarComponent(page, "Класс объекта учета")
self.alert = AlertComponent(page)
# Кнопка "Добавить" - первая кнопка в тулбаре фрейма создания
add_button_locator = self.page.get_by_role("navigation").filter(
has_text="Создать дочерний элемент в"
).get_by_role("button").nth(0)
# Кнопка "Отменить" - используем рабочий локатор
cancel_button_locator = self.page.get_by_role("navigation").filter(
has_text=re.compile('Создать дочерний элемент в')
).get_by_role("button").nth(1)
# Инициализация кнопок
self.toolbar.add_tooltip_button(add_button_locator, "add")
self.toolbar.add_tooltip_button(cancel_button_locator, "cancel")
# Делегирование методов форме создания стойки
def fill_rack_data(self, rack_data: CreateRackData) -> Dict[str, int]:
"""
Заполняет поля формы создания стойки.
Args:
rack_data: Данные для заполнения
Returns:
Словарь с результатами заполнения
"""
return self.rack_form.fill_rack_data(rack_data)
def clear_field(self, field_name: str) -> None:
"""
Очищает указанное поле формы.
Args:
field_name: Название поля для очистки
"""
self.rack_form.clear_field(field_name)
def get_field_value(self, field_name: str) -> Optional[str]:
"""
Получает значение поля формы.
Args:
field_name: Название поля
Returns:
Значение поля или None если поле не найдено
"""
return self.rack_form.get_field_value(field_name)
def is_field_highlighted_as_error(self, field_name: str) -> bool:
"""
Проверяет, подсвечено ли поле как ошибочное.
Args:
field_name: Название поля для проверки
Returns:
bool: True если поле подсвечено ошибкой
"""
return self.rack_form.is_field_highlighted_as_error(field_name)
def wait_for_field_error(self, field_name: str, timeout: int = 5000) -> bool:
"""
Ожидает появления подсветки ошибки на поле.
Args:
field_name: Название поля
timeout: Таймаут в миллисекундах
Returns:
bool: True если ошибка появилась
"""
return self.rack_form.wait_for_field_error(field_name, timeout)
# Оригинальные методы фрейма
def clear_combobox_field(self, field_name: str) -> None:
"""
Очищает combobox поле по его названию.
Args:
field_name (str): Название поля для очистки
"""
logger.debug(f"Clearing combobox field '{field_name}'...")
# Получаем контейнер формы
container_locator = self.page.locator(RackLocators.CREATE_RACK_FORM_CONTAINER).nth(1)
fields_locators = self.get_input_fields_locators(container_locator)
if field_name not in fields_locators:
logger.warning(f"Field '{field_name}' not found in form")
return
field_container = fields_locators[field_name]
field_container.scroll_into_view_if_needed()
self.wait_for_timeout(300)
if not field_container.is_visible():
logger.debug(f"Field '{field_name}' is not visible after scrolling")
return
# Ищем кнопку закрытия (крестик) внутри контейнера поля
close_button = field_container.locator("i.mdi-close").first
if close_button.count() > 0:
close_button.click(force=True)
self.wait_for_timeout(300)
logger.debug(f"Combobox field '{field_name}' cleared using close button")
else:
logger.debug(f"Close button (i.mdi-close) not found for field '{field_name}'")
def click_add_button(self) -> None:
"""Кликает на кнопку 'Добавить'."""
logger.debug("Clicking on 'Add' button...")
self.toolbar.click_button("add")
def click_cancel_button(self) -> None:
"""Кликает на кнопку 'Отменить'."""
logger.debug("Clicking on 'Cancel' button...")
self.toolbar.click_button("cancel")
def get_selected_object_class(self) -> str:
"""
Получает выбранный класс объекта учета.
Returns:
str: Выбранный класс объекта или пустая строка если ничего не выбрано
"""
return self.selection_bar.get_selection_bar_title()
def is_field_filled(self, field_name: str, container_locator: Locator = None) -> bool:
"""
Проверяет, заполнено ли combobox или текстовое поле.
Args:
field_name (str): Название поля для проверки
container_locator (Locator, optional): Локатор контейнера формы
Returns:
bool: True если поле заполнено, False в противном случае
"""
logger.debug(f"Checking if field '{field_name}' is filled...")
if container_locator is None:
container_locator = self.page.locator(RackLocators.CREATE_RACK_FORM_CONTAINER).nth(1)
fields_locators = self.get_input_fields_locators(container_locator)
if field_name not in fields_locators:
logger.debug(f"Field '{field_name}' not found in fields_locators")
return False
field_container = fields_locators[field_name]
if not field_container.is_visible():
logger.debug(f"Field '{field_name}' not visible")
return False
selected_chip = field_container.locator(".v-chip").first
field_text = field_container.text_content() or ""
has_text = bool(field_text.strip())
has_chip = selected_chip.count() > 0 and selected_chip.is_visible()
if not has_chip:
input_field = field_container.locator("input").first
if input_field.count() > 0:
input_value = input_field.input_value() or ""
has_input_value = bool(input_value.strip())
logger.debug(f"Field '{field_name}' - has input value: {has_input_value}")
has_text = has_text or has_input_value
logger.debug(f"Field '{field_name}' - has chip: {has_chip}, has text: {has_text}")
return has_chip or has_text
def open_object_class_combobox(self) -> None:
"""Открывает выпадающий список combobox."""
container_locator = self.page.locator(RackLocators.CREATE_RACK_FORM_CONTAINER)
fields_locators = self.get_input_fields_locators(container_locator)
combobox_container = fields_locators.get("Класс объекта учета")
if not combobox_container:
logger.error("Combobox 'Класс объекта учета' not found")
return
menu_selector = "div.v-menu__content.menuable__content__active"
is_menu_open = self.page.locator(menu_selector).count() > 0
if not is_menu_open:
open_button = combobox_container.locator(SelectionBarLocators.OPEN_PARAMETERS_LIST_BUTTON)
open_button.click(force=True, timeout=5000)
else:
logger.debug("Combobox menu is already open")
def select_object_class(self, class_name: str) -> None:
"""
Выбирает класс объекта из выпадающего списка.
Args:
class_name (str): Название класса объекта для выбора
"""
logger.debug(f"Selecting object class: '{class_name}'...")
self.open_object_class_combobox()
self.selection_bar.select_value(class_name)
self.wait_for_timeout(300)
logger.debug(f"Object class '{class_name}' successfully selected")
# Проверки:
def check_field_error_highlighted(self, field_name: str) -> None:
"""
Проверяет, что поле подсвечено цветом ошибки (валидация не пройдена).
Args:
field_name (str): Название поля для проверки
Raises:
ValueError: Если поле не найдено в форме
AssertionError: Если поле не подсвечено ошибкой
"""
logger.debug(f"Checking field '{field_name}' for error highlighting...")
assert self.is_field_highlighted_as_error(field_name), (
f"Field '{field_name}' is not highlighted as error"
)
logger.debug(f"Field '{field_name}' is correctly highlighted with error color")
def check_field_error_not_highlighted(self, field_name: str) -> None:
"""
Проверяет, что поле НЕ подсвечено цветом ошибки (валидация успешна).
Args:
field_name (str): Название поля для проверки
Raises:
ValueError: Если поле не найдено в форме
AssertionError: Если поле подсвечено ошибкой
"""
logger.debug(f"Checking field '{field_name}' for absence of error highlighting...")
assert not self.is_field_highlighted_as_error(field_name), (
f"Field '{field_name}' is incorrectly highlighted as error"
)
logger.debug(f"Field '{field_name}' correctly has no error highlighting")
def check_object_class_selected(self, expected_class: str) -> None:
"""
Проверяет что выбран указанный класс объекта.
Args:
expected_class (str): Ожидаемый выбранный класс объекта
Raises:
AssertionError: Если выбранный класс не соответствует ожидаемому
"""
logger.debug(f"Checking selected object class: '{expected_class}'...")
self.wait_for_timeout(500)
actual_class = self.get_selected_object_class()
is_match = (expected_class.lower() in actual_class.lower() or
actual_class.lower() in expected_class.lower())
assert is_match, (
f"Selected class does not match expected. "
f"Expected: '{expected_class}', Got: '{actual_class}'"
)
logger.debug(f"Object class '{expected_class}' successfully selected (actual: '{actual_class}')")
def check_toolbar_title(self, expected_title: str) -> None:
"""
Проверяет заголовок тулбара.
Args:
expected_title (str): Ожидаемый заголовок тулбара
Raises:
AssertionError: Если заголовок не соответствует ожидаемому
"""
logger.debug(f"Checking toolbar title: '{expected_title}'...")
actual_text = self.toolbar.get_toolbar_title_text(
filter_text="Создать дочерний элемент в"
)
assert expected_title in actual_text, (
f"Title does not match. Expected: '{expected_title}', Got: '{actual_text}'"
)
logger.debug(f"Toolbar title is correct: '{actual_text}'")
def should_be_toolbar_buttons(self) -> None:
"""
Проверяет наличие и функциональность кнопок тулбара.
"""
self.toolbar.check_button_visibility("add")
self.toolbar.check_button_tooltip("add", "Добавить")
self.toolbar.check_button_visibility("cancel")
self.toolbar.check_button_tooltip("cancel", "Отменить")
self.toolbar.click_button("cancel")
self.wait_for_timeout(500)

View File

@ -0,0 +1,48 @@
"""Модуль backup_tab_locators содержит локаторы элементов страницы 'Резервное копирование'.
Класс RackLocators хранит XPath/CSS локаторы для взаимодействия
с элементами интерфейса вкладки в тестах.
"""
class BackupTabLocators:
"""Класс для хранения локаторов элементов страницы 'Резервное копирование'.
Содержит локаторы в формате XPath/CSS для поиска элементов
"""
# Кнопки на тулбаре
BUTTON_EDIT_TOOLBAR = "//button[@data-testid='BACKUP_PANEL__btn__edit']"
BUTTON_SAVE_TOOLBAR = "//button[@data-testid='BACKUP_PANEL__btn__submit']"
BUTTON_CANCEL_TOOLBAR = "//button[@data-testid='BACKUP_PANEL__btn__cancel']"
# Кнопки раздела 'Инвентаризация'
BUTTON_INVENTORY_CREATE_COPY = "//button[@data-testid='BACKUP_PANEL__btn__createCopy_cmdb']"
BUTTON_INVENTORY_UPLOAD_COPY = "//button[@data-testid='BACKUP_PANEL__btn__upload_cmdb']"
BUTTON_INVENTORY_RESTORE_COPY = "//button[@data-testid='BACKUP_PANEL__btn__restore_cmdb']"
BUTTON_INVENTORY_DOWNLOAD_COPY = "//button[@data-testid='BACKUP_PANEL__btn__download_cmdb']"
# Набор полей 'Инвентаризация/Параметры планировщика'
INPUT_INVENTORY_BACKUP_CREATION_TIME = "//input[@data-testid='BACKUP_PANEL__text-field__auto_backup_cmdb']"
INPUT_INVENTORY_BACKUP_NUMBERS = "//input[@data-testid='BACKUP_PANEL__text-field__backup_limitation_cmdb']"
# Кнопки раздела 'Потоковые данные'
BUTTON_STREAMING_DATA_CREATE_COPY = "//button[@data-testid='BACKUP_PANEL__btn__createCopy_streaming_data']"
BUTTON_STREAMING_DATA_UPLOAD_COPY = "//button[@data-testid='BACKUP_PANEL__btn__upload_streaming_data']"
BUTTON_STREAMING_DATA_RESTORE_COPY = "//button[@data-testid='BACKUP_PANEL__btn__restore_streaming_data']"
BUTTON_STREAMING_DATA_DOWNLOAD_COPY = "//button[@data-testid='BACKUP_PANEL__btn__download_streaming_data']"
# Поля ввода данных для различных категорий раздела 'Потоковые данные'
INPUT_AUDIT_TIME_PERIOD = "//input[@data-testid='BACKUP_PANEL__text-field__data_limitation_default_audit']"
INPUT_AUDIT_TIME_PERIOD_INTERVAL = "//input[@data-testid='BACKUP_PANEL__select__interval_limitation_default_audit']"
INPUT_LOGS_TIME_PERIOD = "//input[@data-testid='BACKUP_PANEL__text-field__data_limitation_logs_logs']"
INPUT_LOGS_TIME_PERIOD_INTERVAL ="//input[@data-testid='BACKUP_PANEL__select__interval_limitation_logs_logs']"
INPUT_METRICS_TIME_PERIOD = "//input[@data-testid='BACKUP_PANEL__text-field__data_limitation_metrics_metrics']"
INPUT_METRICS_TIME_PERIOD_INTERVAL = "//input[@data-testid='BACKUP_PANEL__select__interval_limitation_metrics_metrics']"
INPUT_SYSLOG_TIME_PERIOD = "//input[@data-testid='BACKUP_PANEL__text-field__data_limitation_syslog_syslog']"
INPUT_SYSLOG_TIME_PERIOD_INTERVAL = "//input[@data-testid='BACKUP_PANEL__select__interval_limitation_syslog_syslog']"
INPUT_TASKS_TIME_PERIOD = "//input[@data-testid='BACKUP_PANEL__text-field__data_limitation_tasks_tasks']"
INPUT_TASKS_TIME_PERIOD_INTERVAL = "//input[@data-testid='BACKUP_PANEL__select__interval_limitation_tasks_tasks']"
# Набор полей 'Потоковые данные/Параметры планировщика'
INPUT_STREAMING_DATA_BACKUP_CREATION_TIME = "//input[@data-testid='BACKUP_PANEL__text-field__auto_backup_streaming_data']"

View File

@ -13,6 +13,7 @@ class ButtonLocators:
- Кнопка удаления сессии
"""
BUTTON_LICENSE_UPDATE = "//div[@class='scrollarea__footer']//button"
BUTTON_LICENSE_UPDATE = "//button[@data-testid='LICENSE__btn__setLicense']"
TOOLTIP = "//div[contains(@class,'v-tooltip__content menuable__content__active')]"
BUTTON_DELETE_SESSION = "button.v-btn--icon svg[fill='#4caf50']"

View File

@ -0,0 +1,63 @@
"""Модуль certificate_locators содержит локаторы элементов вкладки 'Сертификаты'.
Класс ToolbarLocators предоставляет XPath локаторы для взаимодействия
с элементами тулбара и всплывающими подсказками.
"""
class CertificateLocators:
"""Локаторы элементов вкладки 'Сертификаты'.
Содержит XPath локаторы для поиска элементов.
"""
TOOLBAR_CASTOM = "//div[contains(@class, 'scrollarea__container')]//div[contains(@class,'toolbar_castom')]"
MAIN_CONTAINER = f"{TOOLBAR_CASTOM}/ancestor::div[4]"
MAIN_CONTAINER_HEADER = f"{MAIN_CONTAINER}//div[contains(@class, 'scrollarea__header')]"
MAIN_CONTAINER_BODY = f"{MAIN_CONTAINER}//div[contains(@class, 'scrollarea__body')]"
TAB_CERTIFICATE_CA = f"{MAIN_CONTAINER_HEADER}//a[contains(@class, 'v-tabs__item') and contains(.,'Сертификат CA')]"
TAB_REISSUE_CA = f"{MAIN_CONTAINER_HEADER}//a[contains(@class, 'v-tabs__item') and contains(., 'Пересоздание CA')]"
TAB_IMPORT_CA = f"{MAIN_CONTAINER_HEADER}//a[contains(@class, 'v-tabs__item') and contains(., 'import ca (p12)')]"
FORM_CONTAINER = f"{MAIN_CONTAINER_BODY}//div[contains(@class, 'scrollarea__body')]"
BLOCK_HEADER_TEXT = f"{FORM_CONTAINER}//span[@class='body-2']"
# поля блока 'Сертификат CA/Основная информация'
FIELD_VERSION = "//input[@data-testid='SERTIFICATES-CA__text-field__baseInfo.version']"
FIELD_SERIAL_NUMBER = "//input[@data-testid='SERTIFICATES-CA__text-field__baseInfo.serialNumber']"
FIELD_SIGNATURE_ALGORITHM = "//input[@data-testid='SERTIFICATES-CA__text-field__baseInfo.signatureAlgorithm']"
# поля блока 'Сертификат CA/Срок действия'
FIELD_VALIDITY = "//input[@data-testid='SERTIFICATES-CA__text-field__validity.status']"
FIELD_NOT_BEFORE = "//input[@data-testid='SERTIFICATES-CA__text-field__validity.notBefore']"
FIELD_NOT_AFTER = "//input[@data-testid='SERTIFICATES-CA__text-field__validity.notAfter']"
# поля блока 'Сертификат CA/Издатель / Субъект'
FIELD_CERT_NAME = "//input[@data-testid='SERTIFICATES-CA__text-field__subject.CN']"
FIELD_ORGANIZATION = "//input[@data-testid='SERTIFICATES-CA__text-field__subject.O']"
FIELD_ORG_UNIT = "//input[@data-testid='SERTIFICATES-CA__text-field__subject.OU']"
FIELD_COUNTRY = "//input[@data-testid='SERTIFICATES-CA__text-field__subject.C']"
FIELD_STATE = "//input[@data-testid='SERTIFICATES-CA__text-field__subject.ST']"
FIELD_LOC = "//input[@data-testid='SERTIFICATES-CA__text-field__subject.L']"
# поля блока 'Сертификат CA/Ключ и отпечаток'
FIELD_PUBLIC_KEY_FINGERPRINT = "//input[@data-testid='SERTIFICATES-CA__text-field__fingerprint.publicKeyFingerprint']"
FIELD_ALGORITHM = "//input[@data-testid='SERTIFICATES-CA__text-field__fingerprint.algorithm']"
FIELD_KEY_SIZE = "//input[@data-testid='SERTIFICATES-CA__text-field__fingerprint.keySize']"
# поля блока 'Пересоздание CA/Идентификация CA'
FIELD_INPUT_CERT_NAME = "//input[@data-testid='SERTIFICATES-REISSUE__text-field__publisher.cn']"
FIELD_INPUT_ORGANIZATION = "//input[@data-testid='SERTIFICATES-REISSUE__text-field__publisher.o']"
FIELD_INPUT_ORG_UNIT = "//input[@data-testid='SERTIFICATES-REISSUE__text-field__publisher.ou']"
# поля блока 'Пересоздание CA/Адрес / Местонахождение'
FIELD_INPUT_COUNTRY = "//input[@data-testid='SERTIFICATES-REISSUE__text-field__publisher.c']"
FIELD_INPUT_STATE = "//input[@data-testid='SERTIFICATES-REISSUE__text-field__publisher.st']"
FIELD_INPUT_LOC = "//input[@data-testid='SERTIFICATES-REISSUE__text-field__publisher.l']"
# поля блока 'Импорт CA'
FIELD_INPUT_PASSWORD = "//input[@data-testid='SERTIFICATES-IMPORT__text-field__pass']"
BUTTON_IMPORT = "//button[@data-testid='SERTIFICATES-IMPORT__btn__upload_p12']"

View File

@ -15,6 +15,6 @@ class ConfirmLocators:
"""
CONFIRM = "//div[contains(@class, 'v-dialog--active')]"
TITLE = "//div[@class='v-card__title']/h3"
TITLE = f"{CONFIRM}//div[contains(@class, 'v-card__title')]"
BUTTON_CLOSE = "//div[@class='vuedl-layout__closeBtn']"
TEXT = f"{CONFIRM}/div[2]/div[@class='v-card__text']"
TEXT = f"{CONFIRM}//div[contains(@class, 'v-card__text')]"

View File

@ -8,31 +8,54 @@ class EventPanelLocators:
"""Локаторы элементов панели событий.
Содержит XPath локаторы для:
TABS_BLOCK (str): блока кнопок в панели событий.
TAB_EXPAND_BUTTONS (str): блока кнопок расширения панели событий.
AREA_EVENTS (str): рабочей области страницы.
BUTTON_EXPAND_LESS (str): кнопки сжатия рабочей области отображения содержимого панели событий.
BUTTON_EXPAND_MORE (str): кнопки расширения рабочей области отображения содержимого панели событий.
TAB_STATES (str): кнопки Состояния.
TAB_ACTIONS (str): кнопки Действия.
TAB_EVENTS (str): кнопки События.
TAB_MAINTENANCE (str): кнопки Обслуживания.
TAB_SYSTEM_LOG (str): кнопки Системный журнал.
CONTAINER_SYSTEM_LOG_EVENTS (str): контейнера с событиями Системного журнала.
TAB_AUDIT (str): кнопки Аудит.
BUTTONS_EVENT (str): блока кнопок-счетчиков событий.
BUTTONS_SERVICE (str): блока кнопок, содержащего кнопки Поиска и Текущего пользователя.
AREA_EVENTS (str): рабочей области страницы.
BUTTON_USER (str): кнопки текущего пользователя.
CONTAINER_ACTIONS_TAB (str): контейнера для отображения событий вкладки Действия.
CONTAINER_EVENTS_TAB (str): контейнера для отображения событий вкладки События.
CONTAINER_MAINTENANCE_EVENTS (str): контейнера для отображения событий обслуживания.
CONTAINER_SYSTEM_LOG_EVENTS (str): контейнера с событиями Системного журнала.
CONTAINER_AUDIT_EVENTS (str): контейнера для отображения событий аудита.
"""
TABS_BLOCK = "//nav/div[@class='v-toolbar__content']/div[@class='v-toolbar__items'][1]"
TAB_EXPAND_BUTTONS = f"{TABS_BLOCK}/div[1]/div[1]/div"
TAB_STATES = f"{TABS_BLOCK}//div[@class='v-tabs']//div[@class='v-tabs__container']/div[2]"
TAB_ACTIONS = f"{TABS_BLOCK}//div[@class='v-tabs']//div[@class='v-tabs__container']/div[3]"
TAB_EVENTS = f"{TABS_BLOCK}//div[@class='v-tabs']//div[@class='v-tabs__container']/div[4]"
TAB_MAINTENANCE = f"{TABS_BLOCK}//div[@class='v-tabs']//div[@class='v-tabs__container']/div[5]"
TAB_SYSTEM_LOG = f"{TABS_BLOCK}//div[@class='v-tabs']//div[@class='v-tabs__container']/div[6]"
AREA_EVENTS = "#app > div.application--wrap > div > div:nth-child(1)"
BUTTON_EXPAND_LESS = "//button[contains(@data-testid, 'BASELINE__btn__toolbar_close')]"
BUTTON_EXPAND_MORE = "//button[contains(@data-testid, 'BASELINE__btn__toolbar_open')]"
TABS_TOOLBAR = "//div[@data-testid='BASELINE__tabs__toolbar']"
TAB_STATES = "//div[@data-testid='BASELINE__states_tab__toolbar']"
TAB_ACTIONS = "//div[@data-testid='BASELINE__actions_tab__toolbar']"
TAB_EVENTS = "//div[@data-testid='BASELINE__events_tab__toolbar']"
TAB_MAINTENANCE = "//div[@data-testid='BASELINE__service_tab__toolbar']"
TAB_SYSTEM_LOG = "//div[@data-testid='BASELINE__system journal_tab__toolbar']"
TAB_AUDIT = "//div[@data-testid='BASELINE__audit_tab__toolbar']"
BUTTONS_EVENT = "//button[@data-testid='BASELINE__btn__user']/preceding-sibling::div//span[contains(@class, 'v-tooltip')]"
BUTTON_USER = "//button[@data-testid='BASELINE__btn__user']"
TOOLBAR = "//nav[contains(@class, 'v-toolbar')]"
TABLE = "//div[@class='scrolltable']/div/table"
FILTER_TOOLBAR_BUTTON = "//div[contains(@class, 'journal-tab-button')]//span[text()='Фильтр']"
EVENTS_TOOLBAR_BUTTON = "//div[contains(@class, 'journal-tab-button')]//span[text()='События']"
MAINTENANCE_TOOLBAR_BUTTON = "//div[contains(@class, 'journal-tab-button')]//span[text()='Обслуживание']"
REAL_TIME_TOOLBAR_BUTTON = "//div[contains(@class, 'journal-tab-button')]//span[text()='Реальное время']"
ARCHIVE_TOOLBAR_BUTTON = "//div[contains(@class, 'journal-tab-button')]//span[text()='Архив']"
PDF_TOOLBAR_BUTTON = "//div[contains(@class, 'journal-tab-button')]//span[text()='pdf']"
CSV_TOOLBAR_BUTTON = "//div[contains(@class, 'journal-tab-button')]//span[text()='csv']"
CONTAINER_ACTIONS_TAB = "#app > div.application--wrap > div > div:nth-child(3) > div:nth-child(2)"
CONTAINER_EVENTS_TAB = "#app > div.application--wrap > div > div:nth-child(3) > div:nth-child(3)"
CONTAINER_MAINTENANCE_EVENTS = "#app > div.application--wrap > div > div:nth-child(3) > div:nth-child(4)"
CONTAINER_SYSTEM_LOG_EVENTS = "#app > div.application--wrap > div > div:nth-child(3) > div:nth-child(5)"
BUTTONS_EVENT = "//nav/div[@class='v-toolbar__content']/div[@class='v-toolbar__items'][2]//span[contains(@class, 'v-tooltip')]"
BUTTONS_SERVICE = "//nav/div[@class='v-toolbar__content']/div[@class='v-toolbar__items'][2]"
AREA_EVENTS = "#app > div.application--wrap > div > div:nth-child(3)"
CONTAINER_AUDIT_EVENTS = "#app > div.application--wrap > div > div:nth-child(3) > div:nth-child(6)"

View File

@ -10,10 +10,6 @@ class InputLocators:
Содержит XPath локаторы для:
LICENSE_ID_UPDATE (str): поля ввода идентификатора лицензии в подвале
"""
LICENSE_ID_UPDATE = "//div[@class='scrollarea__footer']//div[@class='v-input__control']//textarea"
LICENSE_ID_UPDATE = "//div[@class='v-input__control']//textarea[@data-testid='LICENSE__textarea__licenseKey']"

View File

@ -13,4 +13,4 @@ class JsonContainerLocators:
"""
CONTAINER = "//div[contains(@class,'jv-container')]"
SCROLL_CONTAINER = "//div[contains(@class, 'scrollarea__body')]"
SCROLL_CONTAINER = "//nav[contains(@class, 'active v-toolbar')]/../following-sibling::div//div[contains(@class,'scrollarea__body')]"

View File

@ -24,8 +24,27 @@ class ModalWindowLocators:
MODAL_WINDOW_TEXT_FIELD_INPUT = f"{MODAL_WINDOW}//input"
INPUT_FORM_USER_DATA = f"{MODAL_WINDOW}//form[@class='v-form']"
TEXT_FIELD_INPUT_FORM_USER_DATA = "div[2]/div/div/div/div/input"
# TEXT_FIELD_INPUT_FORM_USER_DATA = "xpath=div[2]/div/div/div/div/input"
MENU_INPUT_FORM_USER_DATA = "//div[contains(@class, 'menuable__content__active')]"
INPUT_FORM_USER_DATA_FIELD_NAME = "//input[@data-testid='USER_CARD__text-field__name']"
INPUT_FORM_USER_DATA_FIELD_ROLE = "//input[@data-testid='USER_CARD__select__role']"
INPUT_FORM_USER_DATA_FIELD_PASSWORD = "//input[@data-testid='USER_CARD__text-field__password']"
INPUT_FORM_USER_DATA_FIELD_COMMENT = "//input[@data-testid='USER_CARD__text-field__comment']"
INPUT_FORM_USER_DATA_FIELD_EMAIL = "//input[@data-testid='USER_CARD__text-field__email']"
INPUT_FORM_USER_DATA_FIELD_SMS = "//input[@data-testid='USER_CARD__text-field__sms_phone']"
INPUT_FORM_USER_DATA_CHECKBOX_BLOCKED = "//input[@data-testid='USER_CARD__checkbox__blocked']"
INPUT_FORM_USER_DATA_CHECKBOX_PUSH_ACTIVE = "//input[@data-testid='USER_CARD__checkbox__push_active']"
# TEXT_FIELD_INPUT_FORM_USER_DATA = "div[2]/div/div/div/div/input"
MENU_ACTIVE_INPUT_FORM = "//div[contains(@class, 'menuable__content__active')]"
MENU_ACTIVE_ITEMS = "//div[@role='list']//div[@role='listitem']"
LABEL_INPUT_FORM_USER_DATA = "//label[contains(@class,'v-label')]/span"
TASK_MODAL_WINDOW = "//div[@data-testid='BASELINE__dialog-drag__modal_0']"
CHANDE_PASSWORD_WINDOW_CURRENT_PASSWORD = "//input[@data-testid='CHANGE_PASS_CARD__text-field__current_password']"
CHANDE_PASSWORD_WINDOW_NEW_PASSWORD = "//input[@data-testid='CHANGE_PASS_CARD__text-field__new_password']"
CHANDE_PASSWORD_WINDOW_CHECK_PASSWORD = "//input[@data-testid='CHANGE_PASS_CARD__text-field__check_password']"
CHANDE_PASSWORD_WINDOW_BUTTON_SAVE = "//button[@data-testid='CHANGE_PASS_CARD__btn__save']"
CHANDE_PASSWORD_WINDOW_BUTTON_CANCEL = "//button[@data-testid='CHANGE_PASS_CARD__btn__cancel']"

View File

@ -29,3 +29,6 @@ class NavigationPanelLocators:
NODE_ROOT = "//div[contains(@class,'v-treeview-node__root')]"
NODE_CHILDREN = "//div[contains(@class,'v-treeview-node__children')]"
TOGGLE_BUTTON = "//i[contains(@class,'v-treeview-node__toggle')]"
BUTTON_EXPAND_WORKAREA = "//button[@data-testid='BASELINE__btn__leftBarMini']"
BUTTON_REDUCE_WORKAREA = "//button[@data-testid='BASELINE__btn__!leftBarMini']"

View File

@ -2,6 +2,7 @@
Класс RackLocators хранит XPath локаторы для взаимодействия
с элементами интерфейса стойки оборудования в тестах.
"""
class RackLocators:
@ -16,91 +17,162 @@ class RackLocators:
"""
# Основной контейнер вкладок стойки (верхние вкладки)
TABS_CONTAINER = "//div[@class='v-tabs__container']"
# Все элементы верхних вкладок стойки
ALL_TABS = "//div[@class='v-tabs__container']//a[contains(@class, 'v-tabs__item')]"
ALL_TABS = "//div[@data-testid='CABINET_SHOW__tabs']//a[contains(@class, 'v-tabs__item')]"
# Универсальный локатор для любой вкладки по имени
TAB_BY_NAME = "//div[@class='v-tabs__container']//a[contains(@class, 'v-tabs__item') and contains(., '{}')]"
# Конкретные вкладки по тексту
GENERAL_INFO_TAB = "//div[@class='v-tabs__container']//a[contains(@class, 'v-tabs__item') and contains(., 'Общая информация')]"
MAINTENANCE_TAB = "//div[@class='v-tabs__container']//a[contains(@class, 'v-tabs__item') and contains(., 'Обслуживание')]"
EVENTS_TAB = "//div[@class='v-tabs__container']//a[contains(@class, 'v-tabs__item') and contains(., 'События')]"
SERVICES_TAB = "//div[@class='v-tabs__container']//a[contains(@class, 'v-tabs__item') and contains(., 'Сервисы')]"
# Классы для проверки активности
ACTIVE_TAB_CLASSES = ["accent--text", "v-tabs__item--active"]
TAB_BY_NAME = ("//div[starts-with(@data-testid, 'CABINET_SHOW__') and "
"contains(@class, 'v-tabs__div')]//a[contains(@class, 'v-tabs__item') and "
".//*[contains(., '{}')]]")
# Локатор для активной вкладки
ACTIVE_TAB = "//div[@class='v-tabs__container']//a[contains(@class, 'v-tabs__item--active')]"
ACTIVE_TAB = ("//div[@data-testid='CABINET_SHOW__tabs']"
"//a[contains(@class, 'v-tabs__item--active')]")
# Контейнер формы
FORM_CONTAINER = "//div[contains(@class, 'container')]"
# ================ ЛОКАТОРЫ ДЛЯ ФОРМЫ СОЗДАНИЯ СТОЙКИ ===================
# Локаторы полей формы редактирования стойки
NAME_FIELD = "//input[@aria-label='Имя']"
SERIAL_NUMBER_FIELD = "//input[@aria-label='Серийный номер']"
INVENTORY_NUMBER_FIELD = "//input[@aria-label='Инвентарный номер']"
CABLE_ENTRY_FIELD = "//input[@aria-label='Ввод кабеля']"
STATUS_FIELD = "//input[@aria-label='Состояние']"
HEIGHT_FIELD = "//input[@aria-label='Высота в юнитах']"
OWNER_FIELD = "//input[@aria-label='Владелец']"
SERVICE_ORG_FIELD = "//input[@aria-label='Обслуживающая организация']"
PROJECT_FIELD = "//input[@aria-label='Проект/Титул']"
# Контейнер формы создания стойки
CREATE_RACK_FORM_CONTAINER = "//div[contains(@class, 'flex xs6 pa-0')]"
# Локаторы полей формы создания стойки
RACK_NAME_FIELD = "//div[contains(@class, 'container')]//label[text()='Имя']/following-sibling::input"
RACK_HEIGHT_FIELD = "//div[contains(@class, 'container')]//div[contains(@class, 'v-input__slot') and .//label[text()='Высота в юнитах']]"
RACK_DEPTH_FIELD = "//div[contains(@class, 'container')]//div[contains(@class, 'v-input__slot') and .//label[text()='Глубина (мм)']]"
RACK_SERIAL_FIELD = "//div[contains(@class, 'container')]//label[text()='Серийный номер']/following-sibling::input"
RACK_INVENTORY_FIELD = "//div[contains(@class, 'container')]//label[text()='Инвентарный номер']/following-sibling::input"
RACK_COMMENT_FIELD = "//div[contains(@class, 'container')]//label[text()='Комментарий']/following-sibling::input"
RACK_CABLE_ENTRY_FIELD = "//div[contains(@class, 'container')]//div[contains(@class, 'v-input__slot') and .//label[text()='Ввод кабеля']]"
RACK_STATE_FIELD = "//div[contains(@class, 'container')]//div[contains(@class, 'v-input__slot white') and .//label[text()='Состояние']]"
RACK_OWNER_FIELD = "//div[contains(@class, 'container')]//div[contains(@class, 'v-input__slot') and .//label[text()='Владелец']]"
RACK_SERVICE_ORG_FIELD = "//div[contains(@class, 'container')]//div[contains(@class, 'v-input__slot') and .//label[text()='Обслуживающая организация']]"
RACK_PROJECT_FIELD = "//div[contains(@class, 'container')]//div[contains(@class, 'v-input__slot') and .//label[text()='Проект/Титул']]"
# Text
CREATE_RACK_FORM_FIELD_NAME = "[data-testid='create-location-bar__text-field__name']"
CREATE_RACK_FORM_FIELD_COMMENT = "[data-testid='create-location-bar__text-field__comment']"
CREATE_RACK_FORM_FIELD_SERIAL = "[data-testid='create-location-bar__text-field__serial_number']"
CREATE_RACK_FORM_FIELD_INVENTORY = "[data-testid='create-location-bar__text-field__inventory_number']"
# Локатор для родительского контейнера поля ввода
INPUT_PARENT_CONTAINER = "xpath=./ancestor::div[contains(@class, 'v-input')]"
# Сombobox
CREATE_RACK_FORM_SELECT_USIZE = "[data-testid='create-location-bar__select__usize']"
CREATE_RACK_FORM_SELECT_DEPTH = "[data-testid='create-location-bar__select__depth']"
CREATE_RACK_FORM_SELECT_CABLE_INPUT = "[data-testid='create-location-bar__select__cable_input']"
CREATE_RACK_FORM_SELECT_CONDITION_TYPE = "[data-testid='create-location-bar__select__condition_type']"
CREATE_RACK_FORM_SELECT_OWNER = "[data-testid='create-location-bar__select__owner']"
CREATE_RACK_FORM_SELECT_SERVICE_PROVIDER = "[data-testid='create-location-bar__select__service_provider']"
CREATE_RACK_FORM_SELECT_PROJECT = "[data-testid='create-location-bar__select__project']"
# ================ ЛОКАТОРЫ ДЛЯ ФОРМЫ РЕДАКТИРОВАНИЯ СТОЙКИ ===================
# Форма редактирования стойки в модальном окне
EDIT_RACK_FORM = "[data-testid='cabinet-bar__cabinet-form']"
# Text
EDIT_RACK_FORM_FIELD_NAME = "[data-testid='cabinet-bar__main__text-field__name']"
EDIT_RACK_FORM_FIELD_COMMENT = "[data-testid='cabinet-bar__main__text-field__comment']"
EDIT_RACK_FORM_FIELD_SERIAL = "[data-testid='cabinet-bar__main__text-field__serial_number']"
EDIT_RACK_FORM_FIELD_INVENTORY = "[data-testid='cabinet-bar__main__text-field__inventory_number']"
EDIT_RACK_FORM_FIELD_POWER = "[data-testid='cabinet-bar__main__text-field__allocated_power']"
# Сombobox
EDIT_RACK_FORM_SELECT_CABLE_INPUT = "[data-testid='cabinet-bar__select_enum__select-field__cable_input']"
EDIT_RACK_FORM_SELECT_CONDITION_TYPE = "[data-testid='cabinet-bar__select_enum__select-field__condition_type']"
EDIT_RACK_FORM_SELECT_DEPTH = "[data-testid='cabinet-bar__select_enum__select-field__depth']"
EDIT_RACK_FORM_SELECT_USIZE = "[data-testid='cabinet-bar__select_enum__select-field__usize']"
EDIT_RACK_FORM_SELECT_OWNER = "[data-testid='cabinet-bar__select__select-field__owner']"
EDIT_RACK_FORM_SELECT_SERVICE_PROVIDER = "[data-testid='cabinet-bar__select__select-field__service_provider']"
EDIT_RACK_FORM_SELECT_PROJECT = "[data-testid='cabinet-bar__select__select-field__project']"
# Checkbox
EDIT_RACK_FORM_CHECKBOX_VENTILATION = "[data-testid='cabinet-bar__main__checkbox__available_ventilation_panel'] input[type='checkbox']"
EDIT_RACK_FORM_CHECKBOX_VENTILATION_LABEL = "label:has-text('Вентиляционная панель')"
EDIT_RACK_FORM_DATA_CHECKBOX_VENTILATION_CONTAINER = "[data-testid='cabinet-bar__main__checkbox__available_ventilation_panel']"
# ================ ЛОКАТОРЫ ДЛЯ ВЫПАДАЮЩИХ СПИСКОВ ===================
# Локаторы для меню combobox
MENU_ACTIVE_RACK_FORM = "//div[contains(@class, 'menuable__content__active')]"
MENU_ACTIVE_ITEMS = "//div[@role='list']//div[@role='listitem']"
# Локаторы для выпадающего меню (которые использовались в старом коде)
DROPDOWN_LIST = 'div.menuable__content__active div[role="list"]'
DROPDOWN_ITEM_BY_TEXT = ('div.menuable__content__active '
'div[role="listitem"]:has(span:has-text("{}"))')
# CSS селекторы для ошибок валидации
ERROR_CSS_SELECTORS = ".error--text, .v-input--error"
# Локаторы для отображения сторон стойки
FRONT_SIDE_CONTAINER = "//div[contains(@class, 'cabinet') and not(contains(@class, 'back'))]"
BACK_SIDE_CONTAINER = "//div[contains(@class, 'cabinet') and contains(@class, 'back')]"
# ================ ЛОКАТОРЫ ДЛЯ СТРУКТУРЫ СТОЙКИ ===================
FRONT_SIDE_TITLE = "//span[contains(@class, 'subheading') and contains(text(), 'Лицевая сторона')]"
BACK_SIDE_TITLE = "//span[contains(@class, 'subheading') and contains(text(), 'Обратная сторона')]"
# Общий контейнер стойки (включает кнопки переключения сторон и MAIN_CONTAINER)
RACK_CONTAINER = ("//div[contains(@class, 'layout active') and "
"contains(@class, 'row') and contains(@class, 'shrink')]")
# Юниты на лицевой стороне
FRONT_SIDE_UNITS = ".cabinet:not(.back) .unit, .unit:not(.back)"
# Основной контейнер стойки (изображение стойки)
MAIN_CONTAINER = "//div[contains(@class, 'layout cabinet')]"
# Юниты на обратной стороне
BACK_SIDE_UNITS = ".cabinet.back .unit"
# Кнопки переключения сторон
FRONT_SIDE_BUTTON = "//button[@data-testid='page-cabinet__btn__mount_front']"
BACK_SIDE_BUTTON = "//button[@data-testid='page-cabinet__btn__mount_rear']"
# Локатор для всех юнитов
ALL_UNITS = ".unit"
# Локаторы для определения активной стороны
ACTIVE_SIDE_BUTTON = "//button[contains(@class, 'primary--text')]"
# Устройства на лицевой стороне
FRONT_SIDE_DEVICES = "//*[contains(@class, 'parent-class')]"
# Кнопка добавления (add_circle)
ADD_CIRCLE_BUTTON = "//i[contains(text(), 'add_circle')]"
# Устройства на обратной стороне
BACK_SIDE_DEVICES = "//*[contains(@class, 'parent-class')]"
# Все юниты на стойке
ALL_UNITS = "//div[contains(@class, 'unit')]"
# Позиции юнитов
UNIT_POSITIONS = "//div[contains(@class, 'unit-positions')]"
UNIT_POSITIONS = ("//div[contains(@class, 'headline') and "
"contains(@class, 'test-xs-center') and "
"contains(@class, 'unit-positions')]")
# Контейнер с обеими сторонами
SIDES_CONTAINER = "//div[contains(@class, 'layout row shrink fill-height ma-0 pa-0')]"
# Локатор для устройств
DEVICE_ELEMENTS = "//div[contains(@class, 'parent-class')]"
# ЛОКАТОРЫ ДЛЯ СТРУКТУРЫ СТОРОН
# Основные секции сторон
FRONT_SIDE_SECTION = "//span[contains(text(), 'Лицевая сторона')]//ancestor::div[contains(@class, 'flex shrink')]"
BACK_SIDE_SECTION = "//span[contains(text(), 'Обратная сторона')]//ancestor::div[contains(@class, 'flex shrink')]"
# Локатор для слотов в устройствах
DEVICE_SLOTS = "//div[contains(@class, 'slot')]"
# Основной контейнер стойки
MAIN_CONTAINER = "//div[contains(@class, 'layout row')]"
# Кнопка редактирования свойств стойки
EDIT_BUTTON = "//button[@data-testid='CABINET_SHOW__btn__edit']"
# Кнопка "Скрыть стойку"
HIDE_RACK_BUTTON = ("//div[@data-testid='CABINET_SHOW__div__hideCabinet' and "
"contains(@class, 'cabinet_hide_button_trigger_show')]")
# Кнопка "Показать стойку"
SHOW_RACK_BUTTON = ("//div[@data-testid='CABINET_SHOW__div__hideCabinet' and "
"contains(@class, 'cabinet_hide_button_trigger_hide')]")
# Кнопки тулбара стойки
TOOLBAR_REPLACE_BUTTON = "[data-testid='cabinet-bar__toolbar__btn__replace']"
TOOLBAR_DONE_BUTTON = "[data-testid='cabinet-bar__toolbar__btn__done']"
TOOLBAR_CLOSE_BUTTON = "[data-testid='cabinet-bar__toolbar__btn__close']"
TOOLBAR_REMOVE_BUTTON = "[data-testid='cabinet-bar__toolbar__btn__remove']"
# Диалог удаления
REMOVE_DIALOG = "[data-testid='cabinet-bar__toolbar__dialog-remove']"
# Кнопки подтверждения удаления
CONFIRM_REMOVE_YES_BUTTON = "[data-testid='cabinet-bar__card_confirmation__btn__yes']"
CONFIRM_REMOVE_NO_BUTTON = "[data-testid='cabinet-bar__card_confirmation__btn__no']"
# ================ ЛОКАТОРЫ ДЛЯ ВКЛАДОК в модальном окне редактирования ==
# Локаторы для вкладок в модальном окне редактирования
MODAL_TAB_GENERAL = "[data-testid='cabinet-bar__main_tab']"
MODAL_TAB_IMAGE = "[data-testid='cabinet-bar__photo_tab']"
MODAL_TAB_SETTINGS = "[data-testid='cabinet-bar__settings_tab']"
# ================ ЛОКАТОРЫ ДЛЯ ВКЛАДКИ "Изображение" ===================
IMAGE_UPLOAD_CONTAINER = "div.layout.column.fill-height.justify-center.align-center"
IMAGE_UPLOAD_ICON = "i.mdi-add_photo_alternate"
IMAGE_UPLOAD_INPUT = "input.button-file-upload__input[type='file']"
IMAGE_PREVIEW = "img"
IMAGE_CONTAINER = "div.layout.column.fill-height.justify-center.align-center"
# ================ ЛОКАТОРЫ ДЛЯ ВКЛАДКИ "НАСТРОЙКИ" ===================
# Контейнер вкладки "Настройки"
SETTINGS_CONTAINER = "div.layout.back.fill-height.justify-start"
SETTINGS_ACCESS_MANAGER_TITLE = "div.v-toolbar__title:has-text('Менеджер доступа')"
# Локаторы для полей правил доступа
SETTINGS_READ_RULES = "[data-testid='LOCATION_SETTINGS__select__rules.read']"
SETTINGS_WRITE_RULES = "[data-testid='LOCATION_SETTINGS__select__rules.write']"
SETTINGS_SMS_RULES = "[data-testid='LOCATION_SETTINGS__select__rules.sms']"
SETTINGS_EMAIL_RULES = "[data-testid='LOCATION_SETTINGS__select__rules.email']"
SETTINGS_PUSH_RULES = "[data-testid*='rules.push']"
# Кнопки вкладки "Настройки"
SETTINGS_CANCEL_BUTTON = "[data-testid='LOCATION_SETTINGS__btn__cancel']"

View File

@ -19,8 +19,9 @@ class SelectionBarLocators:
PARAMETERS_SELECTED = "div.v-select__selections"
# Локаторы для элементов выпадающего списка
LISTBOX = "//div[@role='listbox']"
LIST_ITEMS = "//div[@role='listbox']//div[@role='listitem']"
LIST_ACTIVE = "//div[contains(@class, 'menuable__content__active')]"
LISTBOX = "//div[@role='list']"
LIST_ITEMS = "//div[contains(@class, 'menuable__content__active')]//div[@role='list']//div[@role='listitem']"
# Локатор для родительского контейнера поля ввода
INPUT_PARENT_CONTAINER = "xpath=./ancestor::div[contains(@class, 'v-input')]"

View File

@ -18,6 +18,13 @@ class SettingsFormLocators:
SETTTINGS_FORM_SCROLL_CONTAINER = "//div[contains(@class, 'scrollarea__body')]"
SETTTINGS_FORM_TITLE = f"{SETTTINGS_FORM_SCROLL_CONTAINER}//div[contains(@class, 'v-toolbar__title')]"
SETTINGS_FORM_INPUT_FORM_CONTAINER = "//nav[contains(@class, 'active v-toolbar')]/../following-sibling::div"
SETTINGS_FORM_INPUT_FIELD = "div.v-text-field__slot > input"
SETTINGS_FORM_INPUT_VALUE_SUFFIX = ".v-text-field__suffix"
DROPDOWN_LIST = "//div[contains(@class, 'menuable__content__active')]"
SELECTED_VALUES = "//div[@class='v-select__selections']"
CLEAR_SELECTION_BUTTON = "div.v-input__icon--clear"
PUSH_NOTIFICATIONS_BUTTON_SUBMIT = "//button[@data-testid='PUSH_NOTIFICATIONS__btn__submit']"

View File

@ -9,15 +9,13 @@ class UserCardLocators:
Содержит XPath локаторы для:
CARD_USER (str): карточки текущего пользователя.
DIALOG_USER_SETTINGS (str): окна просмотра сессионных данных пользователей.
HEADER_DIALOG_USER_SETTINGS (str): строки с заголовком окна и кнопкой закрытия.
TITLE_DIALOG_USER_SETTINGS (str): заголовка окна.
TABLE_WORK_AREA (str): таблицы с сессионными данными пользователей.
BUTTON_LOGOUT (str): кнопка выхода из приложения.
BUTTON_CHANGE_PASSWORD (str): кнопка открытия окна смены пароля.
BUTTON_CLOSE (str): кнопка закрытия окна текущего пользователя.
"""
CARD_USER = "//div[@class='v-card__text']"
DIALOG_USER_SETTINGS = "//div[@class='dialog-drag']"
HEADER_DIALOG_USER_SETTINGS = "xpath=/div[@class='dialog-header']"
TITLE_DIALOG_USER_SETTINGS = "xpath=/div[@class='dialog-header']/div[@class='title']"
TABLE_WORK_AREA = "//div[@class='dialog-body']//table"
# CARD_USER = "//div[@class='v-card__text']"
CARD_USER = "//div[@data-testid='BASELINE__card__user']"
BUTTON_LOGOUT = "//button[@data-testid='BASELINE__btn__user.menu__logout']"
BUTTON_CHANGE_PASSWORD = "//button[@data-testid='BASELINE__btn__user.menu__change_password']"
BUTTON_CLOSE = "//button[@data-testid='BASELINE__btn__user.menu__close']"

1168
makers/edit_rack_maker.py Normal file

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More