docs: добавить стандартизированные docstrings для основных модулей

Добавлены полные docstrings в основные модули проекта для улучшения документации кода.
pull/1/head
Radislav 2025-07-24 08:49:16 +03:00
parent 10315ba38f
commit d975648fc0
97 changed files with 6698 additions and 7968 deletions

98
alert_component.py Normal file
View File

@ -0,0 +1,98 @@
from elements.text_element import Text
from playwright.sync_api import Page, expect
from tools.logger import get_logger
from components.base_component import BaseComponent
logger = get_logger("ALERT")
class AlertComponent(BaseComponent):
"""Компонент для работы с alert-окнами.
Поддерживает различные типы alert-окон: error, success, info, warning.
Атрибуты:
page: экземпляр страницы Playwright
alert_type: тип alert-окна (error/success/info/warning)
text: текстовый элемент сообщения alert-окна
"""
def __init__(self, page: Page, alert_type: str):
"""Инициализация компонента alert-окна.
Args:
page: экземпляр страницы Playwright
alert_type: тип alert-окна (error/success/info/warning)
Raises:
ValueError: если передан неподдерживаемый тип alert-окна
"""
super().__init__(page)
alert_types = ["error", "success", "info", "warning"]
if alert_type not in alert_types:
raise ValueError("Unsupported type of alert window")
self.alert_type = alert_type
self.text = Text(page,
f"//div[@class='v-alert {self.alert_type}']/div",
"Alert message")
# Действия:
def get_text(self) -> str:
"""Получение текста сообщения из alert-окна.
Returns:
str: текст сообщения alert-окна
"""
return self.text.get_text(0)
# Проверки:
def check_presence(self, text: str)-> None:
"""Проверка наличия alert-окна с заданным текстом.
Args:
text: текст для проверки (если пустая строка - проверяется только наличие окна)
Raises:
AssertionError: если alert-окно не найдено
"""
msg = f"No {self.alert_type} alert window on page"
if text == "":
expect(self.page.get_by_role("alert")).to_be_visible(), msg
else:
expect(
self.page.get_by_role("alert").filter(
has_text=text)).to_be_visible(), msg
def check_absence(self, text: str, timeout: int = 30000):
"""Проверка отсутствия alert-окна с заданным текстом.
Args:
text: текст для проверки
timeout: время ожидания исчезновения (в миллисекундах)
Raises:
AssertionError: если alert-окно не исчезает в течение заданного времени
"""
seconds = int(timeout / 1000)
msg = f"Alert {
self.alert_type} window should disappear after {seconds} seconds"
expect(
self.page.get_by_role("alert").filter(
has_text=text)).to_be_hidden(
timeout=timeout), msg
def check_text(self, alert_text: str):
"""Проверка точного соответствия текста в alert-окне.
Args:
alert_text: ожидаемый текст сообщения
Raises:
AssertionError: если текст не соответствует ожидаемому
"""
self.text.check_have_text(
alert_text, f"Unexpected message in alert {
self.alert_type} window")

View File

@ -1,3 +1,9 @@
"""Модуль для работы с компонентом alert-окна в Playwright.
Содержит класс AlertComponent для взаимодействия с различными типами
alert-окон (error, success, info, warning) и проверки их состояния.
"""
from playwright.sync_api import Page, expect
from tools.logger import get_logger
from elements.text_element import Text
@ -7,25 +13,21 @@ logger = get_logger("ALERT")
class AlertComponent(BaseComponent):
"""Компонент для работы с alert-окнами.
"""Компонент для работы с alert-окнами Playwright.
Поддерживает различные типы alert-окон: error, success, info, warning.
Атрибуты:
page: экземпляр страницы Playwright
alert_type: тип alert-окна (error/success/info/warning)
text: текстовый элемент сообщения alert-окна
Поддерживает типы: error, success, info, warning.
Позволяет проверять наличие, отсутствие и текст сообщений.
"""
def __init__(self, page: Page, alert_type: str):
"""Инициализация компонента alert-окна.
"""Инициализирует компонент alert-окна.
Args:
page: экземпляр страницы Playwright
alert_type: тип alert-окна (error/success/info/warning)
page: Экземпляр страницы Playwright.
alert_type: Тип alert-окна (error/success/info/warning).
Raises:
ValueError: если передан неподдерживаемый тип alert-окна
ValueError: Если передан неподдерживаемый тип alert-окна.
"""
super().__init__(page)
@ -37,25 +39,24 @@ class AlertComponent(BaseComponent):
self.alert_type = alert_type
self.text = Text(page, f"//div[@class='v-alert {self.alert_type}']/div", "Alert message")
# Действия:
def get_text(self) -> str:
"""Получение текста сообщения из alert-окна.
"""Возвращает текст сообщения из alert-окна.
Returns:
str: текст сообщения alert-окна
str: Текст сообщения.
"""
return self.text.get_text(0)
# Проверки:
def check_alert_presence(self, text: str):
"""Проверка наличия alert-окна с заданным текстом.
"""Проверяет наличие alert-окна с заданным текстом.
Args:
text: текст для проверки (если пустая строка - проверяется только наличие окна)
text: Текст для проверки. Если пустая строка - проверяет только
наличие окна.
Raises:
AssertionError: если alert-окно не найдено
AssertionError: Если alert-окно не найдено.
"""
msg = f"No {self.alert_type} alert window on page"
@ -65,28 +66,29 @@ class AlertComponent(BaseComponent):
expect(self.page.get_by_role("alert").filter(has_text=text)).to_be_visible(), msg
def check_alert_absence(self, text: str, timeout: int = 30000):
"""Проверка отсутствия alert-окна с заданным текстом.
"""Проверяет отсутствие alert-окна с заданным текстом.
Args:
text: текст для проверки
timeout: время ожидания исчезновения (в миллисекундах)
text: Текст для проверки.
timeout: Время ожидания исчезновения (мс).
Raises:
AssertionError: если alert-окно не исчезает в течение заданного времени
AssertionError: Если окно не исчезает в течение заданного времени.
"""
seconds = int(timeout/1000)
msg = f"Alert {self.alert_type} window should disappear after {seconds} seconds"
expect(self.page.get_by_role("alert").filter(has_text=text)).to_be_hidden(timeout=timeout), msg
def check_text(self, alert_text: str):
"""Проверка точного соответствия текста в alert-окне.
"""Проверяет точное соответствие текста в alert-окне.
Args:
alert_text: ожидаемый текст сообщения
alert_text: Ожидаемый текст сообщения.
Raises:
AssertionError: если текст не соответствует ожидаемому
AssertionError: Если текст не соответствует ожидаемому.
"""
self.text.check_have_text(alert_text,
f"Unexpected message in alert {self.alert_type} window")
f"Unexpected message in alert {self.alert_type} window")

View File

@ -1,3 +1,8 @@
"""Базовый модуль для работы с компонентами страницы.
Содержит базовый класс для взаимодействия с элементами страницы через Playwright.
"""
from playwright.sync_api import Page, Locator, expect
from tools.logger import get_logger
@ -11,17 +16,15 @@ class BaseComponent:
- получение локаторов
- проверка видимости элементов
- работа с прокруткой
Атрибуты:
page: экземпляр страницы Playwright
"""
def __init__(self, page: Page):
"""Инициализация базового компонента.
Args:
page: экземпляр страницы Playwright
page: экземпляр страницы Playwright.
"""
self.page = page
# Действия:
@ -29,14 +32,15 @@ class BaseComponent:
"""Получение объекта Locator из строки или существующего Locator.
Args:
locator: строка с CSS/XPath селектором или объект Locator
locator: строка с CSS/XPath селектором или объект Locator.
Returns:
Locator: объект для работы с элементом
Locator: объект для работы с элементом.
Raises:
TypeError: если передан некорректный тип локатора
TypeError: если передан некорректный тип локатора.
"""
if isinstance(locator, Locator):
return locator
elif isinstance(locator, str):
@ -55,53 +59,57 @@ class BaseComponent:
# return elements
# Проверки:
def check_presence(self, locator, msg):
def check_presence(self, locator: str | Locator, msg: str) -> None:
"""Проверка видимости элемента на странице.
Args:
locator: локатор элемента (строка или объект Locator)
msg: сообщение об ошибке при неудачной проверке
locator: локатор элемента (строка или объект Locator).
msg: сообщение об ошибке при неудачной проверке.
Raises:
AssertionError: если элемент не виден на странице
AssertionError: если элемент не виден на странице.
"""
loc = self.get_locator(locator)
expect(loc).to_be_visible(visible=True, timeout=12000), msg
def is_scrollable_vertically(self, locator) -> bool:
def is_scrollable_vertically(self, locator: str | Locator) -> bool:
"""Проверка возможности вертикальной прокрутки элемента.
Args:
locator: локатор элемента
locator: локатор элемента.
Returns:
bool: True если элемент можно прокрутить вертикально
bool: True если элемент можно прокрутить вертикально.
"""
loc = self.get_locator(locator)
return loc.evaluate("el => el.scrollHeight > el.clientHeight")
def is_scrollable_horizontally(self, locator) -> bool:
def is_scrollable_horizontally(self, locator: str | Locator) -> bool:
"""Проверка возможности горизонтальной прокрутки элемента.
Args:
locator: локатор элемента
locator: локатор элемента.
Returns:
bool: True если элемент можно прокрутить горизонтально
bool: True если элемент можно прокрутить горизонтально.
"""
loc = self.get_locator(locator)
return loc.evaluate("el => el.scrollWidth > el.clientWidth")
# Методы прокрутки:
def scroll_up(self, locator):
def scroll_up(self, locator: str | Locator) -> None:
"""Прокрутка элемента вверх.
Args:
locator: локатор элемента
locator: локатор элемента.
Raises:
AssertionError: если прокрутка не выполнена до конца
AssertionError: если прокрутка не выполнена до конца.
"""
loc = self.get_locator(locator)
loc.evaluate("el => el.scrollTo(0, 0)")
loc.wait_for(timeout=2000)
@ -110,15 +118,16 @@ class BaseComponent:
scroll_position = loc.evaluate("el => el.scrollTop")
assert scroll_position == 0, "Invalid postion after scroll up"
def scroll_down(self, locator):
def scroll_down(self, locator: str | Locator) -> None:
"""Прокрутка элемента вниз.
Args:
locator: локатор элемента
locator: локатор элемента.
Raises:
AssertionError: если прокрутка не выполнена до конца
AssertionError: если прокрутка не выполнена до конца.
"""
loc = self.get_locator(locator)
loc.evaluate("el => el.scrollTo(0, el.scrollHeight)")
loc.wait_for(timeout=2000)
@ -127,15 +136,16 @@ class BaseComponent:
scroll_position = loc.evaluate("el => el.scrollTop")
assert scroll_position > 0, "Invalid postion after scroll down"
def scroll_left(self, locator):
def scroll_left(self, locator: str | Locator) -> None:
"""Прокрутка элемента влево.
Args:
locator: локатор элемента
locator: локатор элемента.
Raises:
AssertionError: если прокрутка не выполнена до конца
AssertionError: если прокрутка не выполнена до конца.
"""
loc = self.get_locator(locator)
width = loc.evaluate("el => el.scrollWidth")
@ -148,15 +158,16 @@ class BaseComponent:
scroll_position = loc.evaluate("el => el.scrollLeft")
assert scroll_position == 0, "Invalid postion after scroll left"
def scroll_right(self, locator):
def scroll_right(self, locator: str | Locator) -> None:
"""Прокрутка элемента вправо.
Args:
locator: локатор элемента
locator: локатор элемента.
Raises:
AssertionError: если прокрутка не выполнена до конца
AssertionError: если прокрутка не выполнена до конца.
"""
loc = self.get_locator(locator)
width = loc.evaluate("el => el.scrollWidth")

View File

@ -1,3 +1,8 @@
"""Модуль компонента карточки пользователя.
Содержит класс для работы с карточкой пользователя через Playwright.
"""
from playwright.sync_api import Page
from tools.logger import get_logger
from elements.button_element import Button
@ -9,19 +14,16 @@ logger = get_logger("USER_CARD")
class CardComponent(BaseComponent):
"""Компонент карточки пользователя.
Предоставляет методы для взаимодействия с элементами карточки пользователя.
Атрибуты:
page: экземпляр страницы Playwright
logout_button: кнопка выхода из системы
Предоставляет методы для взаимодействия с элементами карточки.
"""
def __init__(self, page: Page):
"""Инициализация компонента карточки пользователя.
"""Инициализирует компонент карточки пользователя.
Args:
page: экземпляр страницы Playwright
page: Экземпляр страницы Playwright.
"""
super().__init__(page)
self.logout_button = Button(
@ -32,10 +34,11 @@ class CardComponent(BaseComponent):
# Действия:
def click_logout_button(self):
"""Нажатие кнопки выхода из системы.
"""Нажимает кнопку выхода из системы.
Выполняет клик по кнопке 'Выйти' в карточке пользователя.
"""
self.logout_button.click()
# Проверки:

View File

@ -1,3 +1,9 @@
"""Модуль компонента окна подтверждения действий.
Содержит класс ConfirmComponent для взаимодействия с окном подтверждения,
включая кнопки подтверждения, отмены и закрытия, а также проверки текста.
"""
from playwright.sync_api import Page
from tools.logger import get_logger
from locators.confirm_locators import ConfirmLocators
@ -12,6 +18,14 @@ class ConfirmComponent(BaseComponent):
"""Компонент окна подтверждения действий."""
def __init__(self, page: Page, cancel_button_text: str, allow_button_text: str):
"""Инициализация компонента.
Args:
page: Экземпляр страницы Playwright.
cancel_button_text: Текст кнопки отмены.
allow_button_text: Текст кнопки подтверждения.
"""
super().__init__(page)
self.title = Text(page, ConfirmLocators.TITLE, "confirm title")
@ -31,22 +45,37 @@ class ConfirmComponent(BaseComponent):
# Действия:
def click_allow_button(self) -> None:
"""Нажатие кнопки подтверждения действия."""
"""Нажимает кнопку подтверждения действия."""
self.allow_button.click()
def click_cancel_button(self) -> None:
"""Нажатие кнопки отмены действия."""
"""Нажимает кнопку отмены действия."""
self.cancel_button.click()
def click_close_button(self) -> None:
"""Нажатие кнопки закрытия окна подтверждения."""
"""Нажимает кнопку закрытия окна подтверждения."""
self.close_button.click()
# Проверки:
def check_title(self, title: str, msg: str) -> None:
"""Проверка текста заголовка окна подтверждения."""
"""Проверяет текст заголовка окна подтверждения.
Args:
title: Ожидаемый текст заголовка.
msg: Сообщение при ошибке.
"""
self.title.check_have_text(title, msg)
def check_text(self, text: str, msg: str) -> None:
"""Проверка текста сообщения в окне подтверждения."""
"""Проверяет текст сообщения в окне подтверждения.
Args:
text: Ожидаемый текст сообщения.
msg: Сообщение при ошибке.
"""
self.text.check_have_text(text, msg)

View File

@ -1,3 +1,9 @@
"""Модуль для работы с JSON-контейнерами на веб-страницах.
Содержит компонент для чтения и проверки JSON-данных в контейнерах.
Использует playwright для взаимодействия с элементами страницы.
"""
import json
import jsondiff
from playwright.sync_api import Page
@ -10,43 +16,46 @@ logger = get_logger("JSON_CONTAINER")
class JsonContainerComponent(BaseComponent):
"""Компонент для работы с JSON-данными на странице.
Предоставляет методы для чтения и проверки JSON-данных,
отображаемых в специальных контейнерах на странице.
Атрибуты:
page: экземпляр страницы Playwright
Предоставляет методы чтения и проверки JSON-данных в контейнерах.
"""
def __init__(self, page: Page):
"""Инициализация JSON-контейнера.
"""Инициализирует JSON-контейнер.
Args:
page: экземпляр страницы Playwright
page: Экземпляр страницы Playwright.
"""
super().__init__(page)
# Действия:
def read_data(self, locator):
"""Чтение и форматирование JSON-данных из указанного локатора.
"""Читает и форматирует JSON-данные из указанного локатора.
Args:
locator: локатор элемента, содержащего JSON-данные
locator: Локатор элемента с JSON-данными.
Returns:
dict: распарсенный JSON-объект
dict: Распарсенный JSON-объект.
Raises:
json.JSONDecodeError: если данные не могут быть преобразованы в JSON
json.JSONDecodeError: Если данные не могут быть преобразованы в JSON.
"""
def format_json_string(json_string):
"""Вспомогательная функция для форматирования строки JSON.
"""Форматирует строку JSON для корректного парсинга.
Args:
json_string: сырая строка с JSON-данными
json_string: Сырая строка с JSON-данными.
Returns:
str: отформатированная строка JSON
str: Отформатированная строка JSON.
"""
substrings = json_string.splitlines()
formatted_string_list = []
last_substring = substrings.pop()
@ -85,15 +94,16 @@ class JsonContainerComponent(BaseComponent):
# Проверки:
def check_json_equals(self, actual, expected, msg):
"""Сравнение JSON-объектов на идентичность.
"""Сравнивает JSON-объекты на идентичность.
Args:
actual: фактический JSON-объект
expected: ожидаемый JSON-объект
msg: сообщение об ошибке
actual: Фактический JSON-объект.
expected: Ожидаемый JSON-объект.
msg: Сообщение об ошибке.
Raises:
AssertionError: если объекты не идентичны
AssertionError: Если объекты не идентичны.
"""
diff = jsondiff.diff(expected, actual, syntax='symmetric')
assert len(diff) == 0, f"{msg}. DIFF is {diff}"

View File

@ -1,3 +1,6 @@
"""Модуль компонента модального окна. Содержит класс для работы с модальными окнами,
их элементами и проверками."""
from playwright.sync_api import Page
from tools.logger import get_logger
from locators.modal_window_locators import ModalWindowLocators
@ -9,7 +12,8 @@ logger = get_logger("MODAL_WINDOW")
class ModalWindowComponent(BaseComponent):
"""Компонент модального окна."""
"""Компонент модального окна. Предоставляет методы для взаимодействия с окном,
его содержимым и проверок."""
def __init__(self, page: Page):
super().__init__(page)
@ -19,83 +23,101 @@ class ModalWindowComponent(BaseComponent):
# Действия:
def add_content_item(self, name: str, item: object) -> None:
"""Добавление элемента содержимого в окно."""
"""Добавляет элемент содержимого в окно по заданному имени."""
self.content_items[name] = item
def get_content_item(self, name: str) -> object | None:
"""Получение элемента содержимого по имени."""
"""Возвращает элемент содержимого по имени или None, если не найден."""
return self.content_items.get(name)
def add_toolbar_title(self, title: str) -> None:
"""Добавление заголовка в панель инструментов."""
"""Добавляет заголовок в панель инструментов модального окна."""
self.toolbar.add_title(title)
def add_toolbar_button(self, locator: str, name: str) -> None:
"""Добавление кнопки в панель инструментов."""
"""Добавляет кнопку в панель инструментов модального окна."""
self.toolbar.add_button(locator, name)
def add_button(self, locator: str, name: str) -> None:
"""Добавление кнопки в окно."""
"""Добавляет кнопку в модальное окно."""
self.buttons.append(Button(self.page, locator, name))
def get_button_by_name(self, name: str) -> Button | None:
"""Поиск кнопки по имени."""
"""Ищет и возвращает кнопку по имени или None, если не найдена."""
for button in self.buttons:
if button.name == name:
return button
return None
def click_button(self, name: str) -> None:
"""Нажатие кнопки по имени."""
"""Кликает по кнопке с заданным именем. Вызывает ошибку, если не найдена."""
button = self.get_button_by_name(name)
if button is None:
assert False, f"Button with name '{name}' not found"
button.click()
def click_toolbar_close_button(self) -> None:
"""Нажатие кнопки закрытия в панели инструментов."""
"""Кликает по кнопке закрытия в панели инструментов."""
self.toolbar.click_button("close")
def scroll_window_down(self) -> None:
"""Прокрутка содержимого окна вниз."""
"""Прокручивает содержимое окна вниз."""
self.scroll_down(ModalWindowLocators.MODAL_WINDOW)
def scroll_window_up(self) -> None:
"""Прокрутка содержимого окна вверх."""
"""Прокручивает содержимое окна вверх."""
self.scroll_up(ModalWindowLocators.MODAL_WINDOW)
def scroll_window_left(self) -> None:
"""Прокрутка содержимого окна влево."""
"""Прокручивает содержимое окна влево."""
self.scroll_left(ModalWindowLocators.MODAL_WINDOW)
def scroll_window_right(self) -> None:
"""Прокрутка содержимого окна вправо."""
"""Прокручивает содержимое окна вправо."""
self.scroll_right(ModalWindowLocators.MODAL_WINDOW)
# Проверки:
def check_window_vertical_scrolling(self) -> bool:
"""Проверка возможности вертикальной прокрутки."""
"""Проверяет возможность вертикальной прокрутки окна."""
return self.is_scrollable_vertically(ModalWindowLocators.MODAL_WINDOW)
def check_window_horizontal_scrolling(self) -> bool:
"""Проверка возможности горизонтальной прокрутки."""
"""Проверяет возможность горизонтальной прокрутки окна."""
return self.is_scrollable_horizontally(ModalWindowLocators.MODAL_WINDOW)
def check_by_window_title(self) -> None:
"""Проверка наличия окна по заголовку."""
"""Проверяет наличие окна по заголовку."""
self.toolbar.check_toolbar_presence(f"Modal window with '{self.toolbar.title}' is missing")
def check_button_presence(self, name: str) -> None:
"""Проверка наличия кнопки по имени."""
"""Проверяет наличие кнопки по имени. Вызывает ошибку, если не найдена."""
button = self.get_button_by_name(name)
if button is None:
assert False, f"Button with name '{name}' not found"
button.check_presence(f"Button with name '{name}' is missing")
def check_toolbar_button_presence(self, name: str) -> None:
"""Проверка наличия кнопки в панели инструментов."""
"""Проверяет наличие кнопки в панели инструментов."""
self.toolbar.check_button_presence(name)
def check_toolbar_button_tooltip(self, name: str, tooltip: str) -> None:
"""Проверка подсказки кнопки в панели инструментов."""
"""Проверяет подсказку у кнопки в панели инструментов."""
self.toolbar.check_button_tooltip(name, tooltip)

View File

@ -1,3 +1,5 @@
"""Модуль компонента панели навигации. Содержит класс для работы с элементами навигации."""
from playwright.sync_api import Page, Locator
from tools.logger import get_logger
from locators.navigation_panel_locators import NavigationPanelLocators
@ -7,24 +9,54 @@ logger = get_logger("NAVIGATION_PANEL")
class NavigationPanelComponent(BaseComponent):
"""Компонент панели навигации."""
"""Компонент панели навигации. Предоставляет методы для взаимодействия с ней."""
def __init__(self, page: Page):
"""Инициализирует компонент панели навигации.
Args:
page: Экземпляр страницы Playwright.
"""
super().__init__(page)
# Действия:
def get_item_names(self, locator: str | Locator) -> list[str]:
"""Получает тексты всех элементов по указанному локатору."""
"""Возвращает тексты всех элементов по указанному локатору.
Args:
locator: Локатор элементов или строка с CSS/XPath.
Returns:
Список текстов элементов.
"""
loc = self.get_locator(locator)
return loc.all_inner_texts()
def click_item(self, locator: str | Locator, item_name: str) -> None:
"""Кликает по элементу с указанным текстом."""
"""Кликает по элементу с указанным текстом.
Args:
locator: Локатор элемента или строка с CSS/XPath.
item_name: Текст элемента для клика.
"""
loc = self.get_locator(locator)
loc.get_by_text(item_name).click()
def click_sub_item(self, locator: str | Locator, sublevel_number: int, item_name: str) -> None:
"""Кликает по вложенному элементу с указанным текстом."""
"""Кликает по вложенному элементу с указанным текстом.
Args:
locator: Локатор родительского элемента.
sublevel_number: Уровень вложенности (1 или 2).
item_name: Текст элемента для клика.
Raises:
ValueError: Если уровень вложенности не 1 или 2.
"""
root_locator = self.get_locator(NavigationPanelLocators.NODE_ROOT)
children_locator = self.get_locator(NavigationPanelLocators.NODE_CHILDREN)
@ -39,7 +71,15 @@ class NavigationPanelComponent(BaseComponent):
# Проверки:
def check_item_visibility(self, locator: str | Locator, item_name: str) -> None:
"""Проверяет видимость элемента с указанным текстом."""
"""Проверяет видимость элемента с указанным текстом.
Args:
locator: Локатор элемента или строка с CSS/XPath.
item_name: Текст элемента для проверки.
Note:
Временная обработка для элементов с текстом 'Шаблоны'.
"""
msg = f"Navigation panel item '{item_name}' is not visible"

View File

@ -1,19 +1,37 @@
"""Модуль компонента таблицы. Содержит класс для работы с табличными данными."""
from playwright.sync_api import Page, expect, Locator
from tools.logger import get_logger
from components.base_component import BaseComponent
logger = get_logger("TABLE")
class TableComponent(BaseComponent):
"""Компонент таблицы."""
"""Компонент таблицы. Предоставляет методы для работы с табличными данными."""
def __init__(self, page: Page):
"""Инициализирует компонент таблицы.
Args:
page: Экземпляр страницы Playwright.
"""
super().__init__(page)
# Действия:
def get_row_locator(self, table_locator, row_index) -> Locator | None:
"""Конструирует локатор для строки с заданным индексом."""
def get_row_locator(self, table_locator: str | Locator, row_index: int) -> Locator | None:
"""Возвращает локатор строки по индексу.
Args:
table_locator: Локатор таблицы.
row_index: Индекс строки.
Returns:
Локатор строки или None, если индекс вне диапазона.
"""
table = self.get_locator(table_locator)
rows = table.locator("//tbody/tr")
@ -24,9 +42,16 @@ class TableComponent(BaseComponent):
return None
def read(self, locator: str | Locator) -> list[list[str]]:
"""Читает данные из таблицы."""
table_data = []
"""Читает данные таблицы, включая заголовки.
Args:
locator: Локатор таблицы.
Returns:
Двумерный список с данными таблицы.
"""
table_data = []
table = self.get_locator(locator)
# Чтение заголовка таблицы
@ -50,19 +75,35 @@ class TableComponent(BaseComponent):
# Проверки:
def check_first_row_visibility(self, locator: str | Locator) -> None:
"""Проверяет видимость первой строки таблицы."""
"""Проверяет видимость первой строки таблицы.
Args:
locator: Локатор таблицы.
"""
table = self.get_locator(locator)
first_row = table.locator("//tbody/tr").first
expect(first_row).to_be_visible(), "The first table row is not visible"
def check_last_row_visibility(self, locator: str | Locator) -> None:
"""Проверяет видимость последней строки таблицы."""
"""Проверяет видимость последней строки таблицы.
Args:
locator: Локатор таблицы.
"""
table = self.get_locator(locator)
last_row = table.locator("//tbody/tr").last
expect(last_row).to_be_visible(), "The last table row is not visible"
def check_row_highlighting(self, locator: str | Locator, row_index: int) -> None:
"""Проверяет подсветку строки при наведении."""
"""Проверяет изменение цвета строки при наведении.
Args:
locator: Локатор таблицы.
row_index: Индекс проверяемой строки.
"""
table = self.get_locator(locator)
row = table.locator("//tbody/tr").nth(row_index)

View File

@ -1,3 +1,11 @@
"""Модуль компонента тулбара (панели инструментов).
Содержит класс ToolbarComponent для работы с элементами тулбара:
- Управление кнопками и их подсказками
- Проверка видимости элементов
- Взаимодействие с панелью инструментов
"""
from playwright.sync_api import Page, expect, Locator
from tools.logger import get_logger
from locators.toolbar_locators import ToolbarLocators
@ -8,12 +16,12 @@ logger = get_logger("TOOLBAR")
class ToolbarComponent(BaseComponent):
"""Компонент тулбара (панели инструментов).
Предоставляет методы для работы с панелью инструментов:
- Добавление/управление кнопками
- Проверка видимости элементов
- Взаимодействие с элементами тулбара
"""Компонент тулбара. Предоставляет методы для работы с панелью инструментов.
Args:
page (Page): Экземпляр страницы Playwright
@ -21,17 +29,19 @@ class ToolbarComponent(BaseComponent):
"""
def __init__(self, page: Page, title: str):
"""Инициализация компонента тулбара."""
"""Инициализирует компонент тулбара с указанным заголовком."""
super().__init__(page)
self.title = title
self.buttons = []
def add_title(self, title: str) -> None:
"""Устанавливает заголовок тулбара.
"""Устанавливает новый заголовок тулбара.
Args:
title (str): Новый заголовок тулбара
title (str): Новый заголовок
"""
self.title = title
def add_button(self, locator: Locator, name: str) -> None:
@ -41,6 +51,7 @@ class ToolbarComponent(BaseComponent):
locator (Locator): Локатор кнопки
name (str): Уникальное имя кнопки
"""
self.buttons.append(TooltipButton(self.page, locator, name))
def get_button_by_name(self, name: str) -> TooltipButton | None:
@ -50,8 +61,9 @@ class ToolbarComponent(BaseComponent):
name (str): Имя кнопки
Returns:
TooltipButton | None: Экземпляр кнопки или None если не найдена
TooltipButton | None: Найденная кнопка или None
"""
for button in self.buttons:
if button.name == name:
return button
@ -66,6 +78,7 @@ class ToolbarComponent(BaseComponent):
Raises:
AssertionError: Если кнопка не найдена
"""
button = self.get_button_by_name(name)
if button is None:
raise AssertionError(f"Unsupported button name {name}")
@ -83,6 +96,7 @@ class ToolbarComponent(BaseComponent):
Raises:
AssertionError: Если имя кнопки не поддерживается
"""
button = self.get_button_by_name(name)
if button is None:
raise AssertionError(f"Unsupported button name {name}")
@ -100,6 +114,7 @@ class ToolbarComponent(BaseComponent):
Raises:
AssertionError: Если имя кнопки не поддерживается
"""
button = self.get_button_by_name(name)
if button is None:
raise AssertionError(f"Unsupported button name {name}")
@ -111,6 +126,7 @@ class ToolbarComponent(BaseComponent):
Args:
message (str): Сообщение об ошибке если тулбар не виден
"""
locator = self.get_locator(ToolbarLocators.TITLE).filter(has_text=self.title)
expect(locator).to_be_visible(), message
@ -123,6 +139,7 @@ class ToolbarComponent(BaseComponent):
Raises:
AssertionError: Если кнопка не найдена или не видна
"""
button = self.get_button_by_name(name)
if button is None:
raise AssertionError(f"Unsupported button name {name}")
@ -136,8 +153,9 @@ class ToolbarComponent(BaseComponent):
tooltip (str): Ожидаемый текст подсказки
Raises:
AssertionError: Если кнопка не найдена или текст подсказки не совпадает
AssertionError: Если текст подсказки не совпадает
"""
button = self.get_button_by_name(name)
if button is None:
raise AssertionError(f"Unsupported button name {name}")

View File

@ -1,14 +1,20 @@
"""Модуль constants содержит настройки и константы приложения.
Основной класс Constants предоставляет доступ к переменным окружения,
используемым для аутентификации и других настроек.
"""
import os
class Constants:
"""Класс для хранения констант и переменных окружения.
"""Хранит константы и переменные окружения.
Содержит переменные, используемые для аутентификации и других настроек.
Получает значения из переменных окружения.
Получает значения из переменных окружения. Используется для аутентификации.
Атрибуты:
login (str): Логин для аутентификации
password (str): Пароль для аутентификации
login (str): Логин для аутентификации.
password (str): Пароль для аутентификации.
"""
try:

View File

@ -1,8 +1,20 @@
"""Модуль environment содержит настройки окружения и URL-адресов.
Класс Environment предоставляет методы для работы с окружением,
токенами и URL-адресами API.
"""
import os
from typing import Dict
class Environment:
"""Класс для работы с окружением и URL-адресами."""
"""Управление окружением, URL-адресами и токенами.
Атрибуты класса:
TEST (str): Константа для тестового окружения.
DEVELOP (str): Константа для dev-окружения.
URLS (Dict[str, str]): Словарь URL для разных окружений.
"""
TEST: str = 'test'
DEVELOP: str = 'develop'
@ -13,7 +25,8 @@ class Environment:
}
def __init__(self) -> None:
"""Инициализация объекта окружения."""
"""Инициализирует объект окружения и токены."""
try:
self.env: str = os.getenv('ENV', self.TEST)
self.access_token: str = ""
@ -22,7 +35,12 @@ class Environment:
self.env: str = self.TEST
def get_base_url(self) -> str:
"""Возвращает базовый URL для текущего окружения."""
"""Возвращает базовый URL для текущего окружения.
Возвращает:
str: Базовый URL с путем для теста или без него.
"""
if self.env in self.URLS:
if self.env == self.TEST:
return self.URLS[self.env] + "e-nms-ui/"
@ -30,17 +48,32 @@ class Environment:
raise Exception(f"Unknown value of ENV variable {self.env}")
def get_request_url(self) -> str:
"""Возвращает URL для API-запросов."""
"""Возвращает URL для API-запросов.
Возвращает:
str: URL для API-запросов.
"""
if self.env in self.URLS:
return self.URLS[self.env]
raise Exception(f"Unknown value of ENV variable {self.env}")
def set_access_token(self, token: str) -> None:
"""Устанавливает токен доступа."""
"""Устанавливает токен доступа.
Аргументы:
token (str): Токен для установки.
"""
self.token = token
def get_access_token(self) -> str:
"""Возвращает текущий токен доступа."""
"""Возвращает текущий токен доступа.
Возвращает:
str: Текущий токен доступа.
"""
return self.token

View File

@ -1,7 +1,12 @@
"""Модуль roles_dict содержит словарь соответствия ролей.
Содержит сопоставление системных названий ролей с их отображаемыми названиями.
"""
# Словарь соответствия системных названий ролей их отображаемым названиям
roles_dict = {
"administrator": "Администратор",
"manager": "Контактное лицо",
"manager": "Контактное лицо",
"operator": "Оператор",
"inform_secur_user": "Специалист информационной безопасности",
"user": "Пользователь"

View File

@ -1,25 +0,0 @@
# Форматирование кода в соответствии с PEP 8 и Google Python Style Guide
## Требования к форматированию
1. **Добавление Docstring**:
- Для класса: описание назначения и атрибутов в Google-формате на русском языке
- Для методов: описание аргументов, возвращаемых значений и возможных исключений
2. **Сохранение комментариев**:
- Разделительные комментарии (например, `#actions:`, `# assertions:`) остаются без изменений
- Закомментированный код сохраняется в оригинальном виде
- Технические комментарии в методах не изменяются
3. **Перевод комментариев**:
- Разделительные комментарии переводятся (например, `# Действия:`, `# Проверки:`)
- Пояснительные комментарии к логике кода переводятся
- Не переводятся:
- Технические сообщения в `assert`, `raise` и других системных конструкциях
- Закомментированный код
- Сообщения в логах и ошибках
4. **Форматирование кода**:
- Соответствие PEP 8 (отступы, пробелы вокруг операторов)
- Сохранение исходной структуры кода
- Без изменений рабочей логики программы

View File

@ -0,0 +1,14 @@
**Добавление Docstring**
Изменить строго соблюдая требования:
1. Добавить недостающие и улучшить имеющиеся docstrings язык русский.
2. Сделать docstring более компактными, сохранив всю важную информацию.
3. Ограничить в docstring длину строк 79 символами.
4. Добавить docstring перед импортами.
5. Должна быть пустая строка после каждого docstring.
6. Сохранить все текущие комментарии.
7. Запрещено изменять код (изменять только docstring).
8. Не удалять пустые строки.
9. В конце кода должна быть одна пустая строка.
Вывести полный изменённый код и отчет о выполнении требований

View File

@ -1,12 +1,30 @@
"""Модуль base_element содержит базовый класс для работы с элементами страницы.
Класс BaseElement предоставляет основные методы взаимодействия с элементами
и их проверки через Playwright.
"""
from playwright.sync_api import Page, Locator, expect, TimeoutError
from tools.logger import get_logger
logger = get_logger("BASE_ELEMENT")
class BaseElement:
"""Базовый класс для работы с элементами страницы."""
"""Базовый класс для работы с элементами страницы через Playwright.
Предоставляет основные методы взаимодействия с элементами:
клики, получение текста, ожидание и проверки состояния.
"""
def __init__(self, page: Page, locator: str | Locator, name: str) -> None:
"""Инициализирует базовый элемент страницы.
Args:
page: Экземпляр страницы Playwright
locator: Локатор элемента (строка или объект Locator)
name: Имя элемента для логирования
"""
self.page = page
self.name = name
self.locator: Locator
@ -20,32 +38,46 @@ class BaseElement:
@property
def type_of(self) -> str:
"""Возвращает тип элемента (для логирования)."""
return "base element"
# Действия:
def click(self) -> None:
"""Выполняет клик по элементу."""
logger.info(f"Clicking {self.type_of} '{self.name}'")
self.locator.click()
def get_text(self, index: int) -> str:
"""Возвращает текст элемента по указанному индексу."""
logger.info(f"Get text for {self.type_of} '{self.name}'")
return self.locator.nth(index).text_content()
def wait_for_element(self, timeout: int = 12000) -> None:
"""Ожидает появление элемента в течение заданного времени."""
logger.info(f"Wait for {self.type_of} '{self.name}'")
self.locator.wait_for(timeout=timeout)
# Проверки:
def check_have_text(self, text: str, msg: str) -> None:
"""Проверяет наличие указанного текста в элементе."""
logger.info(f"Check that {self.type_of} '{self.name}' has text '{text}'")
expect(self.locator).to_have_text(text), msg
def check_presence(self, msg: str) -> None:
"""Проверяет видимость элемента на странице."""
logger.info(f"Check that {self.type_of} '{self.name}' is present")
print(self.locator)
expect(self.locator).to_be_visible(visible=True, timeout=12000), msg
def is_present(self, timeout: int = 5000) -> bool:
"""Проверяет наличие элемента в течение заданного времени."""
logger.info(f"Check that {self.type_of} '{self.name}' is present")
try:
self.locator.wait_for(timeout=timeout)
@ -54,6 +86,8 @@ class BaseElement:
return True
def is_not_present(self, timeout: int = 5000) -> bool:
"""Проверяет отсутствие элемента в течение заданного времени."""
logger.info(f"Check that {self.type_of} '{self.name}' is missing")
try:
self.locator.wait_for(timeout=timeout)

View File

@ -1,3 +1,9 @@
"""Модуль button_element содержит класс для работы с кнопками на странице.
Класс Button наследует базовый функционал BaseElement и предоставляет
специфичные методы для работы с элементами типа 'кнопка'.
"""
from tools.logger import get_logger
from elements.base_element import BaseElement
@ -5,18 +11,20 @@ logger = get_logger("BUTTON")
class Button(BaseElement):
"""Класс для работы с элементами типа 'кнопка' на странице.
"""Класс для работы с кнопками на странице.
Наследует функциональность базового элемента и добавляет специфичные для кнопок методы.
Наследует функциональность BaseElement и добавляет специфичные
для кнопок методы и проверки.
"""
@property
def type_of(self) -> str:
"""Возвращает тип элемента - 'кнопка'.
"""Возвращает тип элемента ('кнопка').
Returns:
Строка с типом элемента.
str: Тип элемента - 'кнопка'.
"""
return "button"
# Действия:

View File

@ -1,3 +1,9 @@
"""Модуль checkbox_element содержит класс для работы с чекбоксами.
Класс Checkbox наследует базовый функционал BaseElement и добавляет
специфичные методы для работы с элементами типа 'чекбокс'.
"""
from tools.logger import get_logger
from elements.base_element import BaseElement
@ -5,28 +11,32 @@ logger = get_logger("CHECKBOX")
class Checkbox(BaseElement):
"""Класс для работы с элементами типа 'чекбокс' на странице.
"""Класс для работы с чекбоксами на странице.
Наследует функциональность базового элемента и добавляет специфичные для чекбоксов методы.
Наследует функциональность BaseElement и добавляет методы для
взаимодействия с чекбоксами и проверки их состояния.
"""
@property
def type_of(self) -> str:
"""Возвращает тип элемента - 'чекбокс'.
"""Возвращает тип элемента ('чекбокс').
Returns:
Строка с типом элемента.
str: Тип элемента - 'чекбокс'.
"""
return "checkbox"
# Действия:
def check(self) -> None:
"""Устанавливает чекбокс в отмеченное состояние."""
"""Отмечает чекбокс (устанавливает галочку)."""
logger.info(f"Checking checkbox '{self.name}'")
self.locator.check()
def uncheck(self) -> None:
"""Снимает отметку с чекбокса."""
"""Снимает отметку с чекбокса (убирает галочку)."""
logger.info(f"Unchecking checkbox '{self.name}'")
self.locator.uncheck()
@ -35,7 +45,8 @@ class Checkbox(BaseElement):
"""Проверяет, отмечен ли чекбокс.
Returns:
True, если чекбокс отмечен, иначе False.
bool: True если отмечен, False если нет.
"""
logger.info(f"Checking if checkbox '{self.name}' is checked")
return self.locator.is_checked()

View File

@ -1,43 +1,53 @@
"""Модуль dropdown_list_element содержит класс для работы с выпадающими списками.
Класс DropdownList наследует базовый функционал BaseElement и добавляет
методы для взаимодействия с выпадающими списками на странице.
"""
from tools.logger import get_logger
from elements.base_element import BaseElement
logger = get_logger("DROPDOWN_LIST")
class DropdownList(BaseElement):
"""Класс для работы с выпадающими списками на странице.
"""Класс для работы с выпадающими списками.
Наследует функциональность базового элемента и добавляет специфичные для dropdown-списков методы.
Наследует функциональность BaseElement и добавляет специфичные
методы для выбора и проверки элементов списка.
"""
@property
def type_of(self) -> str:
"""Возвращает тип элемента - 'выпадающий список'.
"""Возвращает тип элемента ('выпадающий список').
Returns:
Строка с типом элемента.
str: Тип элемента - 'выпадающий список'.
"""
return "dropdown list"
# Действия:
def click_item_with_text(self, text: str) -> None:
"""Кликает на элемент списка с указанным текстом.
"""Выбирает элемент списка по указанному тексту.
Args:
text: Текст элемента, который нужно выбрать.
text (str): Текст элемента для выбора.
"""
logger.info(f'Selecting item with text "{text}" from dropdown "{self.name}"')
self.page.get_by_role("listitem").filter(has_text=text).click()
# Проверки:
def check_item_with_text(self, text: str) -> None:
"""Проверяет наличие и доступность элемента с указанным текстом.
"""Проверяет наличие и доступность элемента списка.
Args:
text: Текст элемента, который нужно проверить.
text (str): Текст элемента для проверки.
Raises:
AssertionError: Если элемент отсутствует или недоступен.
"""
logger.info(f'Checking item with text "{text}" in dropdown "{self.name}"')
enabled = self.page.get_by_role("listitem").filter(has_text=text).is_enabled()
if not enabled:

View File

@ -1,21 +1,29 @@
"""Модуль text_element содержит класс для работы с текстовыми элементами.
Класс Text наследует базовый функционал BaseElement и предоставляет
методы для работы с текстовыми элементами на странице.
"""
from tools.logger import get_logger
from elements.base_element import BaseElement
logger = get_logger("TEXT")
class Text(BaseElement):
"""Класс для работы с текстовыми элементами на странице.
"""Класс для работы с текстовыми элементами страницы.
Наследует функциональность базового элемента и добавляет специфичные для текста методы.
Наследует функциональность BaseElement и добавляет специфичные
методы для взаимодействия с текстовыми элементами.
"""
@property
def type_of(self) -> str:
"""Возвращает тип элемента - 'текст'.
"""Возвращает тип элемента ('текст').
Returns:
Строка с типом элемента.
str: Тип элемента - 'текст'.
"""
return "text"
# Действия:

View File

@ -1,3 +1,9 @@
"""Модуль text_input_element содержит класс для работы с текстовыми полями ввода.
Класс TextInput наследует базовый функционал BaseElement и предоставляет
методы для взаимодействия с текстовыми полями ввода на странице.
"""
from playwright.sync_api import expect
from tools.logger import get_logger
from elements.base_element import BaseElement
@ -6,54 +12,60 @@ logger = get_logger("TEXT_INPUT")
class TextInput(BaseElement):
"""Класс для работы с текстовыми полями ввода на странице.
"""Класс для работы с текстовыми полями ввода.
Наследует функциональность базового элемента и добавляет специфичные для текстовых полей методы.
Наследует функциональность BaseElement и добавляет методы
для ввода, очистки и проверки текстовых полей.
"""
@property
def type_of(self) -> str:
"""Возвращает тип элемента - 'текстовое поле ввода'.
"""Возвращает тип элемента ('текстовое поле ввода').
Returns:
Строка с типом элемента.
str: Тип элемента - 'текстовое поле ввода'.
"""
return "text input"
# Действия:
def get_input_value(self) -> str:
"""Получает текущее значение текстового поля.
"""Возвращает текущее значение поля ввода.
Returns:
Текущее значение поля ввода.
str: Текущее значение в поле.
"""
logger.info(f'Getting value from text input "{self.name}"')
return self.locator.input_value()
def input_value(self, value: str) -> None:
"""Вводит указанное значение в текстовое поле.
"""Вводит указанное значение в поле.
Args:
value: Значение для ввода.
value (str): Значение для ввода.
"""
logger.info(f'Inputting value "{value}" to text input "{self.name}"')
self.locator.fill(value)
def clear(self) -> None:
"""Очищает содержимое текстового поля."""
logger.info(f'Clearing text input "{self.name}"')
self.locator.press('Control+A')
self.locator.press('Backspace')
# Проверки:
def check_empty_input(self, msg: str) -> None:
"""Проверяет, что текстовое поле пустое.
"""Проверяет, что поле ввода пустое.
Args:
msg: Сообщение об ошибке при неудачной проверке.
msg (str): Сообщение об ошибке при неудачной проверке.
Raises:
AssertionError: Если поле не пустое.
"""
logger.info(f'Checking that text input "{self.name}" is empty')
expect(self.locator).to_be_empty(), msg

View File

@ -1,33 +1,42 @@
"""Модуль tooltip_button_element содержит класс для работы с кнопками с подсказками.
Класс TooltipButton наследует базовый функционал BaseElement и добавляет
методы для проверки всплывающих подсказок у кнопок.
"""
from tools.logger import get_logger
from elements.base_element import BaseElement
logger = get_logger("TOOLTIP_BUTTON")
class TooltipButton(BaseElement):
"""Класс элемента кнопки с всплывающей подсказкой.
"""Класс для работы с кнопками, имеющими всплывающие подсказки.
Наследует функциональность базового элемента и добавляет методы для работы с подсказками.
Наследует функциональность BaseElement и добавляет методы
для взаимодействия с подсказками кнопок.
"""
@property
def type_of(self) -> str:
"""Возвращает тип элемента.
"""Возвращает тип элемента ('tooltip_button').
Returns:
str: Тип элемента ('tooltip_button')
str: Тип элемента - кнопка с подсказкой.
"""
return "tooltip_button"
def check_tooltip_with_text(self, tooltip_locator: str, expected_text: str) -> None:
"""Проверяет текст всплывающей подсказки.
"""Проверяет соответствие текста всплывающей подсказки.
Args:
tooltip_locator (str): Локатор элемента подсказки
expected_text (str): Ожидаемый текст подсказки
tooltip_locator (str): Локатор элемента подсказки.
expected_text (str): Ожидаемый текст подсказки.
Raises:
AssertionError: Если текст подсказки не соответствует ожидаемому
AssertionError: Если текст подсказки не соответствует ожидаемому.
"""
# Наведение на элемент для отображения подсказки
self.locator.hover()

View File

@ -1,8 +1,10 @@
"""Модуль для работы с Playwright в тестах pytest.
"""Модуль pages содержит фикстуры и функции для работы с Playwright.
Содержит фикстуры и вспомогательные функции для управления браузером.
Предоставляет инструменты для управления браузером, контекстами и страницами
в тестах pytest, включая настройку параметров запуска.
"""
import pytest
from playwright.sync_api import Browser, BrowserContext, Page, sync_playwright, Playwright
from _pytest.config.argparsing import Parser
@ -10,19 +12,20 @@ from _pytest.fixtures import FixtureRequest
def pytest_addoption(parser: Parser):
"""Добавляет пользовательские опции командной строки для настройки браузера.
"""Добавляет опции командной строки для настройки браузера.
Args:
parser: Парсер pytest для добавления опций.
Доступные опции:
--bn: Выбор браузера (chrome, remote_chrome или firefox)
Опции:
--bn: Браузер (chrome, remote_chrome, firefox)
--h: Режим headless (True/False)
--s: Размер окна в формате {'width': int, 'height': int}
--slow: Задержка между действиями (slow_mo)
--s: Размер окна {'width': int, 'height': int}
--slow: Задержка между действиями (мс)
--t: Таймаут по умолчанию (мс)
--l: Локаль браузера
"""
parser.addoption('--bn', action='store', default="chrome",
help="Choose browser: chrome, remote_chrome or firefox")
parser.addoption('--h', action='store', default=False,
@ -48,7 +51,7 @@ def pytest_addoption(parser: Parser):
@pytest.fixture(scope='class')
def browser(request: FixtureRequest) -> Page:
"""Фикстура для создания и управления экземпляром браузера.
"""Фикстура для управления экземпляром браузера.
Args:
request: Объект запроса pytest для доступа к конфигурации.
@ -57,11 +60,12 @@ def browser(request: FixtureRequest) -> Page:
Page: Экземпляр страницы браузера.
Yields:
Page: Экземпляр страницы для использования в тестах.
Page: Страница для использования в тестах.
Note:
Автоматически закрывает браузер и контексты после завершения тестов.
Автоматически закрывает браузер после тестов.
"""
playwright = sync_playwright().start()
# Выбор браузера на основе параметра командной строки
@ -96,11 +100,12 @@ def get_firefox_browser(playwright: Playwright, request: FixtureRequest) -> Brow
Args:
playwright: Экземпляр Playwright.
request: Объект запроса pytest для доступа к конфигурации.
request: Объект запроса pytest.
Returns:
Browser: Экземпляр Firefox браузера.
Browser: Экземпляр Firefox.
"""
return playwright.firefox.launch(
headless=request.config.getoption("h"),
slow_mo=request.config.getoption("slow"),
@ -112,11 +117,12 @@ def get_chrome_browser(playwright: Playwright, request: FixtureRequest) -> Brows
Args:
playwright: Экземпляр Playwright.
request: Объект запроса pytest для доступа к конфигурации.
request: Объект запроса pytest.
Returns:
Browser: Экземпляр Chrome браузера.
Browser: Экземпляр Chrome.
"""
return playwright.chromium.launch(
headless=request.config.getoption("h"),
slow_mo=request.config.getoption("slow"),
@ -125,15 +131,16 @@ def get_chrome_browser(playwright: Playwright, request: FixtureRequest) -> Brows
def get_remote_chrome(playwright: Playwright, request: FixtureRequest) -> Browser:
"""Создает и возвращает экземпляр Chrome браузера для удаленного запуска.
"""Создает экземпляр Chrome для удаленного запуска.
Args:
playwright: Экземпляр Playwright.
request: Объект запроса pytest для доступа к конфигурации.
request: Объект запроса pytest.
Returns:
Browser: Экземпляр Chrome браузера в режиме headless.
Browser: Экземпляр Chrome в headless режиме.
"""
return playwright.chromium.launch(
headless=True,
slow_mo=request.config.getoption("slow")
@ -145,12 +152,13 @@ def get_context(browser: Browser, request: FixtureRequest, start: str) -> Browse
Args:
browser: Экземпляр браузера.
request: Объект запроса pytest для доступа к конфигурации.
request: Объект запроса pytest.
start: Тип запуска ('local' или 'remote').
Returns:
BrowserContext: Настроенный контекст браузера.
BrowserContext: Настроенный контекст.
"""
if start == 'local':
context = browser.new_context(
# no_viewport=True,
@ -179,9 +187,10 @@ def get_context(browser: Browser, request: FixtureRequest, start: str) -> Browse
@pytest.fixture(scope="function")
def return_back(browser: Page):
"""Фикстура для возврата на предыдущую страницу в браузере.
"""Фикстура для возврата на предыдущую страницу.
Args:
browser: Экземпляр страницы браузера.
"""
browser.go_back()

View File

@ -1,4 +1,18 @@
"""Модуль button_locators содержит локаторы для кнопок и элементов интерфейса.
Класс ButtonLocators хранит XPath и CSS локаторы для взаимодействия
с кнопками и всплывающими подсказками в тестах.
"""
class ButtonLocators:
"""Класс для хранения локаторов кнопок и связанных элементов.
Содержит локаторы в формате XPath и CSS для поиска элементов:
- Кнопка обновления лицензии
- Всплывающая подсказка
- Кнопка удаления сессии
"""
BUTTON_LICENSE_UPDATE = "//div[@class='scrollarea__footer']//button"
TOOLTIP = "//div[contains(@class,'v-tooltip__content menuable__content__active')]"
BUTTON_DELETE_SESSION = "button.v-btn--icon svg[fill='#4caf50']"

View File

@ -1,12 +1,19 @@
"""Модуль confirm_locators содержит локаторы элементов диалогов подтверждения.
Класс ConfirmLocators предоставляет XPath локаторы для взаимодействия
с диалоговыми окнами подтверждения действий в тестах.
"""
class ConfirmLocators:
"""Локаторы элементов диалогов подтверждения.
Атрибуты:
CONFIRM (str): XPath локатор активного диалогового окна.
TITLE (str): XPath локатор заголовка диалогового окна.
BUTTON_CLOSE (str): XPath локатор кнопки закрытия диалога.
TEXT (str): XPath локатор текстового содержимого диалога (формируется динамически).
Содержит XPath локаторы для:
CONFIRM (str): активного диалогового окна.
TITLE (str): заголовка диалогового окна.
BUTTON_CLOSE (str): кнопки закрытия диалога.
TEXT (str): текстового содержимого диалога (формируется динамически).
"""
CONFIRM = "//div[contains(@class, 'v-dialog--active')]"
TITLE = "//div[@class='v-card__title']/h3"
BUTTON_CLOSE = "//div[@class='vuedl-layout__closeBtn']"

View File

@ -1,8 +1,15 @@
"""Модуль event_panel_locators содержит локаторы элементов панели событий.
Класс EventPanelLocators предоставляет XPath локаторы для взаимодействия
с элементами панели событий в тестах.
"""
class EventPanelLocators:
"""Локаторы элементов панели событий.
Атрибуты:
BUTTONS_BLOCK (str): XPath локатор блока кнопок в панели инструментов.
Находится во втором блоке элементов toolbar'а внутри контентной области.
Содержит XPath локаторы для:
BUTTONS_BLOCK (str): блока кнопок в панели инструментов
"""
BUTTONS_BLOCK = "//nav/div[@class='v-toolbar__content']/div[@class='v-toolbar__items'][2]"

View File

@ -1,12 +1,19 @@
"""Модуль input_locators содержит локаторы полей ввода на странице.
Класс InputLocators предоставляет XPath локаторы для взаимодействия
с текстовыми полями ввода в тестах.
"""
class InputLocators:
"""Локаторы для полей ввода на странице.
Атрибуты:
LICENSE_ID_UPDATE (str): XPath локатор текстового поля для ввода/обновления
идентификатора лицензии, расположенного в подвале страницы.
Состоит из нескольких частей:
- Блок подвала (scrollarea__footer)
- Контейнер поля ввода (v-input__control)
- Непосредственно текстовое поле (textarea)
Содержит XPath локаторы для:
LICENSE_ID_UPDATE (str): поля ввода идентификатора лицензии в подвале
"""
LICENSE_ID_UPDATE = "//div[@class='scrollarea__footer']//div[@class='v-input__control']//textarea"

View File

@ -1,11 +1,16 @@
"""Модуль json_container_locators содержит локаторы контейнеров JSON-данных.
Класс JsonContainerLocators предоставляет XPath локаторы для работы
с контейнерами JSON-данных на странице.
"""
class JsonContainerLocators:
"""Локаторы для контейнеров JSON-данных на странице.
Атрибуты:
CONTAINER (str): XPath локатор основного контейнера JSON-данных.
Ищет div с классом, содержащим 'jv-container'.
SCROLL_CONTAINER (str): XPath локатор прокручиваемой области контейнера.
Ищет div с классом, содержащим 'scrollarea__body'.
Содержит XPath локаторы для:
CONTAINER (str): основного контейнера JSON-данных
SCROLL_CONTAINER (str): прокручиваемой области контейнера
"""
CONTAINER = "//div[contains(@class,'jv-container')]"
SCROLL_CONTAINER = "//div[contains(@class, 'scrollarea__body')]"

View File

@ -1,16 +1,23 @@
"""Модуль modal_window_locators содержит локаторы элементов модальных окон.
Класс ModalWindowLocators предоставляет XPath локаторы для взаимодействия
с элементами модальных окон в тестах.
"""
class ModalWindowLocators:
"""Локаторы для элементов модальных окон.
Атрибуты:
MODAL_WINDOW (str): XPath локатор активного модального окна.
INPUT_FORM_USER_DATA (str): XPath локатор формы для ввода пользовательских данных.
TEXT_FIELD_INPUT_FORM_USER_DATA (str): Относительный XPath текстового поля ввода
внутри формы пользовательских данных.
ROLES_FIELD_INPUT_FORM_USER_DATA (str): Относительный XPath поля выбора ролей
внутри формы пользовательских данных.
ROLES_MENU_INPUT_FORM_USER_DATA (str): XPath локатор активного меню выбора ролей.
LABEL_INPUT_FORM_USER_DATA (str): XPath локатор метки поля ввода в форме.
Содержит XPath локаторы для:
MODAL_WINDOW (str): активного модального окна
INPUT_FORM_USER_DATA (str): формы ввода пользовательских данных
TEXT_FIELD_INPUT_FORM_USER_DATA (str): текстового поля ввода
ROLES_FIELD_INPUT_FORM_USER_DATA (str): поля выбора ролей
ROLES_MENU_INPUT_FORM_USER_DATA (str): меню выбора ролей
LABEL_INPUT_FORM_USER_DATA (str): метки поля ввода
"""
MODAL_WINDOW = "//div[contains(@class, 'v-dialog--active')]"
INPUT_FORM_USER_DATA = "//form[@class='v-form']"

View File

@ -1,17 +1,19 @@
"""Модуль navigation_panel_locators содержит локаторы навигационной панели.
Класс NavigationPanelLocators предоставляет XPath локаторы для работы
с элементами навигационной панели в тестах.
"""
class NavigationPanelLocators:
"""Локаторы элементов навигационной панели.
Атрибуты:
PANEL_MAIN (str): XPath локатор основной панели навигации.
Ищет элемент ul с классом, содержащим 'v-expansion-panel'.
PANEL_SCROLL_CONTAINER (str): XPath локатор контейнера с прокруткой,
содержащего навигационную панель. Ищет div с классом 'scrollarea__body',
внутри которого находится панель навигации.
NODE_ROOT (str): XPath локатор корневого узла дерева навигации.
Ищет div с классом, содержащим 'v-treeview-node__root'.
NODE_CHILDREN (str): XPath локатор дочерних элементов узла дерева.
Ищет div с классом, содержащим 'v-treeview-node__children'.
Содержит XPath локаторы для:
PANEL_MAIN (str): основной панели навигации
PANEL_SCROLL_CONTAINER (str): контейнера с прокруткой
NODE_ROOT (str): корневого узла дерева
NODE_CHILDREN (str): дочерних элементов узла
"""
PANEL_MAIN = "//ul[contains(@class, 'v-expansion-panel')]"
PANEL_SCROLL_CONTAINER = "//div[contains(@class, 'scrollarea__body') and .//ul[contains(@class, 'v-expansion-panel')]]"

View File

@ -1,13 +1,16 @@
"""Модуль table_locators содержит локаторы табличных элементов.
Класс TableLocators предоставляет XPath локаторы для работы
с таблицами в рабочей области приложения.
"""
class TableLocators:
"""Локаторы для табличных элементов в рабочей области.
Атрибуты:
TABLE_WORK_AREA (str): XPath локатор основной таблицы в рабочей области.
Ищет элемент table, находящийся по пути:
scrollarea__body -> div -> div -> div -> table
TABLE_SCROLL_CONTAINER (str): XPath локатор контейнера с прокруткой таблицы.
Ищет tbody внутри div с классом scrollarea__body,
содержащего таблицу с классом scrolltable__container.
Содержит XPath локаторы для:
TABLE_WORK_AREA (str): основной таблицы в рабочей области
TABLE_SCROLL_CONTAINER (str): контейнера с прокруткой таблицы
"""
TABLE_WORK_AREA = "//div[@class='scrollarea__body']/div/div/div/table"
TABLE_SCROLL_CONTAINER = "//div[contains(@class, 'scrollarea__body') and .//table[@class='scrolltable__container']]//tbody"

View File

@ -1,11 +1,16 @@
"""Модуль text_locators содержит локаторы текстовых элементов.
Класс TextLocators предоставляет XPath локаторы для работы
с текстовыми элементами на страницах приложения.
"""
class TextLocators:
"""Локаторы для текстовых элементов на странице.
Атрибуты:
TITLE_LICENSE_INPUT_FORM (str): XPath локатор заголовка формы ввода лицензии.
Ищет span с классом 'title'.
LICENSE_ID (str): XPath локатор отображаемого идентификатора лицензии.
Ищет span с классами 'title' и 'text_select' (выделяемый текст).
Содержит XPath локаторы для:
TITLE_LICENSE_INPUT_FORM (str): заголовка формы ввода лицензии
LICENSE_ID (str): отображаемого ID лицензии (выделяемый текст)
"""
TITLE_LICENSE_INPUT_FORM = "//span[@class='title']"
LICENSE_ID = "//span[@class='title text_select']"

View File

@ -1,15 +1,16 @@
class ToolbarLocators:
"""Локаторы элементов тулбара (панели инструментов).
"""Модуль toolbar_locators содержит локаторы элементов панели инструментов.
Атрибуты:
TITLE (str): XPath локатор заголовка тулбара.
Находится в навигационной панели (nav) внутри элемента с классом,
содержащим 'v-toolbar__title'.
TOOLTIP (str): XPath локатор активного всплывающего подсказывающего элемента.
Ищет div с классами, содержащими:
- 'v-tooltip__content' (основа тултипа)
- 'menuable__content__active' (показанное состояние)
Класс ToolbarLocators предоставляет XPath локаторы для взаимодействия
с элементами тулбара и всплывающими подсказками.
"""
class ToolbarLocators:
"""Локаторы элементов панели инструментов (тулбара).
Содержит XPath локаторы для:
TITLE (str): заголовка тулбара
TOOLTIP (str): активной всплывающей подсказки
"""
TITLE = "//nav//div[contains(@class, 'v-toolbar__title')]"
TOOLTIP = "//div[contains(@class,'v-tooltip__content menuable__content__active')]"

View File

@ -1,3 +1,9 @@
"""Модуль modal_add_user содержит класс для работы с модальным окном добавления пользователя.
Класс AddUserModalWindow наследует базовый функционал ModalWindowComponent
и реализует специфичные методы для работы с формами добавления пользователей.
"""
import re
from playwright.sync_api import Page
from tools.logger import get_logger
@ -15,20 +21,18 @@ logger = get_logger("ADD_USER_MODAL_WINDOW")
class AddUserModalWindow(ModalWindowComponent):
"""Класс модального окна добавления нового пользователя.
"""Модальное окно добавления нового пользователя.
Наследует функциональность базового модального окна и добавляет специфичные элементы:
- Поля ввода данных пользователя
- Чекбоксы
Наследует ModalWindowComponent и добавляет элементы формы:
- Поля ввода (имя, пароль, email и др.)
- Чекбоксы (Active Directory, Push-уведомления)
- Выпадающий список ролей
- Кнопки действий
Args:
page (Page): Экземпляр страницы Playwright
"""
def __init__(self, page: Page):
"""Инициализация компонентов модального окна добавления пользователя."""
"""Инициализирует элементы формы добавления пользователя."""
super().__init__(page)
# Локаторы элементов формы
@ -117,19 +121,9 @@ class AddUserModalWindow(ModalWindowComponent):
"""Заполняет форму и добавляет нового пользователя.
Args:
user_data (dict): Словарь с данными пользователя. Может содержать ключи:
- active_directory_checked (bool): Состояние чекбокса Active Directory
- name (str): Имя пользователя
- role (str): Роль пользователя
- password (str): Пароль пользователя
- commentary (str): Комментарий
- email (str): Email
- phone_number (str): Номер телефона
- push_notification_checked (bool): Состояние чекбокса Push-уведомлений
Raises:
AssertionError: Если подтверждающее окно не отображается
user_data (dict): Данные пользователя (имя, роль, пароль и др.)
"""
fields = user_data.keys()
if "active_directory_checked" in fields:
@ -187,20 +181,19 @@ class AddUserModalWindow(ModalWindowComponent):
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):
"""Проверяет наличие и корректность всех элементов модального окна.
"""Проверяет наличие и корректность всех элементов формы."""
Raises:
AssertionError: Если какой-либо элемент отсутствует или содержит некорректные данные
"""
self.check_by_window_title()
self.check_toolbar_button_presence("close")

View File

@ -1,3 +1,9 @@
"""Модуль modal_edit_user содержит класс для работы с окном редактирования пользователя.
Класс EditUserModalWindow наследует базовый функционал ModalWindowComponent
и реализует методы для редактирования данных пользователя.
"""
import re
from playwright.sync_api import Page
from tools.logger import get_logger
@ -13,21 +19,18 @@ logger = get_logger("EDIT_USER_MODAL_WINDOW")
class EditUserModalWindow(ModalWindowComponent):
"""Класс модального окна редактирования пользователя.
"""Модальное окно редактирования пользователя.
Наследует функциональность базового модального окна и добавляет:
- Поля редактирования данных пользователя
Наследует ModalWindowComponent и добавляет:
- Поля редактирования данных
- Чекбоксы настроек
- Выпадающий список ролей
- Кнопки действий (Сохранить, Удалить, Сбросить пароль)
Args:
page (Page): Экземпляр страницы Playwright
user_name (str): Имя редактируемого пользователя (используется в заголовке)
- Кнопки действий (Сохранить, Удалить и др.)
"""
def __init__(self, page: Page, user_name: str):
"""Инициализация компонентов модального окна редактирования пользователя."""
"""Инициализирует элементы формы редактирования пользователя."""
super().__init__(page)
# Локаторы элементов формы
@ -104,20 +107,19 @@ class EditUserModalWindow(ModalWindowComponent):
self.delete_user_confirm = ConfirmComponent(page, " Отмена ", " Удалить ")
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 delete_user(self):
"""Удаляет пользователя с подтверждением действия.
"""Удаляет пользователя с подтверждением."""
Raises:
AssertionError: Если окно подтверждения не отображается
"""
delete_button = self.get_button_by_name("delete")
delete_button.click()
@ -132,14 +134,9 @@ class EditUserModalWindow(ModalWindowComponent):
"""Редактирует данные пользователя.
Args:
user_data (dict): Словарь с обновляемыми данными пользователя. Может содержать:
- name (str): Имя пользователя
- role (str): Роль пользователя
- commentary (str): Комментарий
- email (str): Email
- phone_number (str): Номер телефона
- push_notification_checked (bool): Состояние чекбокса уведомлений
user_data (dict): Данные для обновления (имя, роль и др.)
"""
fields = user_data.keys()
if "name" in fields:
@ -185,19 +182,18 @@ class EditUserModalWindow(ModalWindowComponent):
def reset_password(self):
"""Инициирует сброс пароля пользователя."""
reset_password_button = self.get_button_by_name("reset_password")
reset_password_button.click()
def check_content(self, user_name, role):
"""Проверяет наличие и корректность всех элементов окна.
"""Проверяет наличие и корректность элементов окна.
Args:
user_name (str): Ожидаемое имя пользователя
role (str): Ожидаемая роль пользователя
Raises:
AssertionError: Если какой-либо элемент отсутствует или содержит некорректные данные
"""
self.check_by_window_title()
self.check_toolbar_button_presence("close")
self.check_toolbar_button_tooltip("close", "Закрыть")

View File

@ -1,4 +1,8 @@
"""Базовый класс страницы для работы с Playwright."""
"""Модуль base_page содержит базовый класс для работы со страницами.
Класс BasePage предоставляет общие методы для взаимодействия
со страницами через Playwright и выполнения API-запросов.
"""
import json
from typing import Any, Dict, List, Optional
@ -10,28 +14,56 @@ logger = get_logger("BASE_PAGE")
class BasePage:
"""Базовый класс для работы со страницами через Playwright."""
"""Базовый класс для работы со страницами через Playwright.
Содержит общие методы для:
- Навигации по страницам
- Выполнения API-запросов
- Проверок состояния страницы
"""
def __init__(self, page: Page) -> None:
"""Инициализирует базовую страницу.
Args:
page: Экземпляр страницы Playwright
"""
self.page = page
# Действия:
def current_url(self) -> str:
"""Возвращает текущий URL страницы."""
return self.page.url
def open(self, uri: str) -> Optional[Response]:
"""Открывает указанный URI на базовом URL."""
return self.page.goto(f"{host.get_base_url()}{uri}", wait_until='domcontentloaded')
def page_reload(self) -> None:
"""Перезагружает текущую страницу."""
self.page.reload()
def wait_for_timeout(self, timeout: int) -> None:
"""Ожидает указанное количество миллисекунд."""
self.page.wait_for_timeout(timeout)
def get_api_request_context(self) -> APIRequestContext:
"""Возвращает контекст для выполнения API-запросов."""
return self.page.context.request
def send_get_api_request(self, uri: str) -> Response:
"""Отправляет GET-запрос к API.
Args:
uri: URI для запроса
"""
api_request_context = self.get_api_request_context()
token = host.get_access_token()
headers = {"Accept": "application/json", "Authorization": f"Bearer {token}"}
@ -42,6 +74,13 @@ class BasePage:
return response
def send_post_api_request(self, uri: str, payload: Dict[str, Any]) -> Response:
"""Отправляет POST-запрос к API.
Args:
uri: URI для запроса
payload: Тело запроса
"""
api_request_context = self.get_api_request_context()
token = host.get_access_token()
headers = {"Accept": "application/json", "Authorization": f"Bearer {token}"}
@ -53,6 +92,12 @@ class BasePage:
return response
def get_response_body(self, response: Response) -> Optional[Dict[str, Any]]:
"""Возвращает тело ответа в формате JSON.
Args:
response: Объект ответа
"""
try:
response_body = response.json()
except json.JSONDecodeError:
@ -62,15 +107,38 @@ class BasePage:
# Проверки:
def check_URL(self, uri: str, msg: str) -> None:
"""Проверяет соответствие текущего URL ожидаемому.
Args:
uri: Ожидаемый URI
msg: Сообщение об ошибке
"""
expect(self.page).to_have_url(
f"{host.get_base_url()}{uri}",
timeout=60000
), msg
def check_equals(self, actual: Any, expected: Any, msg: str) -> None:
"""Проверяет равенство фактического и ожидаемого значений.
Args:
actual: Фактическое значение
expected: Ожидаемое значение
msg: Сообщение об ошибке
"""
assert actual == expected, msg
def check_lists_equals(self, actual: List[Any], expected: List[Any], msg: str) -> None:
"""Рекурсивно проверяет равенство двух списков.
Args:
actual: Фактический список
expected: Ожидаемый список
msg: Сообщение об ошибке
"""
def compare_lists(list1: List[Any], list2: List[Any]) -> bool:
if len(list1) != len(list2):
return False

View File

@ -1,3 +1,9 @@
"""Модуль license_tab содержит класс для работы с вкладкой 'Лицензии'.
Класс LicenseTab наследует BasePage и реализует методы для взаимодействия
с элементами вкладки лицензий и проверки их состояния.
"""
from playwright.sync_api import Page
from locators.text_locators import TextLocators
from locators.input_locators import InputLocators
@ -14,23 +20,19 @@ from pages.base_page import BasePage
class LicenseTab(BasePage):
"""Класс для работы с вкладкой 'Лицензии'.
Атрибуты:
page (Page): Экземпляр страницы Playwright.
toolbar (ToolbarComponent): Компонент панели инструментов.
json_container (JsonContainerComponent): Компонент контейнера с JSON-данными.
input_form_title (Text): Заголовок формы ввода.
license_id (Text): Текстовый элемент с идентификатором лицензии.
license_id_input (TextInput): Поле ввода идентификатора лицензии.
update_button (Button): Кнопка обновления лицензии.
error_alert (AlertComponent): Компонент алерта с ошибкой.
Содержит методы для:
- Взаимодействия с формой ввода лицензии
- Проверки содержимого JSON-контейнера
- Работы с элементами управления
"""
def __init__(self, page: Page) -> None:
"""Инициализирует элементы вкладки 'Лицензии'.
Args:
page: Экземпляр страницы Playwright.
page: Экземпляр страницы Playwright
"""
super().__init__(page)
self.toolbar = ToolbarComponent(page, "Лицензии")
@ -45,37 +47,42 @@ class LicenseTab(BasePage):
# Действия:
def fill_license_input_form(self, value: str) -> None:
"""Заполняет форму ввода идентификатора лицензии и нажимает кнопку обновления.
"""Заполняет форму ввода лицензии указанным значением.
Args:
value: Значение для ввода в поле идентификатора лицензии.
value: Значение для ввода
"""
self.license_id_input.clear()
self.license_id_input.input_value(value)
self.update_button.click()
def scroll_json_container_up(self) -> None:
"""Прокручивает JSON-контейнер вверх."""
loc = self.page.locator(JsonContainerLocators.SCROLL_CONTAINER).first
self.json_container.scroll_up(loc)
def scroll_json_container_down(self) -> None:
"""Прокручивает JSON-контейнер вниз."""
loc = self.page.locator(JsonContainerLocators.SCROLL_CONTAINER).first
self.json_container.scroll_down(loc)
# Проверки:
def check_json_container_verticall_scrolling(self) -> bool:
"""Проверяет возможность вертикальной прокрутки JSON-контейнера.
"""Проверяет возможность вертикальной прокрутки контейнера.
Returns:
bool: True если контейнер можно прокручивать, иначе False.
bool: Доступность прокрутки
"""
loc = self.page.locator(JsonContainerLocators.SCROLL_CONTAINER).first
return self.json_container.is_scrollable_vertically(loc)
def check_content(self) -> None:
"""Проверяет наличие всех основных элементов на вкладке."""
"""Проверяет наличие всех основных элементов вкладки."""
self.should_be_toolbar()
self.should_be_json_container()
self.should_be_input_form_title()
@ -83,27 +90,31 @@ class LicenseTab(BasePage):
self.should_be_update_button()
def should_be_error_alert_window_with_text(self, text: str) -> None:
"""Проверяет наличие и отсутствие алерта с указанным текстом.
"""Проверяет наличие/отсутствие алерта с указанным текстом.
Args:
text: Текст для проверки в алерте.
text: Текст для проверки
"""
self.error_alert.check_alert_presence(text)
self.error_alert.check_alert_absence(text)
def should_be_toolbar(self) -> None:
"""Проверяет наличие панели инструментов."""
self.toolbar.check_toolbar_presence("Toolbar is missing")
def should_be_json_container(self) -> None:
"""Проверяет наличие JSON-контейнера с информацией о лицензии."""
"""Проверяет наличие JSON-контейнера."""
self.json_container.check_presence(
JsonContainerLocators.CONTAINER,
"Json container with license info is missing"
)
def should_be_input_form_title(self) -> None:
"""Проверяет заголовок формы ввода и соответствие ID лицензии."""
"""Проверяет заголовок формы и соответствие ID лицензии."""
self.input_form_title.check_have_text(
"Идентификатор:",
"Input lisence id form title 'Идентификатор:' is missing"
@ -122,11 +133,13 @@ class LicenseTab(BasePage):
)
def should_be_empty_input_form(self) -> None:
"""Проверяет, что форма ввода идентификатора лицензии пуста."""
"""Проверяет пустоту формы ввода лицензии."""
self.license_id_input.check_empty_input("Input lisence id form is missing or not empty")
def should_be_update_button(self) -> None:
"""Проверяет наличие кнопки обновления лицензии с правильным текстом."""
"""Проверяет наличие кнопки обновления лицензии."""
button_text = "Обновить лицензию"
self.update_button.check_have_text(
button_text,
@ -134,7 +147,8 @@ class LicenseTab(BasePage):
)
def verify_json_container_content(self) -> None:
"""Проверяет соответствие содержимого JSON-контейнера данным из API."""
"""Проверяет соответствие данных контейнера данным из API."""
actual_data = self.json_container.read_data(JsonContainerLocators.CONTAINER)
# send request to backend to get license info

View File

@ -1,3 +1,9 @@
"""Модуль страницы авторизации.
Содержит класс LoginPage для работы с элементами страницы входа в систему.
Использует Playwright для взаимодействия с UI и обработки ответов сервера.
"""
from playwright.sync_api import Page
from elements.text_input_element import TextInput
from elements.button_element import Button
@ -10,11 +16,11 @@ class LoginPage(BasePage):
"""Класс для работы со страницей авторизации.
Атрибуты:
page (Page): Экземпляр страницы Playwright.
login_input (TextInput): Поле ввода логина.
password_input (TextInput): Поле ввода пароля.
login_button (Button): Кнопка входа.
error_alert (AlertComponent): Компонент алерта с ошибкой.
page: Экземпляр страницы Playwright.
login_input: Поле ввода логина.
password_input: Поле ввода пароля.
login_button: Кнопка входа.
error_alert: Компонент алерта с ошибкой.
"""
def __init__(self, page: Page) -> None:
@ -23,6 +29,7 @@ class LoginPage(BasePage):
Args:
page: Экземпляр страницы Playwright.
"""
super().__init__(page)
self.login_input = TextInput(page, page.get_by_label("Имя пользователя"), "login input")
@ -34,16 +41,17 @@ class LoginPage(BasePage):
def do_login(self, username: str = None, password: str = None) -> None:
"""Выполняет вход в систему.
Если username/password не указаны, использует значения из Constants.
Использует переданные учетные данные или значения из Constants.
Обрабатывает ответ сервера для получения токена доступа.
Args:
username: Логин пользователя. Если None, используется значение из Constants.
password: Пароль пользователя. Если None, используется значение из Constants.
username: Логин пользователя. По умолчанию из Constants.
password: Пароль пользователя. По умолчанию из Constants.
Raises:
AssertionError: Если после входа открылась неожиданная страница.
"""
def handle_response(response):
if "login" in response.url:
response_body = self.get_response_body(response)
@ -72,13 +80,14 @@ class LoginPage(BasePage):
def do_unsuccessful_login(self, username: str = "someuser", password: str = "password") -> None:
"""Выполняет попытку входа с неверными учетными данными.
Можно передать свои неверные данные или использовать значения по умолчанию.
Проверяет наличие сообщения об ошибке.
Проверяет наличие сообщения об ошибке. Можно передать свои данные
или использовать значения по умолчанию.
Args:
username: Неверный логин пользователя. По умолчанию "someuser".
password: Неверный пароль пользователя. По умолчанию "password".
username: Неверный логин. По умолчанию "someuser".
password: Неверный пароль. По умолчанию "password".
"""
self.open("")
self.login_input.clear()

View File

@ -1,3 +1,9 @@
"""Модуль главной страницы приложения.
Содержит класс MainPage для работы с элементами главной страницы.
Включает взаимодействие с панелью навигации, кнопками и карточкой пользователя.
"""
from playwright.sync_api import Page
from locators.navigation_panel_locators import NavigationPanelLocators
from locators.event_panel_locators import EventPanelLocators
@ -10,10 +16,10 @@ class MainPage(BasePage):
"""Класс для работы с главной страницей приложения.
Атрибуты:
page (Page): Экземпляр страницы Playwright.
navigation_panel (NavigationPanelComponent): Компонент панели навигации.
user_button (Button): Кнопка пользователя.
user_card (CardComponent): Карточка пользователя.
page: Экземпляр страницы Playwright.
navigation_panel: Компонент панели навигации.
user_button: Кнопка пользователя.
user_card: Карточка пользователя.
"""
def __init__(self, page: Page) -> None:
@ -22,6 +28,7 @@ class MainPage(BasePage):
Args:
page: Экземпляр страницы Playwright.
"""
super().__init__(page)
self.navigation_panel = NavigationPanelComponent(page)
@ -39,45 +46,53 @@ class MainPage(BasePage):
Args:
item_name: Название элемента для клика.
"""
self.navigation_panel.click_item(NavigationPanelLocators.PANEL_MAIN, item_name)
def click_configuration_navigation_panel_item(self, item_name: str) -> None:
"""Кликает по элементу подраздела 'Конфигурация' в панели навигации.
"""Кликает по элементу подраздела 'Конфигурация'.
Args:
item_name: Название элемента для клика.
"""
self.navigation_panel.click_sub_item(NavigationPanelLocators.PANEL_MAIN, 1, item_name)
def click_maintenance_navigation_panel_item(self, item_name: str) -> None:
"""Кликает по элементу подраздела 'Обслуживание' в панели навигации.
"""Кликает по элементу подраздела 'Обслуживание'.
Args:
item_name: Название элемента для клика.
"""
self.navigation_panel.click_sub_item(NavigationPanelLocators.PANEL_MAIN, 2, item_name)
def click_user_button(self) -> None:
"""Кликает по кнопке пользователя."""
self.user_button.click()
def do_logout(self) -> None:
"""Выполняет выход из системы."""
self.should_be_user_button()
self.click_user_button()
self.user_card.click_logout_button()
def scroll_navigation_panel_up(self) -> None:
"""Прокручивает панель навигации вверх."""
self.navigation_panel.scroll_up(NavigationPanelLocators.PANEL_SCROLL_CONTAINER)
def scroll_navigation_panel_down(self) -> None:
"""Прокручивает панель навигации вниз."""
self.navigation_panel.scroll_down(NavigationPanelLocators.PANEL_SCROLL_CONTAINER)
# Проверки:
def should_be_navigation_panel(self) -> None:
"""Проверяет наличие панели навигации."""
self.navigation_panel.check_presence(
NavigationPanelLocators.PANEL_MAIN,
"Navigation panel is missing"
@ -85,14 +100,16 @@ class MainPage(BasePage):
def should_be_user_button(self) -> None:
"""Проверяет наличие кнопки пользователя."""
self.user_button.check_presence("User button is missing on event panel")
def check_navigation_panel_verticall_scrolling(self) -> bool:
"""Проверяет возможность вертикальной прокрутки панели навигации.
"""Проверяет возможность вертикальной прокрутки панели.
Returns:
bool: True если панель можно прокручивать, иначе False.
bool: True если прокрутка возможна, иначе False.
"""
return self.navigation_panel.is_scrollable_vertically(
NavigationPanelLocators.PANEL_SCROLL_CONTAINER
)
@ -103,6 +120,7 @@ class MainPage(BasePage):
Args:
item_name: Название элемента для проверки.
"""
self.navigation_panel.check_item_visibility(
NavigationPanelLocators.PANEL_MAIN,
item_name

View File

@ -1,3 +1,9 @@
"""Модуль вкладки 'Статус обслуживания'.
Содержит класс ServiceStatusTab для работы с таблицей сервисов.
Позволяет проверять состояние и взаимодействовать с элементами вкладки.
"""
from playwright.sync_api import Page
from locators.table_locators import TableLocators
from components.toolbar_component import ToolbarComponent
@ -8,21 +14,23 @@ from pages.base_page import BasePage
class ServiceStatusTab(BasePage):
"""Класс для работы с вкладкой 'Статус обслуживания'.
Предоставляет методы для взаимодействия с таблицей сервисов и проверки её состояния.
Предоставляет методы для взаимодействия с таблицей сервисов и проверки
её состояния.
Args:
page (Page): Экземпляр страницы Playwright.
page: Экземпляр страницы Playwright.
"""
def __init__(self, page: Page) -> None:
"""Инициализация компонентов вкладки 'Статус обслуживания'."""
"""Инициализирует компоненты вкладки 'Статус обслуживания'."""
super().__init__(page)
self.toolbar = ToolbarComponent(page, "Статус обслуживания")
self.services_table = TableComponent(page)
def get_rows_count(self) -> int:
"""Возвращает количество строк в таблице сервисов (без учёта заголовка).
"""Возвращает количество строк в таблице (без заголовка).
Returns:
int: Количество строк с данными.
@ -30,6 +38,7 @@ class ServiceStatusTab(BasePage):
Raises:
AssertionError: Если таблица пуста.
"""
table_content = self.services_table.read(TableLocators.TABLE_WORK_AREA)
rows_count = len(table_content)
@ -40,23 +49,26 @@ class ServiceStatusTab(BasePage):
def scroll_services_table_up(self) -> None:
"""Прокручивает таблицу сервисов вверх."""
self.services_table.scroll_up(TableLocators.TABLE_SCROLL_CONTAINER)
def scroll_services_table_down(self) -> None:
"""Прокручивает таблицу сервисов вниз."""
self.services_table.scroll_down(TableLocators.TABLE_SCROLL_CONTAINER)
def check_services_table_content(self) -> None:
"""Проверяет содержимое таблицы сервисов.
Проверяет:
- Наличие заголовков таблицы
- Соответствие заголовков ожидаемым значениям
- Наличие хотя бы одной строки с данными
Проверяет заголовки и наличие данных в таблице.
Raises:
AssertionError: Если таблица пуста или заголовки не соответствуют ожидаемым.
AssertionError: Если таблица пуста или заголовки неверны.
"""
expected_headers = [
'Контейнер',
'Время создания',
@ -88,6 +100,7 @@ class ServiceStatusTab(BasePage):
Returns:
bool: True если прокрутка возможна, иначе False.
"""
return self.services_table.is_scrollable_vertically(
TableLocators.TABLE_SCROLL_CONTAINER
)
@ -96,27 +109,30 @@ class ServiceStatusTab(BasePage):
"""Проверяет видимость первой строки таблицы.
Raises:
AssertionError: Если первая строка не видна.
AssertionError: Если строка не видна.
"""
self.services_table.check_first_row_visibility(TableLocators.TABLE_WORK_AREA)
def check_services_table_last_row_visibility(self) -> None:
"""Проверяет видимость последней строки таблицы.
Raises:
AssertionError: Если последняя строка не видна.
AssertionError: Если строка не видна.
"""
self.services_table.check_last_row_visibility(TableLocators.TABLE_WORK_AREA)
def check_services_table_row_highlighting(self, row_index: int) -> None:
"""Проверяет выделение указанной строки таблицы.
Args:
row_index (int): Индекс проверяемой строки.
row_index: Индекс проверяемой строки.
Raises:
AssertionError: Если строка не выделена.
"""
self.services_table.check_row_highlighting(
TableLocators.TABLE_WORK_AREA,
row_index
@ -128,6 +144,7 @@ class ServiceStatusTab(BasePage):
Raises:
AssertionError: Если тулбар отсутствует.
"""
self.toolbar.check_toolbar_presence("Toolbar is missing")
def should_be_services_table(self) -> None:
@ -136,6 +153,7 @@ class ServiceStatusTab(BasePage):
Raises:
AssertionError: Если таблица отсутствует.
"""
self.services_table.check_presence(
TableLocators.TABLE_WORK_AREA,
"Service statuses table is missing"

View File

@ -1,3 +1,9 @@
"""Модуль вкладки 'Сессия'.
Содержит класс SessionsTab для работы с таблицей сессий.
Позволяет проверять состояние и взаимодействовать с элементами вкладки.
"""
from playwright.sync_api import Page, Locator
from locators.table_locators import TableLocators
from locators.button_locators import ButtonLocators
@ -10,21 +16,23 @@ from pages.base_page import BasePage
class SessionsTab(BasePage):
"""Класс для работы с вкладкой 'Сессия'.
Предоставляет методы для взаимодействия с таблицей сессий и проверки её состояния.
Предоставляет методы для взаимодействия с таблицей сессий и проверки
её состояния.
Args:
page (Page): Экземпляр страницы Playwright.
page: Экземпляр страницы Playwright.
"""
def __init__(self, page: Page) -> None:
"""Инициализация компонентов вкладки 'Сессия'."""
"""Инициализирует компоненты вкладки 'Сессия'."""
super().__init__(page)
self.toolbar = ToolbarComponent(page, "Сессия")
self.sessions_table = TableComponent(page)
def get_rows_count(self) -> int:
"""Возвращает количество строк в таблице сессий (без учёта заголовка).
"""Возвращает количество строк в таблице (без заголовка).
Returns:
int: Количество строк с данными.
@ -32,6 +40,7 @@ class SessionsTab(BasePage):
Raises:
AssertionError: Если таблица пуста.
"""
table_content = self.sessions_table.read(TableLocators.TABLE_WORK_AREA)
rows_count = len(table_content)
@ -44,14 +53,15 @@ class SessionsTab(BasePage):
"""Возвращает кнопку удаления сессии для указанной строки.
Args:
row_index (int): Индекс строки в таблице
row_index: Индекс строки в таблице.
Returns:
TooltipButton: Экземпляр кнопки с подсказкой
TooltipButton: Кнопка с подсказкой.
Raises:
AssertionError: Если строка не найдена.
"""
row_locator = self.sessions_table.get_row_locator(
TableLocators.TABLE_WORK_AREA,
row_index
@ -63,21 +73,24 @@ class SessionsTab(BasePage):
def scroll_sessions_table_up(self) -> None:
"""Прокручивает таблицу сессий вверх."""
self.sessions_table.scroll_up(TableLocators.TABLE_SCROLL_CONTAINER)
def scroll_sessions_table_down(self) -> None:
"""Прокручивает таблицу сессий вниз."""
self.sessions_table.scroll_down(TableLocators.TABLE_SCROLL_CONTAINER)
def check_sessions_table_content(self, verify: bool = False) -> None:
"""Проверяет содержимое таблицы сессий.
Args:
verify (bool, optional): Проверять соответствие данных из БД. По умолчанию False.
verify: Проверять соответствие данных из БД. По умолчанию False.
Raises:
AssertionError: Если таблица пуста или заголовки не соответствуют.
AssertionError: Если таблица пуста или заголовки неверны.
"""
expected_headers = [
'ID сессии',
'ID пользователя',
@ -115,6 +128,7 @@ class SessionsTab(BasePage):
Returns:
bool: True если прокрутка возможна, иначе False.
"""
return self.sessions_table.is_scrollable_vertically(
TableLocators.TABLE_SCROLL_CONTAINER
)
@ -123,27 +137,30 @@ class SessionsTab(BasePage):
"""Проверяет видимость первой строки таблицы.
Raises:
AssertionError: Если первая строка не видна.
AssertionError: Если строка не видна.
"""
self.sessions_table.check_first_row_visibility(TableLocators.TABLE_WORK_AREA)
def check_sessions_table_last_row_visibility(self) -> None:
"""Проверяет видимость последней строки таблицы.
Raises:
AssertionError: Если последняя строка не видна.
AssertionError: Если строка не видна.
"""
self.sessions_table.check_last_row_visibility(TableLocators.TABLE_WORK_AREA)
def check_sessions_table_row_highlighting(self, row_index: int) -> None:
"""Проверяет выделение указанной строки таблицы.
Args:
row_index (int): Индекс проверяемой строки.
row_index: Индекс проверяемой строки.
Raises:
AssertionError: Если строка не выделена.
"""
self.sessions_table.check_row_highlighting(
TableLocators.TABLE_WORK_AREA,
row_index
@ -155,6 +172,7 @@ class SessionsTab(BasePage):
Raises:
AssertionError: Если тулбар отсутствует.
"""
self.toolbar.check_toolbar_presence("Toolbar is missing")
def should_be_sessions_table(self) -> None:
@ -163,6 +181,7 @@ class SessionsTab(BasePage):
Raises:
AssertionError: Если таблица отсутствует.
"""
self.sessions_table.check_presence(
TableLocators.TABLE_WORK_AREA,
"Sessions table is missing"
@ -176,12 +195,13 @@ class SessionsTab(BasePage):
"""Проверяет наличие кнопки удаления в строке таблицы.
Args:
row_index (int): Индекс проверяемой строки
tooltip (str): Ожидаемый текст подсказки
row_index: Индекс проверяемой строки.
tooltip: Ожидаемый текст подсказки.
Raises:
AssertionError: Если кнопка отсутствует или подсказка не соответствует.
AssertionError: Если кнопка отсутствует или подсказка неверна.
"""
delete_button = self.get_delete_session_button_from_row(row_index)
delete_button.check_presence(
f"Delete session button is missing on {row_index} row"
@ -192,11 +212,12 @@ class SessionsTab(BasePage):
"""Сверяет данные таблицы с данными из БД.
Args:
sessions_table (list): Данные из таблицы на странице
sessions_table: Данные из таблицы на странице.
Raises:
AssertionError: Если данные не соответствуют.
"""
expected_sessions_list = []
# Отправка запроса к бэкенду для получения информации о сессиях

View File

@ -1,3 +1,9 @@
"""Модуль вкладки 'Пользователи'.
Содержит класс UsersTab для работы с таблицей пользователей.
Позволяет управлять пользователями через модальные окна и проверять их состояние.
"""
import re
from playwright.sync_api import Page
from modal_windows.modal_edit_user import EditUserModalWindow
@ -13,14 +19,15 @@ class UsersTab(BasePage):
"""Класс для работы с вкладкой 'Пользователи'.
Предоставляет методы для взаимодействия с таблицей пользователей,
модальными окнами добавления/редактирования и проверки состояния элементов.
модальными окнами и проверки состояния элементов.
Args:
page (Page): Экземпляр страницы Playwright.
page: Экземпляр страницы Playwright.
"""
def __init__(self, page: Page) -> None:
"""Инициализация компонентов вкладки 'Пользователи'."""
"""Инициализирует компоненты вкладки 'Пользователи'."""
super().__init__(page)
locator_button_1 = self.page.get_by_role("navigation").filter(
@ -40,15 +47,16 @@ class UsersTab(BasePage):
self.success_alert = AlertComponent(page, "success")
def add_modal_window(self, window_type: str, title: str) -> None:
"""Добавляет модальное окно в коллекцию окон.
"""Добавляет модальное окно в коллекцию.
Args:
window_type (str): Тип окна ('add_user' или 'edit_user')
title (str): Заголовок окна (имя пользователя для редактирования)
window_type: Тип окна ('add_user' или 'edit_user').
title: Заголовок окна.
Raises:
AssertionError: Если указан неподдерживаемый тип окна.
AssertionError: Если тип окна не поддерживается.
"""
if window_type == "add_user":
self.modal_windows["add_user"] = AddUserModalWindow(self.page)
elif window_type == "edit_user":
@ -60,14 +68,15 @@ class UsersTab(BasePage):
"""Возвращает модальное окно по заголовку.
Args:
title (str): Заголовок окна
title: Заголовок окна.
Returns:
ModalWindowComponent: Экземпляр модального окна
ModalWindowComponent: Экземпляр модального окна.
Raises:
AssertionError: Если окно не найдено.
"""
modal_window = self.modal_windows.get(title)
if modal_window is None:
assert False, f"Modal window with title '{title}' not found"
@ -77,11 +86,12 @@ class UsersTab(BasePage):
"""Удаляет модальное окно из коллекции.
Args:
title (str): Заголовок окна
title: Заголовок окна.
Raises:
AssertionError: Если окно не найдено.
"""
if self.modal_windows.get(title) is None:
assert False, f"Modal window with title '{title}' not found"
self.modal_windows[title] = None
@ -90,8 +100,9 @@ class UsersTab(BasePage):
"""Закрывает модальное окно через кнопку в тулбаре.
Args:
title (str): Заголовок окна
title: Заголовок окна.
"""
modal_window = self.get_modal_window(title)
modal_window.close_window_by_toolbar_button()
self.delete_modal_window(title)
@ -100,45 +111,51 @@ class UsersTab(BasePage):
"""Закрывает модальное окно через кнопку закрытия.
Args:
title (str): Заголовок окна
title: Заголовок окна.
"""
modal_window = self.get_modal_window(title)
modal_window.close_window()
self.delete_modal_window(title)
def close_add_user_window_by_toolbar_button(self) -> None:
"""Закрывает окно добавления пользователя через кнопку в тулбаре."""
"""Закрывает окно добавления пользователя через тулбар."""
self.close_modal_window_by_toolbar_button("add_user")
def close_add_user_window(self) -> None:
"""Закрывает окно добавления пользователя."""
self.close_modal_window("add_user")
def close_edit_user_window_by_toolbar_button(self, title: str) -> None:
"""Закрывает окно редактирования пользователя через кнопку в тулбаре.
"""Закрывает окно редактирования через кнопку в тулбаре.
Args:
title (str): Имя пользователя (заголовок окна)
title: Имя пользователя (заголовок окна).
"""
self.close_modal_window_by_toolbar_button(title)
def close_edit_user_window(self, title: str) -> None:
"""Закрывает окно редактирования пользователя.
Args:
title (str): Имя пользователя (заголовок окна)
title: Имя пользователя (заголовок окна).
"""
self.close_modal_window(title)
def add_new_user(self, user_data: dict) -> None:
"""Добавляет нового пользователя.
Args:
user_data (dict): Данные пользователя
user_data: Данные пользователя.
Raises:
AssertionError: Если не отображается сообщение об успешном добавлении.
AssertionError: Если нет сообщения об успешном добавлении.
"""
self.get_modal_window("add_user").new_user(user_data)
self.success_alert.check_alert_presence(' Новый пользователь \n успешно добавлен! ')
self.success_alert.check_alert_absence(' Новый пользователь \n успешно добавлен! ')
@ -147,11 +164,12 @@ class UsersTab(BasePage):
"""Удаляет пользователя.
Args:
user_name (str): Имя пользователя
user_name: Имя пользователя.
Raises:
AssertionError: Если не отображается сообщение об успешном удалении.
AssertionError: Если нет сообщения об успешном удалении.
"""
self.get_modal_window(user_name).delete_user()
self.success_alert.check_alert_presence('\nПользователь удалён\n')
self.success_alert.check_alert_absence('\nПользователь удалён\n')
@ -160,12 +178,13 @@ class UsersTab(BasePage):
"""Редактирует данные пользователя.
Args:
user_name (str): Имя пользователя
user_data (dict): Новые данные пользователя
user_name: Имя пользователя.
user_data: Новые данные пользователя.
Raises:
AssertionError: Если не отображается сообщение об успешном обновлении.
AssertionError: Если нет сообщения об успешном обновлении.
"""
self.get_modal_window(user_name).edit_user(user_data)
self.success_alert.check_alert_presence('\nОбновление успешно\n')
self.success_alert.check_alert_absence('\nОбновление успешно\n')
@ -174,11 +193,12 @@ class UsersTab(BasePage):
"""Сбрасывает пароль пользователя.
Args:
user_name (str): Имя пользователя
user_name: Имя пользователя.
Returns:
str: Новый пароль (если получен)
str: Новый пароль (если получен).
"""
new_password = ""
self.get_modal_window(user_name).reset_password()
@ -193,15 +213,16 @@ class UsersTab(BasePage):
"""Ищет пользователя в таблице.
Args:
name (str): Имя пользователя
role (str): Роль пользователя
name: Имя пользователя.
role: Роль пользователя.
Returns:
int: Индекс строки или -1 если не найден
int: Индекс строки или -1 если не найден.
Raises:
AssertionError: Если таблица пуста.
"""
table_content = self.users_table.read(TableLocators.TABLE_WORK_AREA)
if len(table_content) == 0:
assert False, "The contents of the table are missing"
@ -219,6 +240,7 @@ class UsersTab(BasePage):
Raises:
AssertionError: Если кнопки недоступны или окно не открылось.
"""
if self.toolbar.is_button_not_present("close"):
self.toolbar.check_button_presence("edit")
self.toolbar.click_button("edit")
@ -232,14 +254,15 @@ class UsersTab(BasePage):
"""Открывает окно редактирования по индексу строки.
Args:
row_index (int): Индекс строки в таблице
row_index: Индекс строки в таблице.
Returns:
tuple: (имя пользователя, роль)
tuple: (имя пользователя, роль).
Raises:
AssertionError: Если таблица пуста или индекс вне диапазона.
"""
tmp_dict = {"admin": "Администратор", "manager": "Контактное лицо", "operator": "Оператор"}
table_content = self.users_table.read(TableLocators.TABLE_WORK_AREA)
@ -265,15 +288,16 @@ class UsersTab(BasePage):
return user_name, role
def open_edit_user_page_by_user(self, user_name: str, role: str) -> None:
"""Открывает окно редактирования по имени пользователя и роли.
"""Открывает окно редактирования по имени и роли.
Args:
user_name (str): Имя пользователя
role (str): Роль пользователя
user_name: Имя пользователя.
role: Роль пользователя.
Raises:
AssertionError: Если пользователь не найден.
"""
row_index = self.find_user_in_table(user_name, role)
if row_index == -1:
assert False, f"User with name {user_name} and role {role} has not been found"
@ -286,11 +310,12 @@ class UsersTab(BasePage):
"""Проверяет содержимое таблицы пользователей.
Args:
verify (bool, optional): Проверять соответствие данных из БД. По умолчанию False.
verify: Проверять соответствие данных из БД. По умолчанию False.
Raises:
AssertionError: Если таблица пуста или заголовки не соответствуют.
AssertionError: Если таблица пуста или заголовки неверны.
"""
expected_headers = ['Имя пользователя', 'Тип авторизации', 'Роль', 'E-mail', 'Номер для СМС']
table_content = self.users_table.read(TableLocators.TABLE_WORK_AREA)
@ -312,15 +337,17 @@ class UsersTab(BasePage):
def check_add_user_window_content(self) -> None:
"""Проверяет содержимое окна добавления пользователя."""
self.get_modal_window("add_user").check_content()
def check_edit_user_window_content(self, user_name: str, role: str) -> None:
"""Проверяет содержимое окна редактирования пользователя.
"""Проверяет содержимое окна редактирования.
Args:
user_name (str): Имя пользователя
role (str): Роль пользователя
user_name: Имя пользователя.
role: Роль пользователя.
"""
edit_user_window = self.get_modal_window(user_name)
edit_user_window.check_content(user_name, role)
@ -330,6 +357,7 @@ class UsersTab(BasePage):
Raises:
AssertionError: Если тулбар или кнопка редактирования отсутствуют.
"""
self.toolbar.check_toolbar_presence("Toolbar is missing")
self.toolbar.check_button_presence("edit")
@ -337,8 +365,9 @@ class UsersTab(BasePage):
"""Проверяет наличие и функциональность кнопок тулбара.
Raises:
AssertionError: Если кнопки недоступны или имеют некорректные подсказки.
AssertionError: Если кнопки недоступны или подсказки неверны.
"""
self.toolbar.check_button_presence("edit")
self.toolbar.check_button_tooltip("edit", "Редактировать")
@ -357,6 +386,7 @@ class UsersTab(BasePage):
Raises:
AssertionError: Если таблица отсутствует.
"""
self.users_table.check_presence(
TableLocators.TABLE_WORK_AREA,
"Users table is missing"
@ -366,12 +396,13 @@ class UsersTab(BasePage):
"""Проверяет наличие пользователя в таблице.
Args:
name (str): Имя пользователя
role (str): Роль пользователя
name: Имя пользователя.
role: Роль пользователя.
Raises:
AssertionError: Если пользователь не найден.
"""
found = self.find_user_in_table(name, role)
if found == -1:
assert False, f"User with name {name} and role {role} has not been found"
@ -380,12 +411,13 @@ class UsersTab(BasePage):
"""Проверяет отсутствие пользователя в таблице.
Args:
name (str): Имя пользователя
role (str): Роль пользователя
name: Имя пользователя.
role: Роль пользователя.
Raises:
AssertionError: Если пользователь найден.
"""
found = self.find_user_in_table(name, role)
if found != -1:
assert False, f"User with name {name} and role {role} has been found"
@ -394,11 +426,12 @@ class UsersTab(BasePage):
"""Сверяет данные таблицы с данными из БД.
Args:
users_table (list): Данные из таблицы на странице
users_table: Данные из таблицы на странице.
Raises:
AssertionError: Если данные не соответствуют.
"""
expected_users_list = []
tmp_dict = {"admin": "Администратор", "manager": "Контактное лицо", "operator": "Оператор"}

View File

@ -492,18 +492,18 @@
</li>
<li class="md-nav__item">
<a href="#components.alert_component.AlertComponent.check_absence" class="md-nav__link">
<a href="#components.alert_component.AlertComponent.check_alert_absence" class="md-nav__link">
<span class="md-ellipsis">
check_absence
check_alert_absence
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#components.alert_component.AlertComponent.check_presence" class="md-nav__link">
<a href="#components.alert_component.AlertComponent.check_alert_presence" class="md-nav__link">
<span class="md-ellipsis">
check_presence
check_alert_presence
</span>
</a>
@ -1739,18 +1739,18 @@
</li>
<li class="md-nav__item">
<a href="#components.alert_component.AlertComponent.check_absence" class="md-nav__link">
<a href="#components.alert_component.AlertComponent.check_alert_absence" class="md-nav__link">
<span class="md-ellipsis">
check_absence
check_alert_absence
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#components.alert_component.AlertComponent.check_presence" class="md-nav__link">
<a href="#components.alert_component.AlertComponent.check_alert_presence" class="md-nav__link">
<span class="md-ellipsis">
check_presence
check_alert_presence
</span>
</a>
@ -1804,6 +1804,10 @@
<a id="components.alert_component"></a>
<div class="doc doc-contents first">
<p>Модуль для работы с компонентом alert-окна в Playwright.</p>
<p>Содержит класс AlertComponent для взаимодействия с различными типами
alert-окон (error, success, info, warning) и проверки их состояния.</p>
@ -1837,17 +1841,11 @@
Bases: <code><a class="autorefs autorefs-internal" title="BaseComponent (components.base_component.BaseComponent)" href="../base_component/#components.base_component.BaseComponent">BaseComponent</a></code></p>
<p>Компонент для работы с alert-окнами.</p>
<p>Поддерживает различные типы alert-окон: error, success, info, warning.</p>
<p>Компонент для работы с alert-окнами Playwright.</p>
<p>Поддерживает типы: error, success, info, warning.
Позволяет проверять наличие, отсутствие и текст сообщений.</p>
<details class="атрибуты" open>
<summary>Атрибуты</summary>
<p>page: экземпляр страницы Playwright
alert_type: тип alert-окна (error/success/info/warning)
text: текстовый элемент сообщения alert-окна</p>
</details>
@ -1855,11 +1853,7 @@ text: текстовый элемент сообщения alert-окна</p>
<details class="quote">
<summary>Source code in <code>components\alert_component.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">11</span>
<span class="normal">12</span>
<span class="normal">13</span>
<span class="normal">14</span>
<span class="normal">15</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">15</span>
<span class="normal">16</span>
<span class="normal">17</span>
<span class="normal">18</span>
@ -1933,27 +1927,29 @@ text: текстовый элемент сообщения alert-окна</p>
<span class="normal">86</span>
<span class="normal">87</span>
<span class="normal">88</span>
<span class="normal">89</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">AlertComponent</span><span class="p">(</span><span class="n">BaseComponent</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Компонент для работы с alert-окнами.</span>
<span class="normal">89</span>
<span class="normal">90</span>
<span class="normal">91</span>
<span class="normal">92</span>
<span class="normal">93</span>
<span class="normal">94</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">AlertComponent</span><span class="p">(</span><span class="n">BaseComponent</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Компонент для работы с alert-окнами Playwright.</span>
<span class="sd"> Поддерживает различные типы alert-окон: error, success, info, warning.</span>
<span class="sd"> Атрибуты:</span>
<span class="sd"> page: экземпляр страницы Playwright</span>
<span class="sd"> alert_type: тип alert-окна (error/success/info/warning)</span>
<span class="sd"> text: текстовый элемент сообщения alert-окна</span>
<span class="sd"> Поддерживает типы: error, success, info, warning.</span>
<span class="sd"> Позволяет проверять наличие, отсутствие и текст сообщений.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<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="n">alert_type</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Инициализация компонента alert-окна.</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Инициализирует компонент alert-окна.</span>
<span class="sd"> Args:</span>
<span class="sd"> page: экземпляр страницы Playwright</span>
<span class="sd"> alert_type: тип alert-окна (error/success/info/warning)</span>
<span class="sd"> page: Экземпляр страницы Playwright.</span>
<span class="sd"> alert_type: Тип alert-окна (error/success/info/warning).</span>
<span class="sd"> Raises:</span>
<span class="sd"> ValueError: если передан неподдерживаемый тип alert-окна</span>
<span class="sd"> ValueError: Если передан неподдерживаемый тип alert-окна.</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>
<span class="n">alert_types</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;error&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">,</span> <span class="s2">&quot;info&quot;</span><span class="p">,</span> <span class="s2">&quot;warning&quot;</span><span class="p">]</span>
@ -1961,57 +1957,61 @@ text: текстовый элемент сообщения alert-окна</p>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Unsupported type of alert window&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">alert_type</span> <span class="o">=</span> <span class="n">alert_type</span>
<span class="bp">self</span><span class="o">.</span><span class="n">text</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="sa">f</span><span class="s2">&quot;//div[@class=&#39;v-alert </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">alert_type</span><span class="si">}</span><span class="s2">&#39;]/div&quot;</span><span class="p">,</span> <span class="s2">&quot;Alert message&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">text</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="sa">f</span><span class="s2">&quot;//div[@class=&#39;v-alert </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">alert_type</span><span class="si">}</span><span class="s2">&#39;]/div&quot;</span><span class="p">,</span> <span class="s2">&quot;Alert message&quot;</span><span class="p">)</span>
<span class="c1"># Действия:</span>
<span class="k">def</span><span class="w"> </span><span class="nf">get_text</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Получение текста сообщения из alert-окна.</span>
<span class="k">def</span><span class="w"> </span><span class="nf">get_text</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;Возвращает текст сообщения из alert-окна.</span>
<span class="sd"> Returns:</span>
<span class="sd"> str: текст сообщения alert-окна</span>
<span class="sd"> str: Текст сообщения.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">get_text</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="c1"># Проверки:</span>
<span class="k">def</span><span class="w"> </span><span class="nf">check_presence</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="w"> </span><span class="sd">&quot;&quot;&quot;Проверка наличия alert-окна с заданным текстом.</span>
<span class="k">def</span><span class="w"> </span><span class="nf">check_alert_presence</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="w"> </span><span class="sd">&quot;&quot;&quot;Проверяет наличие alert-окна с заданным текстом.</span>
<span class="sd"> Args:</span>
<span class="sd"> text: текст для проверки (если пустая строка - проверяется только наличие окна)</span>
<span class="sd"> text: Текст для проверки. Если пустая строка - проверяет только</span>
<span class="sd"> наличие окна.</span>
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: если alert-окно не найдено</span>
<span class="sd"> AssertionError: Если alert-окно не найдено.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">msg</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;No </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">alert_type</span><span class="si">}</span><span class="s2"> alert window on page&quot;</span>
<span class="k">if</span> <span class="n">text</span> <span class="o">==</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
<span class="n">expect</span><span class="p">(</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;alert&quot;</span><span class="p">))</span><span class="o">.</span><span class="n">to_be_visible</span><span class="p">(),</span> <span class="n">msg</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">expect</span><span class="p">(</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;alert&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">text</span><span class="p">))</span><span class="o">.</span><span class="n">to_be_visible</span><span class="p">(),</span> <span class="n">msg</span>
<span class="k">def</span><span class="w"> </span><span class="nf">check_absence</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="n">timeout</span><span class="o">=</span><span class="mi">30000</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Проверка отсутствия alert-окна с заданным текстом.</span>
<span class="k">def</span><span class="w"> </span><span class="nf">check_alert_absence</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="n">timeout</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">30000</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Проверяет отсутствие alert-окна с заданным текстом.</span>
<span class="sd"> Args:</span>
<span class="sd"> text: текст для проверки</span>
<span class="sd"> timeout: время ожидания исчезновения (в миллисекундах)</span>
<span class="sd"> text: Текст для проверки.</span>
<span class="sd"> timeout: Время ожидания исчезновения (мс).</span>
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: если alert-окно не исчезает в течение заданного времени</span>
<span class="sd"> AssertionError: Если окно не исчезает в течение заданного времени.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">seconds</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">timeout</span><span class="o">/</span><span class="mi">1000</span><span class="p">)</span>
<span class="n">msg</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;Alert </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">alert_type</span><span class="si">}</span><span class="s2"> window should disappear after </span><span class="si">{</span><span class="n">seconds</span><span class="si">}</span><span class="s2"> seconds&quot;</span>
<span class="n">msg</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;Alert </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">alert_type</span><span class="si">}</span><span class="s2"> window should disappear after </span><span class="si">{</span><span class="n">seconds</span><span class="si">}</span><span class="s2"> seconds&quot;</span>
<span class="n">expect</span><span class="p">(</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;alert&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">text</span><span class="p">))</span><span class="o">.</span><span class="n">to_be_hidden</span><span class="p">(</span><span class="n">timeout</span><span class="o">=</span><span class="n">timeout</span><span class="p">),</span> <span class="n">msg</span>
<span class="k">def</span><span class="w"> </span><span class="nf">check_text</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">alert_text</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Проверка точного соответствия текста в alert-окне.</span>
<span class="k">def</span><span class="w"> </span><span class="nf">check_text</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">alert_text</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Проверяет точное соответствие текста в alert-окне.</span>
<span class="sd"> Args:</span>
<span class="sd"> alert_text: ожидаемый текст сообщения</span>
<span class="sd"> alert_text: Ожидаемый текст сообщения.</span>
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: если текст не соответствует ожидаемому</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">text</span><span class="o">.</span><span class="n">check_have_text</span><span class="p">(</span><span class="n">alert_text</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;Unexpected message in alert </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">alert_type</span><span class="si">}</span><span class="s2"> window&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">check_have_text</span><span class="p">(</span><span class="n">alert_text</span><span class="p">,</span>
<span class="sa">f</span><span class="s2">&quot;Unexpected message in alert </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">alert_type</span><span class="si">}</span><span class="s2"> window&quot;</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
@ -2038,7 +2038,7 @@ text: текстовый элемент сообщения alert-окна</p>
<div class="doc doc-contents ">
<p>Инициализация компонента alert-окна.</p>
<p>Инициализирует компонент alert-окна.</p>
<p><span class="doc-section-title">Parameters:</span></p>
@ -2061,7 +2061,7 @@ text: текстовый элемент сообщения alert-окна</p>
</td>
<td>
<div class="doc-md-description">
<p>экземпляр страницы Playwright</p>
<p>Экземпляр страницы Playwright.</p>
</div>
</td>
<td>
@ -2077,7 +2077,7 @@ text: текстовый элемент сообщения alert-окна</p>
</td>
<td>
<div class="doc-md-description">
<p>тип alert-окна (error/success/info/warning)</p>
<p>Тип alert-окна (error/success/info/warning).</p>
</div>
</td>
<td>
@ -2103,7 +2103,7 @@ text: текстовый элемент сообщения alert-окна</p>
</td>
<td>
<div class="doc-md-description">
<p>если передан неподдерживаемый тип alert-окна</p>
<p>Если передан неподдерживаемый тип alert-окна.</p>
</div>
</td>
</tr>
@ -2130,16 +2130,18 @@ text: текстовый элемент сообщения alert-окна</p>
<span class="normal">36</span>
<span class="normal">37</span>
<span class="normal">38</span>
<span class="normal">39</span></pre></div></td><td class="code"><div><pre><span></span><code><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="n">alert_type</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Инициализация компонента alert-окна.</span>
<span class="normal">39</span>
<span class="normal">40</span></pre></div></td><td class="code"><div><pre><span></span><code><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="n">alert_type</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Инициализирует компонент alert-окна.</span>
<span class="sd"> Args:</span>
<span class="sd"> page: экземпляр страницы Playwright</span>
<span class="sd"> alert_type: тип alert-окна (error/success/info/warning)</span>
<span class="sd"> page: Экземпляр страницы Playwright.</span>
<span class="sd"> alert_type: Тип alert-окна (error/success/info/warning).</span>
<span class="sd"> Raises:</span>
<span class="sd"> ValueError: если передан неподдерживаемый тип alert-окна</span>
<span class="sd"> ValueError: Если передан неподдерживаемый тип alert-окна.</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>
<span class="n">alert_types</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;error&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">,</span> <span class="s2">&quot;info&quot;</span><span class="p">,</span> <span class="s2">&quot;warning&quot;</span><span class="p">]</span>
@ -2147,7 +2149,7 @@ text: текстовый элемент сообщения alert-окна</p>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Unsupported type of alert window&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">alert_type</span> <span class="o">=</span> <span class="n">alert_type</span>
<span class="bp">self</span><span class="o">.</span><span class="n">text</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="sa">f</span><span class="s2">&quot;//div[@class=&#39;v-alert </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">alert_type</span><span class="si">}</span><span class="s2">&#39;]/div&quot;</span><span class="p">,</span> <span class="s2">&quot;Alert message&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">text</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="sa">f</span><span class="s2">&quot;//div[@class=&#39;v-alert </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">alert_type</span><span class="si">}</span><span class="s2">&#39;]/div&quot;</span><span class="p">,</span> <span class="s2">&quot;Alert message&quot;</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
@ -2157,15 +2159,15 @@ text: текстовый элемент сообщения alert-окна</p>
<div class="doc doc-object doc-function">
<h3 id="components.alert_component.AlertComponent.check_absence" class="doc doc-heading">
<code class="highlight language-python"><span class="n">check_absence</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="mi">30000</span><span class="p">)</span></code>
<h3 id="components.alert_component.AlertComponent.check_alert_absence" class="doc doc-heading">
<code class="highlight language-python"><span class="n">check_alert_absence</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="mi">30000</span><span class="p">)</span></code>
</h3>
<div class="doc doc-contents ">
<p>Проверка отсутствия alert-окна с заданным текстом.</p>
<p>Проверяет отсутствие alert-окна с заданным текстом.</p>
<p><span class="doc-section-title">Parameters:</span></p>
@ -2184,10 +2186,11 @@ text: текстовый элемент сообщения alert-окна</p>
<code>text</code>
</td>
<td>
<code><span title="str">str</span></code>
</td>
<td>
<div class="doc-md-description">
<p>текст для проверки</p>
<p>Текст для проверки.</p>
</div>
</td>
<td>
@ -2199,10 +2202,11 @@ text: текстовый элемент сообщения alert-окна</p>
<code>timeout</code>
</td>
<td>
<code><span title="int">int</span></code>
</td>
<td>
<div class="doc-md-description">
<p>время ожидания исчезновения (в миллисекундах)</p>
<p>Время ожидания исчезновения (мс).</p>
</div>
</td>
<td>
@ -2228,7 +2232,7 @@ text: текстовый элемент сообщения alert-окна</p>
</td>
<td>
<div class="doc-md-description">
<p>если alert-окно не исчезает в течение заданного времени</p>
<p>Если окно не исчезает в течение заданного времени.</p>
</div>
</td>
</tr>
@ -2238,9 +2242,7 @@ text: текстовый элемент сообщения alert-окна</p>
<details class="quote">
<summary>Source code in <code>components\alert_component.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">66</span>
<span class="normal">67</span>
<span class="normal">68</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">68</span>
<span class="normal">69</span>
<span class="normal">70</span>
<span class="normal">71</span>
@ -2250,18 +2252,22 @@ text: текстовый элемент сообщения alert-окна</p>
<span class="normal">75</span>
<span class="normal">76</span>
<span class="normal">77</span>
<span class="normal">78</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">check_absence</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="n">timeout</span><span class="o">=</span><span class="mi">30000</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Проверка отсутствия alert-окна с заданным текстом.</span>
<span class="normal">78</span>
<span class="normal">79</span>
<span class="normal">80</span>
<span class="normal">81</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">check_alert_absence</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="n">timeout</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">30000</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Проверяет отсутствие alert-окна с заданным текстом.</span>
<span class="sd"> Args:</span>
<span class="sd"> text: текст для проверки</span>
<span class="sd"> timeout: время ожидания исчезновения (в миллисекундах)</span>
<span class="sd"> text: Текст для проверки.</span>
<span class="sd"> timeout: Время ожидания исчезновения (мс).</span>
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: если alert-окно не исчезает в течение заданного времени</span>
<span class="sd"> AssertionError: Если окно не исчезает в течение заданного времени.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">seconds</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">timeout</span><span class="o">/</span><span class="mi">1000</span><span class="p">)</span>
<span class="n">msg</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;Alert </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">alert_type</span><span class="si">}</span><span class="s2"> window should disappear after </span><span class="si">{</span><span class="n">seconds</span><span class="si">}</span><span class="s2"> seconds&quot;</span>
<span class="n">msg</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;Alert </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">alert_type</span><span class="si">}</span><span class="s2"> window should disappear after </span><span class="si">{</span><span class="n">seconds</span><span class="si">}</span><span class="s2"> seconds&quot;</span>
<span class="n">expect</span><span class="p">(</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;alert&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">text</span><span class="p">))</span><span class="o">.</span><span class="n">to_be_hidden</span><span class="p">(</span><span class="n">timeout</span><span class="o">=</span><span class="n">timeout</span><span class="p">),</span> <span class="n">msg</span>
</code></pre></div></td></tr></table></div>
</details>
@ -2272,15 +2278,15 @@ text: текстовый элемент сообщения alert-окна</p>
<div class="doc doc-object doc-function">
<h3 id="components.alert_component.AlertComponent.check_presence" class="doc doc-heading">
<code class="highlight language-python"><span class="n">check_presence</span><span class="p">(</span><span class="n">text</span><span class="p">)</span></code>
<h3 id="components.alert_component.AlertComponent.check_alert_presence" class="doc doc-heading">
<code class="highlight language-python"><span class="n">check_alert_presence</span><span class="p">(</span><span class="n">text</span><span class="p">)</span></code>
</h3>
<div class="doc doc-contents ">
<p>Проверка наличия alert-окна с заданным текстом.</p>
<p>Проверяет наличие alert-окна с заданным текстом.</p>
<p><span class="doc-section-title">Parameters:</span></p>
@ -2299,10 +2305,12 @@ text: текстовый элемент сообщения alert-окна</p>
<code>text</code>
</td>
<td>
<code><span title="str">str</span></code>
</td>
<td>
<div class="doc-md-description">
<p>текст для проверки (если пустая строка - проверяется только наличие окна)</p>
<p>Текст для проверки. Если пустая строка - проверяет только
наличие окна.</p>
</div>
</td>
<td>
@ -2328,7 +2336,7 @@ text: текстовый элемент сообщения alert-окна</p>
</td>
<td>
<div class="doc-md-description">
<p>если alert-окно не найдено</p>
<p>Если alert-окно не найдено.</p>
</div>
</td>
</tr>
@ -2351,15 +2359,19 @@ text: текстовый элемент сообщения alert-окна</p>
<span class="normal">61</span>
<span class="normal">62</span>
<span class="normal">63</span>
<span class="normal">64</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">check_presence</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="w"> </span><span class="sd">&quot;&quot;&quot;Проверка наличия alert-окна с заданным текстом.</span>
<span class="normal">64</span>
<span class="normal">65</span>
<span class="normal">66</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">check_alert_presence</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="w"> </span><span class="sd">&quot;&quot;&quot;Проверяет наличие alert-окна с заданным текстом.</span>
<span class="sd"> Args:</span>
<span class="sd"> text: текст для проверки (если пустая строка - проверяется только наличие окна)</span>
<span class="sd"> text: Текст для проверки. Если пустая строка - проверяет только</span>
<span class="sd"> наличие окна.</span>
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: если alert-окно не найдено</span>
<span class="sd"> AssertionError: Если alert-окно не найдено.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">msg</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;No </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">alert_type</span><span class="si">}</span><span class="s2"> alert window on page&quot;</span>
<span class="k">if</span> <span class="n">text</span> <span class="o">==</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
<span class="n">expect</span><span class="p">(</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;alert&quot;</span><span class="p">))</span><span class="o">.</span><span class="n">to_be_visible</span><span class="p">(),</span> <span class="n">msg</span>
@ -2382,7 +2394,7 @@ text: текстовый элемент сообщения alert-окна</p>
<div class="doc doc-contents ">
<p>Проверка точного соответствия текста в alert-окне.</p>
<p>Проверяет точное соответствие текста в alert-окне.</p>
<p><span class="doc-section-title">Parameters:</span></p>
@ -2401,10 +2413,11 @@ text: текстовый элемент сообщения alert-окна</p>
<code>alert_text</code>
</td>
<td>
<code><span title="str">str</span></code>
</td>
<td>
<div class="doc-md-description">
<p>ожидаемый текст сообщения</p>
<p>Ожидаемый текст сообщения.</p>
</div>
</td>
<td>
@ -2430,7 +2443,7 @@ text: текстовый элемент сообщения alert-окна</p>
</td>
<td>
<div class="doc-md-description">
<p>если текст не соответствует ожидаемому</p>
<p>Если текст не соответствует ожидаемому.</p>
</div>
</td>
</tr>
@ -2440,25 +2453,29 @@ text: текстовый элемент сообщения alert-окна</p>
<details class="quote">
<summary>Source code in <code>components\alert_component.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">80</span>
<span class="normal">81</span>
<span class="normal">82</span>
<span class="normal">83</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">83</span>
<span class="normal">84</span>
<span class="normal">85</span>
<span class="normal">86</span>
<span class="normal">87</span>
<span class="normal">88</span>
<span class="normal">89</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">check_text</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">alert_text</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Проверка точного соответствия текста в alert-окне.</span>
<span class="normal">89</span>
<span class="normal">90</span>
<span class="normal">91</span>
<span class="normal">92</span>
<span class="normal">93</span>
<span class="normal">94</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">check_text</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">alert_text</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Проверяет точное соответствие текста в alert-окне.</span>
<span class="sd"> Args:</span>
<span class="sd"> alert_text: ожидаемый текст сообщения</span>
<span class="sd"> alert_text: Ожидаемый текст сообщения.</span>
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: если текст не соответствует ожидаемому</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">text</span><span class="o">.</span><span class="n">check_have_text</span><span class="p">(</span><span class="n">alert_text</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;Unexpected message in alert </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">alert_type</span><span class="si">}</span><span class="s2"> window&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">check_have_text</span><span class="p">(</span><span class="n">alert_text</span><span class="p">,</span>
<span class="sa">f</span><span class="s2">&quot;Unexpected message in alert </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">alert_type</span><span class="si">}</span><span class="s2"> window&quot;</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
@ -2476,7 +2493,7 @@ text: текстовый элемент сообщения alert-окна</p>
<div class="doc doc-contents ">
<p>Получение текста сообщения из alert-окна.</p>
<p>Возвращает текст сообщения из alert-окна.</p>
<p><span class="doc-section-title">Returns:</span></p>
@ -2490,10 +2507,11 @@ text: текстовый элемент сообщения alert-окна</p>
<tbody>
<tr class="doc-section-item">
<td><code>str</code></td> <td>
<code><span title="str">str</span></code>
</td>
<td>
<div class="doc-md-description">
<p>текст сообщения alert-окна</p>
<p>Текст сообщения.</p>
</div>
</td>
</tr>
@ -2509,12 +2527,14 @@ text: текстовый элемент сообщения alert-окна</p>
<span class="normal">45</span>
<span class="normal">46</span>
<span class="normal">47</span>
<span class="normal">48</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">get_text</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Получение текста сообщения из alert-окна.</span>
<span class="normal">48</span>
<span class="normal">49</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">get_text</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;Возвращает текст сообщения из alert-окна.</span>
<span class="sd"> Returns:</span>
<span class="sd"> str: текст сообщения alert-окна</span>
<span class="sd"> str: Текст сообщения.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">get_text</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>

View File

@ -1876,6 +1876,9 @@
<a id="components.base_component"></a>
<div class="doc doc-contents first">
<p>Базовый модуль для работы с компонентами страницы.</p>
<p>Содержит базовый класс для взаимодействия с элементами страницы через Playwright.</p>
@ -1914,11 +1917,6 @@
- работа с прокруткой</p>
<details class="атрибуты" open>
<summary>Атрибуты</summary>
<p>page: экземпляр страницы Playwright</p>
</details>
@ -1926,11 +1924,7 @@
<details class="quote">
<summary>Source code in <code>components\base_component.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal"> 10</span>
<span class="normal"> 11</span>
<span class="normal"> 12</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 12</span>
<span class="normal"> 13</span>
<span class="normal"> 14</span>
<span class="normal"> 15</span>
@ -2090,24 +2084,32 @@
<span class="normal">169</span>
<span class="normal">170</span>
<span class="normal">171</span>
<span class="normal">172</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">BaseComponent</span><span class="p">:</span>
<span class="normal">172</span>
<span class="normal">173</span>
<span class="normal">174</span>
<span class="normal">175</span>
<span class="normal">176</span>
<span class="normal">177</span>
<span class="normal">178</span>
<span class="normal">179</span>
<span class="normal">180</span>
<span class="normal">181</span>
<span class="normal">182</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">BaseComponent</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Базовый компонент для работы с элементами страницы.</span>
<span class="sd"> Предоставляет общие методы для взаимодействия с элементами:</span>
<span class="sd"> - получение локаторов</span>
<span class="sd"> - проверка видимости элементов</span>
<span class="sd"> - работа с прокруткой</span>
<span class="sd"> Атрибуты:</span>
<span class="sd"> page: экземпляр страницы Playwright</span>
<span class="sd"> &quot;&quot;&quot;</span>
<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="w"> </span><span class="sd">&quot;&quot;&quot;Инициализация базового компонента.</span>
<span class="sd"> Args:</span>
<span class="sd"> page: экземпляр страницы Playwright</span>
<span class="sd"> page: экземпляр страницы Playwright.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">page</span> <span class="o">=</span> <span class="n">page</span>
<span class="c1"># Действия:</span>
@ -2115,14 +2117,15 @@
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Получение объекта Locator из строки или существующего Locator.</span>
<span class="sd"> Args:</span>
<span class="sd"> locator: строка с CSS/XPath селектором или объект Locator</span>
<span class="sd"> locator: строка с CSS/XPath селектором или объект Locator.</span>
<span class="sd"> Returns:</span>
<span class="sd"> Locator: объект для работы с элементом</span>
<span class="sd"> Locator: объект для работы с элементом.</span>
<span class="sd"> Raises:</span>
<span class="sd"> TypeError: если передан некорректный тип локатора</span>
<span class="sd"> TypeError: если передан некорректный тип локатора.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">locator</span><span class="p">,</span> <span class="n">Locator</span><span class="p">):</span>
<span class="k">return</span> <span class="n">locator</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">locator</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
@ -2141,53 +2144,57 @@
<span class="c1"># return elements</span>
<span class="c1"># Проверки:</span>
<span class="k">def</span><span class="w"> </span><span class="nf">check_presence</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="n">msg</span><span class="p">):</span>
<span class="k">def</span><span class="w"> </span><span class="nf">check_presence</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="n">msg</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"> locator: локатор элемента (строка или объект Locator)</span>
<span class="sd"> msg: сообщение об ошибке при неудачной проверке</span>
<span class="sd"> locator: локатор элемента (строка или объект Locator).</span>
<span class="sd"> msg: сообщение об ошибке при неудачной проверке.</span>
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: если элемент не виден на странице</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">get_locator</span><span class="p">(</span><span class="n">locator</span><span class="p">)</span>
<span class="n">expect</span><span class="p">(</span><span class="n">loc</span><span class="p">)</span><span class="o">.</span><span class="n">to_be_visible</span><span class="p">(</span><span class="n">visible</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="mi">12000</span><span class="p">),</span> <span class="n">msg</span>
<span class="k">def</span><span class="w"> </span><span class="nf">is_scrollable_vertically</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="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
<span class="k">def</span><span class="w"> </span><span class="nf">is_scrollable_vertically</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;Проверка возможности вертикальной прокрутки элемента.</span>
<span class="sd"> Args:</span>
<span class="sd"> locator: локатор элемента</span>
<span class="sd"> locator: локатор элемента.</span>
<span class="sd"> Returns:</span>
<span class="sd"> bool: True если элемент можно прокрутить вертикально</span>
<span class="sd"> bool: True если элемент можно прокрутить вертикально.</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">get_locator</span><span class="p">(</span><span class="n">locator</span><span class="p">)</span>
<span class="k">return</span> <span class="n">loc</span><span class="o">.</span><span class="n">evaluate</span><span class="p">(</span><span class="s2">&quot;el =&gt; el.scrollHeight &gt; el.clientHeight&quot;</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">is_scrollable_horizontally</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="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
<span class="k">def</span><span class="w"> </span><span class="nf">is_scrollable_horizontally</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;Проверка возможности горизонтальной прокрутки элемента.</span>
<span class="sd"> Args:</span>
<span class="sd"> locator: локатор элемента</span>
<span class="sd"> locator: локатор элемента.</span>
<span class="sd"> Returns:</span>
<span class="sd"> bool: True если элемент можно прокрутить горизонтально</span>
<span class="sd"> bool: True если элемент можно прокрутить горизонтально.</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">get_locator</span><span class="p">(</span><span class="n">locator</span><span class="p">)</span>
<span class="k">return</span> <span class="n">loc</span><span class="o">.</span><span class="n">evaluate</span><span class="p">(</span><span class="s2">&quot;el =&gt; el.scrollWidth &gt; el.clientWidth&quot;</span><span class="p">)</span>
<span class="c1"># Методы прокрутки:</span>
<span class="k">def</span><span class="w"> </span><span class="nf">scroll_up</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="k">def</span><span class="w"> </span><span class="nf">scroll_up</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="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"> locator: локатор элемента</span>
<span class="sd"> locator: локатор элемента.</span>
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: если прокрутка не выполнена до конца</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">get_locator</span><span class="p">(</span><span class="n">locator</span><span class="p">)</span>
<span class="n">loc</span><span class="o">.</span><span class="n">evaluate</span><span class="p">(</span><span class="s2">&quot;el =&gt; el.scrollTo(0, 0)&quot;</span><span class="p">)</span>
<span class="n">loc</span><span class="o">.</span><span class="n">wait_for</span><span class="p">(</span><span class="n">timeout</span><span class="o">=</span><span class="mi">2000</span><span class="p">)</span>
@ -2196,15 +2203,16 @@
<span class="n">scroll_position</span> <span class="o">=</span> <span class="n">loc</span><span class="o">.</span><span class="n">evaluate</span><span class="p">(</span><span class="s2">&quot;el =&gt; el.scrollTop&quot;</span><span class="p">)</span>
<span class="k">assert</span> <span class="n">scroll_position</span> <span class="o">==</span> <span class="mi">0</span><span class="p">,</span> <span class="s2">&quot;Invalid postion after scroll up&quot;</span>
<span class="k">def</span><span class="w"> </span><span class="nf">scroll_down</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="k">def</span><span class="w"> </span><span class="nf">scroll_down</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="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"> locator: локатор элемента</span>
<span class="sd"> locator: локатор элемента.</span>
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: если прокрутка не выполнена до конца</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">get_locator</span><span class="p">(</span><span class="n">locator</span><span class="p">)</span>
<span class="n">loc</span><span class="o">.</span><span class="n">evaluate</span><span class="p">(</span><span class="s2">&quot;el =&gt; el.scrollTo(0, el.scrollHeight)&quot;</span><span class="p">)</span>
<span class="n">loc</span><span class="o">.</span><span class="n">wait_for</span><span class="p">(</span><span class="n">timeout</span><span class="o">=</span><span class="mi">2000</span><span class="p">)</span>
@ -2213,15 +2221,16 @@
<span class="n">scroll_position</span> <span class="o">=</span> <span class="n">loc</span><span class="o">.</span><span class="n">evaluate</span><span class="p">(</span><span class="s2">&quot;el =&gt; el.scrollTop&quot;</span><span class="p">)</span>
<span class="k">assert</span> <span class="n">scroll_position</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">,</span> <span class="s2">&quot;Invalid postion after scroll down&quot;</span>
<span class="k">def</span><span class="w"> </span><span class="nf">scroll_left</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="k">def</span><span class="w"> </span><span class="nf">scroll_left</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="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"> locator: локатор элемента</span>
<span class="sd"> locator: локатор элемента.</span>
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: если прокрутка не выполнена до конца</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">get_locator</span><span class="p">(</span><span class="n">locator</span><span class="p">)</span>
<span class="n">width</span> <span class="o">=</span> <span class="n">loc</span><span class="o">.</span><span class="n">evaluate</span><span class="p">(</span><span class="s2">&quot;el =&gt; el.scrollWidth&quot;</span><span class="p">)</span>
@ -2234,15 +2243,16 @@
<span class="n">scroll_position</span> <span class="o">=</span> <span class="n">loc</span><span class="o">.</span><span class="n">evaluate</span><span class="p">(</span><span class="s2">&quot;el =&gt; el.scrollLeft&quot;</span><span class="p">)</span>
<span class="k">assert</span> <span class="n">scroll_position</span> <span class="o">==</span> <span class="mi">0</span><span class="p">,</span> <span class="s2">&quot;Invalid postion after scroll left&quot;</span>
<span class="k">def</span><span class="w"> </span><span class="nf">scroll_right</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="k">def</span><span class="w"> </span><span class="nf">scroll_right</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="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"> locator: локатор элемента</span>
<span class="sd"> locator: локатор элемента.</span>
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: если прокрутка не выполнена до конца</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">get_locator</span><span class="p">(</span><span class="n">locator</span><span class="p">)</span>
<span class="n">width</span> <span class="o">=</span> <span class="n">loc</span><span class="o">.</span><span class="n">evaluate</span><span class="p">(</span><span class="s2">&quot;el =&gt; el.scrollWidth&quot;</span><span class="p">)</span>
@ -2304,7 +2314,7 @@
</td>
<td>
<div class="doc-md-description">
<p>экземпляр страницы Playwright</p>
<p>экземпляр страницы Playwright.</p>
</div>
</td>
<td>
@ -2317,18 +2327,20 @@
<details class="quote">
<summary>Source code in <code>components\base_component.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">20</span>
<span class="normal">21</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">21</span>
<span class="normal">22</span>
<span class="normal">23</span>
<span class="normal">24</span>
<span class="normal">25</span>
<span class="normal">26</span></pre></div></td><td class="code"><div><pre><span></span><code><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="normal">26</span>
<span class="normal">27</span>
<span class="normal">28</span></pre></div></td><td class="code"><div><pre><span></span><code><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="w"> </span><span class="sd">&quot;&quot;&quot;Инициализация базового компонента.</span>
<span class="sd"> Args:</span>
<span class="sd"> page: экземпляр страницы Playwright</span>
<span class="sd"> page: экземпляр страницы Playwright.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">page</span> <span class="o">=</span> <span class="n">page</span>
</code></pre></div></td></tr></table></div>
</details>
@ -2366,10 +2378,11 @@
<code>locator</code>
</td>
<td>
<code><span title="str">str</span> | <span title="playwright.sync_api.Locator">Locator</span></code>
</td>
<td>
<div class="doc-md-description">
<p>локатор элемента (строка или объект Locator)</p>
<p>локатор элемента (строка или объект Locator).</p>
</div>
</td>
<td>
@ -2381,10 +2394,11 @@
<code>msg</code>
</td>
<td>
<code><span title="str">str</span></code>
</td>
<td>
<div class="doc-md-description">
<p>сообщение об ошибке при неудачной проверке</p>
<p>сообщение об ошибке при неудачной проверке.</p>
</div>
</td>
<td>
@ -2410,7 +2424,7 @@
</td>
<td>
<div class="doc-md-description">
<p>если элемент не виден на странице</p>
<p>если элемент не виден на странице.</p>
</div>
</td>
</tr>
@ -2420,10 +2434,7 @@
<details class="quote">
<summary>Source code in <code>components\base_component.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">59</span>
<span class="normal">60</span>
<span class="normal">61</span>
<span class="normal">62</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">62</span>
<span class="normal">63</span>
<span class="normal">64</span>
<span class="normal">65</span>
@ -2431,16 +2442,21 @@
<span class="normal">67</span>
<span class="normal">68</span>
<span class="normal">69</span>
<span class="normal">70</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">check_presence</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="n">msg</span><span class="p">):</span>
<span class="normal">70</span>
<span class="normal">71</span>
<span class="normal">72</span>
<span class="normal">73</span>
<span class="normal">74</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">check_presence</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="n">msg</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"> locator: локатор элемента (строка или объект Locator)</span>
<span class="sd"> msg: сообщение об ошибке при неудачной проверке</span>
<span class="sd"> locator: локатор элемента (строка или объект Locator).</span>
<span class="sd"> msg: сообщение об ошибке при неудачной проверке.</span>
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: если элемент не виден на странице</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">get_locator</span><span class="p">(</span><span class="n">locator</span><span class="p">)</span>
<span class="n">expect</span><span class="p">(</span><span class="n">loc</span><span class="p">)</span><span class="o">.</span><span class="n">to_be_visible</span><span class="p">(</span><span class="n">visible</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="mi">12000</span><span class="p">),</span> <span class="n">msg</span>
</code></pre></div></td></tr></table></div>
@ -2483,7 +2499,7 @@
</td>
<td>
<div class="doc-md-description">
<p>строка с CSS/XPath селектором или объект Locator</p>
<p>строка с CSS/XPath селектором или объект Locator.</p>
</div>
</td>
<td>
@ -2509,7 +2525,7 @@
</td>
<td>
<div class="doc-md-description">
<p>объект для работы с элементом</p>
<p>объект для работы с элементом.</p>
</div>
</td>
</tr>
@ -2532,7 +2548,7 @@
</td>
<td>
<div class="doc-md-description">
<p>если передан некорректный тип локатора</p>
<p>если передан некорректный тип локатора.</p>
</div>
</td>
</tr>
@ -2542,9 +2558,7 @@
<details class="quote">
<summary>Source code in <code>components\base_component.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">29</span>
<span class="normal">30</span>
<span class="normal">31</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">31</span>
<span class="normal">32</span>
<span class="normal">33</span>
<span class="normal">34</span>
@ -2559,18 +2573,22 @@
<span class="normal">43</span>
<span class="normal">44</span>
<span class="normal">45</span>
<span class="normal">46</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">get_locator</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="n">Locator</span><span class="p">:</span>
<span class="normal">46</span>
<span class="normal">47</span>
<span class="normal">48</span>
<span class="normal">49</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">get_locator</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="n">Locator</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Получение объекта Locator из строки или существующего Locator.</span>
<span class="sd"> Args:</span>
<span class="sd"> locator: строка с CSS/XPath селектором или объект Locator</span>
<span class="sd"> locator: строка с CSS/XPath селектором или объект Locator.</span>
<span class="sd"> Returns:</span>
<span class="sd"> Locator: объект для работы с элементом</span>
<span class="sd"> Locator: объект для работы с элементом.</span>
<span class="sd"> Raises:</span>
<span class="sd"> TypeError: если передан некорректный тип локатора</span>
<span class="sd"> TypeError: если передан некорректный тип локатора.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">locator</span><span class="p">,</span> <span class="n">Locator</span><span class="p">):</span>
<span class="k">return</span> <span class="n">locator</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">locator</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
@ -2613,10 +2631,11 @@
<code>locator</code>
</td>
<td>
<code><span title="str">str</span> | <span title="playwright.sync_api.Locator">Locator</span></code>
</td>
<td>
<div class="doc-md-description">
<p>локатор элемента</p>
<p>локатор элемента.</p>
</div>
</td>
<td>
@ -2642,7 +2661,7 @@
</td>
<td>
<div class="doc-md-description">
<p>True если элемент можно прокрутить горизонтально</p>
<p>True если элемент можно прокрутить горизонтально.</p>
</div>
</td>
</tr>
@ -2652,25 +2671,27 @@
<details class="quote">
<summary>Source code in <code>components\base_component.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">84</span>
<span class="normal">85</span>
<span class="normal">86</span>
<span class="normal">87</span>
<span class="normal">88</span>
<span class="normal">89</span>
<span class="normal">90</span>
<span class="normal">91</span>
<span class="normal">92</span>
<span class="normal">93</span>
<span class="normal">94</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">is_scrollable_horizontally</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="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 89</span>
<span class="normal"> 90</span>
<span class="normal"> 91</span>
<span class="normal"> 92</span>
<span class="normal"> 93</span>
<span class="normal"> 94</span>
<span class="normal"> 95</span>
<span class="normal"> 96</span>
<span class="normal"> 97</span>
<span class="normal"> 98</span>
<span class="normal"> 99</span>
<span class="normal">100</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">is_scrollable_horizontally</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;Проверка возможности горизонтальной прокрутки элемента.</span>
<span class="sd"> Args:</span>
<span class="sd"> locator: локатор элемента</span>
<span class="sd"> locator: локатор элемента.</span>
<span class="sd"> Returns:</span>
<span class="sd"> bool: True если элемент можно прокрутить горизонтально</span>
<span class="sd"> bool: True если элемент можно прокрутить горизонтально.</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">get_locator</span><span class="p">(</span><span class="n">locator</span><span class="p">)</span>
<span class="k">return</span> <span class="n">loc</span><span class="o">.</span><span class="n">evaluate</span><span class="p">(</span><span class="s2">&quot;el =&gt; el.scrollWidth &gt; el.clientWidth&quot;</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
@ -2709,10 +2730,11 @@
<code>locator</code>
</td>
<td>
<code><span title="str">str</span> | <span title="playwright.sync_api.Locator">Locator</span></code>
</td>
<td>
<div class="doc-md-description">
<p>локатор элемента</p>
<p>локатор элемента.</p>
</div>
</td>
<td>
@ -2738,7 +2760,7 @@
</td>
<td>
<div class="doc-md-description">
<p>True если элемент можно прокрутить вертикально</p>
<p>True если элемент можно прокрутить вертикально.</p>
</div>
</td>
</tr>
@ -2748,25 +2770,27 @@
<details class="quote">
<summary>Source code in <code>components\base_component.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">72</span>
<span class="normal">73</span>
<span class="normal">74</span>
<span class="normal">75</span>
<span class="normal">76</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">76</span>
<span class="normal">77</span>
<span class="normal">78</span>
<span class="normal">79</span>
<span class="normal">80</span>
<span class="normal">81</span>
<span class="normal">82</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">is_scrollable_vertically</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="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
<span class="normal">82</span>
<span class="normal">83</span>
<span class="normal">84</span>
<span class="normal">85</span>
<span class="normal">86</span>
<span class="normal">87</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">is_scrollable_vertically</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;Проверка возможности вертикальной прокрутки элемента.</span>
<span class="sd"> Args:</span>
<span class="sd"> locator: локатор элемента</span>
<span class="sd"> locator: локатор элемента.</span>
<span class="sd"> Returns:</span>
<span class="sd"> bool: True если элемент можно прокрутить вертикально</span>
<span class="sd"> bool: True если элемент можно прокрутить вертикально.</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">get_locator</span><span class="p">(</span><span class="n">locator</span><span class="p">)</span>
<span class="k">return</span> <span class="n">loc</span><span class="o">.</span><span class="n">evaluate</span><span class="p">(</span><span class="s2">&quot;el =&gt; el.scrollHeight &gt; el.clientHeight&quot;</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
@ -2805,10 +2829,11 @@
<code>locator</code>
</td>
<td>
<code><span title="str">str</span> | <span title="playwright.sync_api.Locator">Locator</span></code>
</td>
<td>
<div class="doc-md-description">
<p>локатор элемента</p>
<p>локатор элемента.</p>
</div>
</td>
<td>
@ -2834,7 +2859,7 @@
</td>
<td>
<div class="doc-md-description">
<p>если прокрутка не выполнена до конца</p>
<p>если прокрутка не выполнена до конца.</p>
</div>
</td>
</tr>
@ -2844,14 +2869,7 @@
<details class="quote">
<summary>Source code in <code>components\base_component.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">114</span>
<span class="normal">115</span>
<span class="normal">116</span>
<span class="normal">117</span>
<span class="normal">118</span>
<span class="normal">119</span>
<span class="normal">120</span>
<span class="normal">121</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">121</span>
<span class="normal">122</span>
<span class="normal">123</span>
<span class="normal">124</span>
@ -2859,15 +2877,24 @@
<span class="normal">126</span>
<span class="normal">127</span>
<span class="normal">128</span>
<span class="normal">129</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">scroll_down</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="normal">129</span>
<span class="normal">130</span>
<span class="normal">131</span>
<span class="normal">132</span>
<span class="normal">133</span>
<span class="normal">134</span>
<span class="normal">135</span>
<span class="normal">136</span>
<span class="normal">137</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">scroll_down</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="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"> locator: локатор элемента</span>
<span class="sd"> locator: локатор элемента.</span>
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: если прокрутка не выполнена до конца</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">get_locator</span><span class="p">(</span><span class="n">locator</span><span class="p">)</span>
<span class="n">loc</span><span class="o">.</span><span class="n">evaluate</span><span class="p">(</span><span class="s2">&quot;el =&gt; el.scrollTo(0, el.scrollHeight)&quot;</span><span class="p">)</span>
<span class="n">loc</span><span class="o">.</span><span class="n">wait_for</span><span class="p">(</span><span class="n">timeout</span><span class="o">=</span><span class="mi">2000</span><span class="p">)</span>
@ -2911,10 +2938,11 @@
<code>locator</code>
</td>
<td>
<code><span title="str">str</span> | <span title="playwright.sync_api.Locator">Locator</span></code>
</td>
<td>
<div class="doc-md-description">
<p>локатор элемента</p>
<p>локатор элемента.</p>
</div>
</td>
<td>
@ -2940,7 +2968,7 @@
</td>
<td>
<div class="doc-md-description">
<p>если прокрутка не выполнена до конца</p>
<p>если прокрутка не выполнена до конца.</p>
</div>
</td>
</tr>
@ -2950,15 +2978,7 @@
<details class="quote">
<summary>Source code in <code>components\base_component.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">131</span>
<span class="normal">132</span>
<span class="normal">133</span>
<span class="normal">134</span>
<span class="normal">135</span>
<span class="normal">136</span>
<span class="normal">137</span>
<span class="normal">138</span>
<span class="normal">139</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">139</span>
<span class="normal">140</span>
<span class="normal">141</span>
<span class="normal">142</span>
@ -2969,15 +2989,25 @@
<span class="normal">147</span>
<span class="normal">148</span>
<span class="normal">149</span>
<span class="normal">150</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">scroll_left</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="normal">150</span>
<span class="normal">151</span>
<span class="normal">152</span>
<span class="normal">153</span>
<span class="normal">154</span>
<span class="normal">155</span>
<span class="normal">156</span>
<span class="normal">157</span>
<span class="normal">158</span>
<span class="normal">159</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">scroll_left</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="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"> locator: локатор элемента</span>
<span class="sd"> locator: локатор элемента.</span>
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: если прокрутка не выполнена до конца</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">get_locator</span><span class="p">(</span><span class="n">locator</span><span class="p">)</span>
<span class="n">width</span> <span class="o">=</span> <span class="n">loc</span><span class="o">.</span><span class="n">evaluate</span><span class="p">(</span><span class="s2">&quot;el =&gt; el.scrollWidth&quot;</span><span class="p">)</span>
@ -3025,10 +3055,11 @@
<code>locator</code>
</td>
<td>
<code><span title="str">str</span> | <span title="playwright.sync_api.Locator">Locator</span></code>
</td>
<td>
<div class="doc-md-description">
<p>локатор элемента</p>
<p>локатор элемента.</p>
</div>
</td>
<td>
@ -3054,7 +3085,7 @@
</td>
<td>
<div class="doc-md-description">
<p>если прокрутка не выполнена до конца</p>
<p>если прокрутка не выполнена до конца.</p>
</div>
</td>
</tr>
@ -3064,16 +3095,7 @@
<details class="quote">
<summary>Source code in <code>components\base_component.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">152</span>
<span class="normal">153</span>
<span class="normal">154</span>
<span class="normal">155</span>
<span class="normal">156</span>
<span class="normal">157</span>
<span class="normal">158</span>
<span class="normal">159</span>
<span class="normal">160</span>
<span class="normal">161</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">161</span>
<span class="normal">162</span>
<span class="normal">163</span>
<span class="normal">164</span>
@ -3084,15 +3106,26 @@
<span class="normal">169</span>
<span class="normal">170</span>
<span class="normal">171</span>
<span class="normal">172</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">scroll_right</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="normal">172</span>
<span class="normal">173</span>
<span class="normal">174</span>
<span class="normal">175</span>
<span class="normal">176</span>
<span class="normal">177</span>
<span class="normal">178</span>
<span class="normal">179</span>
<span class="normal">180</span>
<span class="normal">181</span>
<span class="normal">182</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">scroll_right</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="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"> locator: локатор элемента</span>
<span class="sd"> locator: локатор элемента.</span>
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: если прокрутка не выполнена до конца</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">get_locator</span><span class="p">(</span><span class="n">locator</span><span class="p">)</span>
<span class="n">width</span> <span class="o">=</span> <span class="n">loc</span><span class="o">.</span><span class="n">evaluate</span><span class="p">(</span><span class="s2">&quot;el =&gt; el.scrollWidth&quot;</span><span class="p">)</span>
@ -3141,10 +3174,11 @@
<code>locator</code>
</td>
<td>
<code><span title="str">str</span> | <span title="playwright.sync_api.Locator">Locator</span></code>
</td>
<td>
<div class="doc-md-description">
<p>локатор элемента</p>
<p>локатор элемента.</p>
</div>
</td>
<td>
@ -3170,7 +3204,7 @@
</td>
<td>
<div class="doc-md-description">
<p>если прокрутка не выполнена до конца</p>
<p>если прокрутка не выполнена до конца.</p>
</div>
</td>
</tr>
@ -3180,13 +3214,7 @@
<details class="quote">
<summary>Source code in <code>components\base_component.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 97</span>
<span class="normal"> 98</span>
<span class="normal"> 99</span>
<span class="normal">100</span>
<span class="normal">101</span>
<span class="normal">102</span>
<span class="normal">103</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">103</span>
<span class="normal">104</span>
<span class="normal">105</span>
<span class="normal">106</span>
@ -3195,15 +3223,23 @@
<span class="normal">109</span>
<span class="normal">110</span>
<span class="normal">111</span>
<span class="normal">112</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">scroll_up</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="normal">112</span>
<span class="normal">113</span>
<span class="normal">114</span>
<span class="normal">115</span>
<span class="normal">116</span>
<span class="normal">117</span>
<span class="normal">118</span>
<span class="normal">119</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">scroll_up</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="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"> locator: локатор элемента</span>
<span class="sd"> locator: локатор элемента.</span>
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: если прокрутка не выполнена до конца</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">get_locator</span><span class="p">(</span><span class="n">locator</span><span class="p">)</span>
<span class="n">loc</span><span class="o">.</span><span class="n">evaluate</span><span class="p">(</span><span class="s2">&quot;el =&gt; el.scrollTo(0, 0)&quot;</span><span class="p">)</span>
<span class="n">loc</span><span class="o">.</span><span class="n">wait_for</span><span class="p">(</span><span class="n">timeout</span><span class="o">=</span><span class="mi">2000</span><span class="p">)</span>

View File

@ -1750,6 +1750,9 @@
<a id="components.card_component"></a>
<div class="doc doc-contents first">
<p>Модуль компонента карточки пользователя.</p>
<p>Содержит класс для работы с карточкой пользователя через Playwright.</p>
@ -1784,15 +1787,9 @@
<p>Компонент карточки пользователя.</p>
<p>Предоставляет методы для взаимодействия с элементами карточки пользователя.</p>
<p>Предоставляет методы для взаимодействия с элементами карточки.</p>
<details class="атрибуты" open>
<summary>Атрибуты</summary>
<p>page: экземпляр страницы Playwright
logout_button: кнопка выхода из системы</p>
</details>
@ -1800,10 +1797,7 @@ logout_button: кнопка выхода из системы</p>
<details class="quote">
<summary>Source code in <code>components\card_component.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">11</span>
<span class="normal">12</span>
<span class="normal">13</span>
<span class="normal">14</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">14</span>
<span class="normal">15</span>
<span class="normal">16</span>
<span class="normal">17</span>
@ -1830,36 +1824,35 @@ logout_button: кнопка выхода из системы</p>
<span class="normal">38</span>
<span class="normal">39</span>
<span class="normal">40</span>
<span class="normal">41</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">CardComponent</span><span class="p">(</span><span class="n">BaseComponent</span><span class="p">):</span>
<span class="normal">41</span>
<span class="normal">42</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">CardComponent</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"> Предоставляет методы для взаимодействия с элементами карточки пользователя.</span>
<span class="sd"> Атрибуты:</span>
<span class="sd"> page: экземпляр страницы Playwright</span>
<span class="sd"> logout_button: кнопка выхода из системы</span>
<span class="sd"> Предоставляет методы для взаимодействия с элементами карточки.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<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="w"> </span><span class="sd">&quot;&quot;&quot;Инициализация компонента карточки пользователя.</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"> 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>
<span class="bp">self</span><span class="o">.</span><span class="n">logout_button</span> <span class="o">=</span> <span class="n">Button</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">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="s2">&quot;Выйти&quot;</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">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="s2">&quot;Выйти&quot;</span><span class="p">),</span>
<span class="s2">&quot;logout button&quot;</span>
<span class="p">)</span>
<span class="c1"># Действия:</span>
<span class="k">def</span><span class="w"> </span><span class="nf">click_logout_button</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Нажатие кнопки выхода из системы.</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Нажимает кнопку выхода из системы.</span>
<span class="sd"> Выполняет клик по кнопке &#39;Выйти&#39; в карточке пользователя.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">logout_button</span><span class="o">.</span><span class="n">click</span><span class="p">()</span>
</code></pre></div></td></tr></table></div>
</details>
@ -1887,7 +1880,7 @@ logout_button: кнопка выхода из системы</p>
<div class="doc doc-contents ">
<p>Инициализация компонента карточки пользователя.</p>
<p>Инициализирует компонент карточки пользователя.</p>
<p><span class="doc-section-title">Parameters:</span></p>
@ -1910,7 +1903,7 @@ logout_button: кнопка выхода из системы</p>
</td>
<td>
<div class="doc-md-description">
<p>экземпляр страницы Playwright</p>
<p>Экземпляр страницы Playwright.</p>
</div>
</td>
<td>
@ -1923,7 +1916,8 @@ logout_button: кнопка выхода из системы</p>
<details class="quote">
<summary>Source code in <code>components\card_component.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">21</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">20</span>
<span class="normal">21</span>
<span class="normal">22</span>
<span class="normal">23</span>
<span class="normal">24</span>
@ -1936,16 +1930,17 @@ logout_button: кнопка выхода из системы</p>
<span class="normal">31</span>
<span class="normal">32</span>
<span class="normal">33</span></pre></div></td><td class="code"><div><pre><span></span><code><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="w"> </span><span class="sd">&quot;&quot;&quot;Инициализация компонента карточки пользователя.</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"> 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>
<span class="bp">self</span><span class="o">.</span><span class="n">logout_button</span> <span class="o">=</span> <span class="n">Button</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">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="s2">&quot;Выйти&quot;</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">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="s2">&quot;Выйти&quot;</span><span class="p">),</span>
<span class="s2">&quot;logout button&quot;</span>
<span class="p">)</span>
</code></pre></div></td></tr></table></div>
@ -1965,7 +1960,7 @@ logout_button: кнопка выхода из системы</p>
<div class="doc doc-contents ">
<p>Нажатие кнопки выхода из системы.</p>
<p>Нажимает кнопку выхода из системы.</p>
<p>Выполняет клик по кнопке 'Выйти' в карточке пользователя.</p>
@ -1976,11 +1971,13 @@ logout_button: кнопка выхода из системы</p>
<span class="normal">38</span>
<span class="normal">39</span>
<span class="normal">40</span>
<span class="normal">41</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">click_logout_button</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Нажатие кнопки выхода из системы.</span>
<span class="normal">41</span>
<span class="normal">42</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">click_logout_button</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Нажимает кнопку выхода из системы.</span>
<span class="sd"> Выполняет клик по кнопке &#39;Выйти&#39; в карточке пользователя.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">logout_button</span><span class="o">.</span><span class="n">click</span><span class="p">()</span>
</code></pre></div></td></tr></table></div>
</details>

View File

@ -1822,6 +1822,10 @@
<a id="components.confirm_component"></a>
<div class="doc doc-contents first">
<p>Модуль компонента окна подтверждения действий.</p>
<p>Содержит класс ConfirmComponent для взаимодействия с окном подтверждения,
включая кнопки подтверждения, отмены и закрытия, а также проверки текста.</p>
@ -1856,20 +1860,8 @@
<p>Компонент окна подтверждения действий.</p>
<p>Предоставляет методы для взаимодействия с диалоговыми окнами подтверждения,
содержащими кнопки отмены и подтверждения действия.</p>
<details class="атрибуты" open>
<summary>Атрибуты</summary>
<p>page: экземпляр страницы Playwright
title: текстовый элемент заголовка окна
text: текстовый элемент основного сообщения
close_button: кнопка закрытия окна
cancel_button: кнопка отмены действия
allow_button: кнопка подтверждения действия</p>
</details>
@ -1877,11 +1869,7 @@ allow_button: кнопка подтверждения действия</p>
<details class="quote">
<summary>Source code in <code>components\confirm_component.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">13</span>
<span class="normal">14</span>
<span class="normal">15</span>
<span class="normal">16</span>
<span class="normal">17</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">17</span>
<span class="normal">18</span>
<span class="normal">19</span>
<span class="normal">20</span>
@ -1945,43 +1933,18 @@ allow_button: кнопка подтверждения действия</p>
<span class="normal">78</span>
<span class="normal">79</span>
<span class="normal">80</span>
<span class="normal">81</span>
<span class="normal">82</span>
<span class="normal">83</span>
<span class="normal">84</span>
<span class="normal">85</span>
<span class="normal">86</span>
<span class="normal">87</span>
<span class="normal">88</span>
<span class="normal">89</span>
<span class="normal">90</span>
<span class="normal">91</span>
<span class="normal">92</span>
<span class="normal">93</span>
<span class="normal">94</span>
<span class="normal">95</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">ConfirmComponent</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"> Предоставляет методы для взаимодействия с диалоговыми окнами подтверждения,</span>
<span class="sd"> содержащими кнопки отмены и подтверждения действия.</span>
<span class="sd"> Атрибуты:</span>
<span class="sd"> page: экземпляр страницы Playwright</span>
<span class="sd"> title: текстовый элемент заголовка окна</span>
<span class="sd"> text: текстовый элемент основного сообщения</span>
<span class="sd"> close_button: кнопка закрытия окна</span>
<span class="sd"> cancel_button: кнопка отмены действия</span>
<span class="sd"> allow_button: кнопка подтверждения действия</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="normal">81</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">ConfirmComponent</span><span class="p">(</span><span class="n">BaseComponent</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Компонент окна подтверждения действий.&quot;&quot;&quot;</span>
<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="n">cancel_button_text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">allow_button_text</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Инициализация компонента окна подтверждения.</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"> cancel_button_text: текст на кнопке отмены</span>
<span class="sd"> allow_button_text: текст на кнопке подтверждения</span>
<span class="sd"> page: Экземпляр страницы Playwright.</span>
<span class="sd"> cancel_button_text: Текст кнопки отмены.</span>
<span class="sd"> allow_button_text: Текст кнопки подтверждения.</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>
<span class="bp">self</span><span class="o">.</span><span class="n">title</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">ConfirmLocators</span><span class="o">.</span><span class="n">TITLE</span><span class="p">,</span> <span class="s2">&quot;confirm title&quot;</span><span class="p">)</span>
@ -1989,58 +1952,51 @@ allow_button: кнопка подтверждения действия</p>
<span class="bp">self</span><span class="o">.</span><span class="n">close_button</span> <span class="o">=</span> <span class="n">Button</span><span class="p">(</span><span class="n">page</span><span class="p">,</span> <span class="n">ConfirmLocators</span><span class="o">.</span><span class="n">BUTTON_CLOSE</span><span class="p">,</span> <span class="s2">&quot;confirm close button&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">cancel_button</span> <span class="o">=</span> <span class="n">Button</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">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="n">cancel_button_text</span><span class="p">)</span><span class="o">.</span><span class="n">first</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">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="n">cancel_button_text</span><span class="p">)</span><span class="o">.</span><span class="n">first</span><span class="p">,</span>
<span class="s2">&quot;confirm cancel button&quot;</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">allow_button</span> <span class="o">=</span> <span class="n">Button</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">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="n">allow_button_text</span><span class="p">)</span><span class="o">.</span><span class="n">first</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">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="n">allow_button_text</span><span class="p">)</span><span class="o">.</span><span class="n">first</span><span class="p">,</span>
<span class="s2">&quot;confirm allow button&quot;</span>
<span class="p">)</span>
<span class="c1"># Действия:</span>
<span class="k">def</span><span class="w"> </span><span class="nf">click_allow_button</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Нажатие кнопки подтверждения действия.</span>
<span class="k">def</span><span class="w"> </span><span class="nf">click_allow_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;Нажимает кнопку подтверждения действия.&quot;&quot;&quot;</span>
<span class="sd"> Выполняет клик по кнопке с текстом, переданным в allow_button_text.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">allow_button</span><span class="o">.</span><span class="n">click</span><span class="p">()</span>
<span class="k">def</span><span class="w"> </span><span class="nf">click_cancel_button</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Нажатие кнопки отмены действия.</span>
<span class="k">def</span><span class="w"> </span><span class="nf">click_cancel_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;Нажимает кнопку отмены действия.&quot;&quot;&quot;</span>
<span class="sd"> Выполняет клик по кнопке с текстом, переданным в cancel_button_text.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">cancel_button</span><span class="o">.</span><span class="n">click</span><span class="p">()</span>
<span class="k">def</span><span class="w"> </span><span class="nf">click_close_button</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="k">def</span><span class="w"> </span><span class="nf">click_close_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;Нажимает кнопку закрытия окна подтверждения.&quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">close_button</span><span class="o">.</span><span class="n">click</span><span class="p">()</span>
<span class="c1"># Проверки:</span>
<span class="k">def</span><span class="w"> </span><span class="nf">check_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="n">msg</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Проверка текста заголовка окна подтверждения.</span>
<span class="k">def</span><span class="w"> </span><span class="nf">check_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="n">msg</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"> title: ожидаемый текст заголовка</span>
<span class="sd"> msg: сообщение об ошибке при несоответствии</span>
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: если текст заголовка не соответствует ожидаемому</span>
<span class="sd"> title: Ожидаемый текст заголовка.</span>
<span class="sd"> msg: Сообщение при ошибке.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">title</span><span class="o">.</span><span class="n">check_have_text</span><span class="p">(</span><span class="n">title</span><span class="p">,</span> <span class="n">msg</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">check_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="n">msg</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Проверка текста сообщения в окне подтверждения.</span>
<span class="k">def</span><span class="w"> </span><span class="nf">check_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="n">msg</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: ожидаемый текст сообщения</span>
<span class="sd"> msg: сообщение об ошибке при несоответствии</span>
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: если текст сообщения не соответствует ожидаемому</span>
<span class="sd"> text: Ожидаемый текст сообщения.</span>
<span class="sd"> msg: Сообщение при ошибке.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">check_have_text</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">msg</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
@ -2068,7 +2024,7 @@ allow_button: кнопка подтверждения действия</p>
<div class="doc doc-contents ">
<p>Инициализация компонента окна подтверждения.</p>
<p>Инициализация компонента.</p>
<p><span class="doc-section-title">Parameters:</span></p>
@ -2091,7 +2047,7 @@ allow_button: кнопка подтверждения действия</p>
</td>
<td>
<div class="doc-md-description">
<p>экземпляр страницы Playwright</p>
<p>Экземпляр страницы Playwright.</p>
</div>
</td>
<td>
@ -2107,7 +2063,7 @@ allow_button: кнопка подтверждения действия</p>
</td>
<td>
<div class="doc-md-description">
<p>текст на кнопке отмены</p>
<p>Текст кнопки отмены.</p>
</div>
</td>
<td>
@ -2123,7 +2079,7 @@ allow_button: кнопка подтверждения действия</p>
</td>
<td>
<div class="doc-md-description">
<p>текст на кнопке подтверждения</p>
<p>Текст кнопки подтверждения.</p>
</div>
</td>
<td>
@ -2136,7 +2092,15 @@ allow_button: кнопка подтверждения действия</p>
<details class="quote">
<summary>Source code in <code>components\confirm_component.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">28</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">20</span>
<span class="normal">21</span>
<span class="normal">22</span>
<span class="normal">23</span>
<span class="normal">24</span>
<span class="normal">25</span>
<span class="normal">26</span>
<span class="normal">27</span>
<span class="normal">28</span>
<span class="normal">29</span>
<span class="normal">30</span>
<span class="normal">31</span>
@ -2152,21 +2116,15 @@ allow_button: кнопка подтверждения действия</p>
<span class="normal">41</span>
<span class="normal">42</span>
<span class="normal">43</span>
<span class="normal">44</span>
<span class="normal">45</span>
<span class="normal">46</span>
<span class="normal">47</span>
<span class="normal">48</span>
<span class="normal">49</span>
<span class="normal">50</span>
<span class="normal">51</span></pre></div></td><td class="code"><div><pre><span></span><code><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="n">cancel_button_text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">allow_button_text</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Инициализация компонента окна подтверждения.</span>
<span class="normal">44</span></pre></div></td><td class="code"><div><pre><span></span><code><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="n">cancel_button_text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">allow_button_text</span><span class="p">:</span> <span class="nb">str</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"> cancel_button_text: текст на кнопке отмены</span>
<span class="sd"> allow_button_text: текст на кнопке подтверждения</span>
<span class="sd"> page: Экземпляр страницы Playwright.</span>
<span class="sd"> cancel_button_text: Текст кнопки отмены.</span>
<span class="sd"> allow_button_text: Текст кнопки подтверждения.</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>
<span class="bp">self</span><span class="o">.</span><span class="n">title</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">ConfirmLocators</span><span class="o">.</span><span class="n">TITLE</span><span class="p">,</span> <span class="s2">&quot;confirm title&quot;</span><span class="p">)</span>
@ -2174,13 +2132,13 @@ allow_button: кнопка подтверждения действия</p>
<span class="bp">self</span><span class="o">.</span><span class="n">close_button</span> <span class="o">=</span> <span class="n">Button</span><span class="p">(</span><span class="n">page</span><span class="p">,</span> <span class="n">ConfirmLocators</span><span class="o">.</span><span class="n">BUTTON_CLOSE</span><span class="p">,</span> <span class="s2">&quot;confirm close button&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">cancel_button</span> <span class="o">=</span> <span class="n">Button</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">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="n">cancel_button_text</span><span class="p">)</span><span class="o">.</span><span class="n">first</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">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="n">cancel_button_text</span><span class="p">)</span><span class="o">.</span><span class="n">first</span><span class="p">,</span>
<span class="s2">&quot;confirm cancel button&quot;</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">allow_button</span> <span class="o">=</span> <span class="n">Button</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">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="n">allow_button_text</span><span class="p">)</span><span class="o">.</span><span class="n">first</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">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="n">allow_button_text</span><span class="p">)</span><span class="o">.</span><span class="n">first</span><span class="p">,</span>
<span class="s2">&quot;confirm allow button&quot;</span>
<span class="p">)</span>
</code></pre></div></td></tr></table></div>
@ -2200,7 +2158,7 @@ allow_button: кнопка подтверждения действия</p>
<div class="doc doc-contents ">
<p>Проверка текста сообщения в окне подтверждения.</p>
<p>Проверяет текст сообщения в окне подтверждения.</p>
<p><span class="doc-section-title">Parameters:</span></p>
@ -2219,10 +2177,11 @@ allow_button: кнопка подтверждения действия</p>
<code>text</code>
</td>
<td>
<code><span title="str">str</span></code>
</td>
<td>
<div class="doc-md-description">
<p>ожидаемый текст сообщения</p>
<p>Ожидаемый текст сообщения.</p>
</div>
</td>
<td>
@ -2234,10 +2193,11 @@ allow_button: кнопка подтверждения действия</p>
<code>msg</code>
</td>
<td>
<code><span title="str">str</span></code>
</td>
<td>
<div class="doc-md-description">
<p>сообщение об ошибке при несоответствии</p>
<p>Сообщение при ошибке.</p>
</div>
</td>
<td>
@ -2248,51 +2208,24 @@ allow_button: кнопка подтверждения действия</p>
</table>
<p><span class="doc-section-title">Raises:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="AssertionError">AssertionError</span></code>
</td>
<td>
<div class="doc-md-description">
<p>если текст сообщения не соответствует ожидаемому</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>components\confirm_component.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">85</span>
<span class="normal">86</span>
<span class="normal">87</span>
<span class="normal">88</span>
<span class="normal">89</span>
<span class="normal">90</span>
<span class="normal">91</span>
<span class="normal">92</span>
<span class="normal">93</span>
<span class="normal">94</span>
<span class="normal">95</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">check_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="n">msg</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Проверка текста сообщения в окне подтверждения.</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">73</span>
<span class="normal">74</span>
<span class="normal">75</span>
<span class="normal">76</span>
<span class="normal">77</span>
<span class="normal">78</span>
<span class="normal">79</span>
<span class="normal">80</span>
<span class="normal">81</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">check_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="n">msg</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: ожидаемый текст сообщения</span>
<span class="sd"> msg: сообщение об ошибке при несоответствии</span>
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: если текст сообщения не соответствует ожидаемому</span>
<span class="sd"> text: Ожидаемый текст сообщения.</span>
<span class="sd"> msg: Сообщение при ошибке.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">check_have_text</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">msg</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
@ -2311,7 +2244,7 @@ allow_button: кнопка подтверждения действия</p>
<div class="doc doc-contents ">
<p>Проверка текста заголовка окна подтверждения.</p>
<p>Проверяет текст заголовка окна подтверждения.</p>
<p><span class="doc-section-title">Parameters:</span></p>
@ -2330,10 +2263,11 @@ allow_button: кнопка подтверждения действия</p>
<code>title</code>
</td>
<td>
<code><span title="str">str</span></code>
</td>
<td>
<div class="doc-md-description">
<p>ожидаемый текст заголовка</p>
<p>Ожидаемый текст заголовка.</p>
</div>
</td>
<td>
@ -2345,10 +2279,11 @@ allow_button: кнопка подтверждения действия</p>
<code>msg</code>
</td>
<td>
<code><span title="str">str</span></code>
</td>
<td>
<div class="doc-md-description">
<p>сообщение об ошибке при несоответствии</p>
<p>Сообщение при ошибке.</p>
</div>
</td>
<td>
@ -2359,51 +2294,24 @@ allow_button: кнопка подтверждения действия</p>
</table>
<p><span class="doc-section-title">Raises:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="AssertionError">AssertionError</span></code>
</td>
<td>
<div class="doc-md-description">
<p>если текст заголовка не соответствует ожидаемому</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>components\confirm_component.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">73</span>
<span class="normal">74</span>
<span class="normal">75</span>
<span class="normal">76</span>
<span class="normal">77</span>
<span class="normal">78</span>
<span class="normal">79</span>
<span class="normal">80</span>
<span class="normal">81</span>
<span class="normal">82</span>
<span class="normal">83</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">check_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="n">msg</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Проверка текста заголовка окна подтверждения.</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">63</span>
<span class="normal">64</span>
<span class="normal">65</span>
<span class="normal">66</span>
<span class="normal">67</span>
<span class="normal">68</span>
<span class="normal">69</span>
<span class="normal">70</span>
<span class="normal">71</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">check_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="n">msg</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"> title: ожидаемый текст заголовка</span>
<span class="sd"> msg: сообщение об ошибке при несоответствии</span>
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: если текст заголовка не соответствует ожидаемому</span>
<span class="sd"> title: Ожидаемый текст заголовка.</span>
<span class="sd"> msg: Сообщение при ошибке.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">title</span><span class="o">.</span><span class="n">check_have_text</span><span class="p">(</span><span class="n">title</span><span class="p">,</span> <span class="n">msg</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
@ -2422,22 +2330,17 @@ allow_button: кнопка подтверждения действия</p>
<div class="doc doc-contents ">
<p>Нажатие кнопки подтверждения действия.</p>
<p>Выполняет клик по кнопке с текстом, переданным в allow_button_text.</p>
<p>Нажимает кнопку подтверждения действия.</p>
<details class="quote">
<summary>Source code in <code>components\confirm_component.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">54</span>
<span class="normal">55</span>
<span class="normal">56</span>
<span class="normal">57</span>
<span class="normal">58</span>
<span class="normal">59</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">click_allow_button</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Нажатие кнопки подтверждения действия.</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">47</span>
<span class="normal">48</span>
<span class="normal">49</span>
<span class="normal">50</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">click_allow_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;Нажимает кнопку подтверждения действия.&quot;&quot;&quot;</span>
<span class="sd"> Выполняет клик по кнопке с текстом, переданным в allow_button_text.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">allow_button</span><span class="o">.</span><span class="n">click</span><span class="p">()</span>
</code></pre></div></td></tr></table></div>
</details>
@ -2456,22 +2359,17 @@ allow_button: кнопка подтверждения действия</p>
<div class="doc doc-contents ">
<p>Нажатие кнопки отмены действия.</p>
<p>Выполняет клик по кнопке с текстом, переданным в cancel_button_text.</p>
<p>Нажимает кнопку отмены действия.</p>
<details class="quote">
<summary>Source code in <code>components\confirm_component.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">61</span>
<span class="normal">62</span>
<span class="normal">63</span>
<span class="normal">64</span>
<span class="normal">65</span>
<span class="normal">66</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">click_cancel_button</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Нажатие кнопки отмены действия.</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">52</span>
<span class="normal">53</span>
<span class="normal">54</span>
<span class="normal">55</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">click_cancel_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;Нажимает кнопку отмены действия.&quot;&quot;&quot;</span>
<span class="sd"> Выполняет клик по кнопке с текстом, переданным в cancel_button_text.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">cancel_button</span><span class="o">.</span><span class="n">click</span><span class="p">()</span>
</code></pre></div></td></tr></table></div>
</details>
@ -2490,15 +2388,17 @@ allow_button: кнопка подтверждения действия</p>
<div class="doc doc-contents ">
<p>Нажатие кнопки закрытия окна подтверждения.</p>
<p>Нажимает кнопку закрытия окна подтверждения.</p>
<details class="quote">
<summary>Source code in <code>components\confirm_component.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">68</span>
<span class="normal">69</span>
<span class="normal">70</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">click_close_button</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>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">57</span>
<span class="normal">58</span>
<span class="normal">59</span>
<span class="normal">60</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">click_close_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;Нажимает кнопку закрытия окна подтверждения.&quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">close_button</span><span class="o">.</span><span class="n">click</span><span class="p">()</span>
</code></pre></div></td></tr></table></div>
</details>

File diff suppressed because it is too large Load Diff

View File

@ -1804,6 +1804,8 @@
<a id="components.navbar_component"></a>
<div class="doc doc-contents first">
<p>Модуль компонента панели навигации. Содержит класс для работы с элементами навигации.</p>
@ -1837,16 +1839,9 @@
Bases: <code><a class="autorefs autorefs-internal" title="BaseComponent (components.base_component.BaseComponent)" href="../base_component/#components.base_component.BaseComponent">BaseComponent</a></code></p>
<p>Компонент панели навигации.</p>
<p>Предоставляет методы для взаимодействия с элементами навигационной панели.
Наследуется от BaseComponent.</p>
<p>Компонент панели навигации. Предоставляет методы для взаимодействия с ней.</p>
<details class="атрибуты" open>
<summary>Атрибуты</summary>
<p>page: Page - экземпляр страницы Playwright</p>
</details>
@ -1928,58 +1923,66 @@
<span class="normal">82</span>
<span class="normal">83</span>
<span class="normal">84</span>
<span class="normal">85</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">NavigationPanelComponent</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"> Предоставляет методы для взаимодействия с элементами навигационной панели.</span>
<span class="sd"> Наследуется от BaseComponent.</span>
<span class="sd"> Атрибуты:</span>
<span class="sd"> page: Page - экземпляр страницы Playwright</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="normal">85</span>
<span class="normal">86</span>
<span class="normal">87</span>
<span class="normal">88</span>
<span class="normal">89</span>
<span class="normal">90</span>
<span class="normal">91</span>
<span class="normal">92</span>
<span class="normal">93</span>
<span class="normal">94</span>
<span class="normal">95</span>
<span class="normal">96</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">NavigationPanelComponent</span><span class="p">(</span><span class="n">BaseComponent</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Компонент панели навигации. Предоставляет методы для взаимодействия с ней.&quot;&quot;&quot;</span>
<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="w"> </span><span class="sd">&quot;&quot;&quot;Инициализация компонента панели навигации.</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Инициализирует компонент панели навигации.</span>
<span class="sd"> Args:</span>
<span class="sd"> page: Page - экземпляр страницы Playwright</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>
<span class="c1"># Действия:</span>
<span class="k">def</span><span class="w"> </span><span class="nf">get_item_names</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="w"> </span><span class="sd">&quot;&quot;&quot;Получает тексты всех элементов по указанному локатору.</span>
<span class="k">def</span><span class="w"> </span><span class="nf">get_item_names</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;Возвращает тексты всех элементов по указанному локатору.</span>
<span class="sd"> Args:</span>
<span class="sd"> locator: Локатор для поиска элементов</span>
<span class="sd"> locator: Локатор элементов или строка с CSS/XPath.</span>
<span class="sd"> Returns:</span>
<span class="sd"> list: Список текстов элементов</span>
<span class="sd"> Список текстов элементов.</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">get_locator</span><span class="p">(</span><span class="n">locator</span><span class="p">)</span>
<span class="k">return</span> <span class="n">loc</span><span class="o">.</span><span class="n">all_inner_texts</span><span class="p">()</span>
<span class="k">def</span><span class="w"> </span><span class="nf">click_item</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="n">item_name</span><span class="p">):</span>
<span class="k">def</span><span class="w"> </span><span class="nf">click_item</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="n">item_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;Кликает по элементу с указанным текстом.</span>
<span class="sd"> Args:</span>
<span class="sd"> locator: Локатор для поиска элемента</span>
<span class="sd"> item_name: Текст элемента для клика</span>
<span class="sd"> locator: Локатор элемента или строка с CSS/XPath.</span>
<span class="sd"> item_name: Текст элемента для клика.</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">get_locator</span><span class="p">(</span><span class="n">locator</span><span class="p">)</span>
<span class="n">loc</span><span class="o">.</span><span class="n">get_by_text</span><span class="p">(</span><span class="n">item_name</span><span class="p">)</span><span class="o">.</span><span class="n">click</span><span class="p">()</span>
<span class="k">def</span><span class="w"> </span><span class="nf">click_sub_item</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="n">sublevel_number</span><span class="p">,</span> <span class="n">item_name</span><span class="p">):</span>
<span class="k">def</span><span class="w"> </span><span class="nf">click_sub_item</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="n">sublevel_number</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">item_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;Кликает по вложенному элементу с указанным текстом.</span>
<span class="sd"> Args:</span>
<span class="sd"> locator: Локатор для поиска элемента</span>
<span class="sd"> sublevel_number: Уровень вложенности (1 или 2)</span>
<span class="sd"> item_name: Текст элемента для клика</span>
<span class="sd"> locator: Локатор родительского элемента.</span>
<span class="sd"> sublevel_number: Уровень вложенности (1 или 2).</span>
<span class="sd"> item_name: Текст элемента для клика.</span>
<span class="sd"> Raises:</span>
<span class="sd"> ValueError: Если указан недопустимый уровень вложенности</span>
<span class="sd"> ValueError: Если уровень вложенности не 1 или 2.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">root_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">NavigationPanelLocators</span><span class="o">.</span><span class="n">NODE_ROOT</span><span class="p">)</span>
<span class="n">children_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">NavigationPanelLocators</span><span class="o">.</span><span class="n">NODE_CHILDREN</span><span class="p">)</span>
@ -1993,15 +1996,29 @@
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;the navigation panel has two levels of nesting only&quot;</span><span class="p">)</span>
<span class="c1"># Проверки:</span>
<span class="k">def</span><span class="w"> </span><span class="nf">check_item_visibility</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="n">item_name</span><span class="p">):</span>
<span class="k">def</span><span class="w"> </span><span class="nf">check_item_visibility</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="n">item_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;Проверяет видимость элемента с указанным текстом.</span>
<span class="sd"> Args:</span>
<span class="sd"> locator: Локатор для поиска элемента</span>
<span class="sd"> item_name: Текст элемента для проверки</span>
<span class="sd"> locator: Локатор элемента или строка с CSS/XPath.</span>
<span class="sd"> item_name: Текст элемента для проверки.</span>
<span class="sd"> Note:</span>
<span class="sd"> Временная обработка для элементов с текстом &#39;Шаблоны&#39;.</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">get_locator</span><span class="p">(</span><span class="n">locator</span><span class="p">)</span><span class="o">.</span><span class="n">get_by_text</span><span class="p">(</span><span class="n">item_name</span><span class="p">)</span>
<span class="n">msg</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;Navigation panel item &#39;</span><span class="si">{</span><span class="n">item_name</span><span class="si">}</span><span class="s2">&#39; is not visible&quot;</span>
<span class="c1">## временно: в навигационной панели есть две панели с именем Шаблоны</span>
<span class="c1">## для их различия добавлены индексы Шаблоны_1 для Настройки/Шаблоны</span>
<span class="c1">## Шаблоны_2 для Настройки/ZTP/Шаблоны</span>
<span class="n">loc</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="k">if</span> <span class="n">item_name</span> <span class="o">==</span> <span class="s2">&quot;Шаблоны_1&quot;</span><span class="p">:</span>
<span class="n">loc</span> <span class="o">=</span> <span class="n">loc</span><span class="o">.</span><span class="n">get_by_text</span><span class="p">(</span><span class="s2">&quot;Шаблоны&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">first</span>
<span class="k">elif</span> <span class="n">item_name</span> <span class="o">==</span> <span class="s2">&quot;Шаблоны_2&quot;</span><span class="p">:</span>
<span class="n">loc</span> <span class="o">=</span> <span class="n">loc</span><span class="o">.</span><span class="n">get_by_text</span><span class="p">(</span><span class="s2">&quot;Шаблоны&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="k">else</span><span class="p">:</span>
<span class="n">loc</span> <span class="o">=</span> <span class="n">loc</span><span class="o">.</span><span class="n">get_by_text</span><span class="p">(</span><span class="n">item_name</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">check_presence</span><span class="p">(</span><span class="n">loc</span><span class="p">,</span> <span class="n">msg</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
@ -2029,7 +2046,7 @@
<div class="doc doc-contents ">
<p>Инициализация компонента панели навигации.</p>
<p>Инициализирует компонент панели навигации.</p>
<p><span class="doc-section-title">Parameters:</span></p>
@ -2052,7 +2069,7 @@
</td>
<td>
<div class="doc-md-description">
<p>Page - экземпляр страницы Playwright</p>
<p>Экземпляр страницы Playwright.</p>
</div>
</td>
<td>
@ -2065,18 +2082,20 @@
<details class="quote">
<summary>Source code in <code>components\navbar_component.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">21</span>
<span class="normal">22</span>
<span class="normal">23</span>
<span class="normal">24</span>
<span class="normal">25</span>
<span class="normal">26</span>
<span class="normal">27</span></pre></div></td><td class="code"><div><pre><span></span><code><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="w"> </span><span class="sd">&quot;&quot;&quot;Инициализация компонента панели навигации.</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">14</span>
<span class="normal">15</span>
<span class="normal">16</span>
<span class="normal">17</span>
<span class="normal">18</span>
<span class="normal">19</span>
<span class="normal">20</span>
<span class="normal">21</span></pre></div></td><td class="code"><div><pre><span></span><code><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="w"> </span><span class="sd">&quot;&quot;&quot;Инициализирует компонент панели навигации.</span>
<span class="sd"> Args:</span>
<span class="sd"> page: Page - экземпляр страницы Playwright</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>
</code></pre></div></td></tr></table></div>
</details>
@ -2114,10 +2133,11 @@
<code>locator</code>
</td>
<td>
<code><span title="str">str</span> | <span title="playwright.sync_api.Locator">Locator</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Локатор для поиска элемента</p>
<p>Локатор элемента или строка с CSS/XPath.</p>
</div>
</td>
<td>
@ -2129,10 +2149,11 @@
<code>item_name</code>
</td>
<td>
<code><span title="str">str</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Текст элемента для проверки</p>
<p>Текст элемента для проверки.</p>
</div>
</td>
<td>
@ -2143,9 +2164,17 @@
</table>
<details class="note" open>
<summary>Note</summary>
<p>Временная обработка для элементов с текстом 'Шаблоны'.</p>
</details>
<details class="quote">
<summary>Source code in <code>components\navbar_component.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">76</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">73</span>
<span class="normal">74</span>
<span class="normal">75</span>
<span class="normal">76</span>
<span class="normal">77</span>
<span class="normal">78</span>
<span class="normal">79</span>
@ -2154,15 +2183,40 @@
<span class="normal">82</span>
<span class="normal">83</span>
<span class="normal">84</span>
<span class="normal">85</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">check_item_visibility</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="n">item_name</span><span class="p">):</span>
<span class="normal">85</span>
<span class="normal">86</span>
<span class="normal">87</span>
<span class="normal">88</span>
<span class="normal">89</span>
<span class="normal">90</span>
<span class="normal">91</span>
<span class="normal">92</span>
<span class="normal">93</span>
<span class="normal">94</span>
<span class="normal">95</span>
<span class="normal">96</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">check_item_visibility</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="n">item_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;Проверяет видимость элемента с указанным текстом.</span>
<span class="sd"> Args:</span>
<span class="sd"> locator: Локатор для поиска элемента</span>
<span class="sd"> item_name: Текст элемента для проверки</span>
<span class="sd"> locator: Локатор элемента или строка с CSS/XPath.</span>
<span class="sd"> item_name: Текст элемента для проверки.</span>
<span class="sd"> Note:</span>
<span class="sd"> Временная обработка для элементов с текстом &#39;Шаблоны&#39;.</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">get_locator</span><span class="p">(</span><span class="n">locator</span><span class="p">)</span><span class="o">.</span><span class="n">get_by_text</span><span class="p">(</span><span class="n">item_name</span><span class="p">)</span>
<span class="n">msg</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;Navigation panel item &#39;</span><span class="si">{</span><span class="n">item_name</span><span class="si">}</span><span class="s2">&#39; is not visible&quot;</span>
<span class="c1">## временно: в навигационной панели есть две панели с именем Шаблоны</span>
<span class="c1">## для их различия добавлены индексы Шаблоны_1 для Настройки/Шаблоны</span>
<span class="c1">## Шаблоны_2 для Настройки/ZTP/Шаблоны</span>
<span class="n">loc</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="k">if</span> <span class="n">item_name</span> <span class="o">==</span> <span class="s2">&quot;Шаблоны_1&quot;</span><span class="p">:</span>
<span class="n">loc</span> <span class="o">=</span> <span class="n">loc</span><span class="o">.</span><span class="n">get_by_text</span><span class="p">(</span><span class="s2">&quot;Шаблоны&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">first</span>
<span class="k">elif</span> <span class="n">item_name</span> <span class="o">==</span> <span class="s2">&quot;Шаблоны_2&quot;</span><span class="p">:</span>
<span class="n">loc</span> <span class="o">=</span> <span class="n">loc</span><span class="o">.</span><span class="n">get_by_text</span><span class="p">(</span><span class="s2">&quot;Шаблоны&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="k">else</span><span class="p">:</span>
<span class="n">loc</span> <span class="o">=</span> <span class="n">loc</span><span class="o">.</span><span class="n">get_by_text</span><span class="p">(</span><span class="n">item_name</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">check_presence</span><span class="p">(</span><span class="n">loc</span><span class="p">,</span> <span class="n">msg</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
@ -2200,10 +2254,11 @@
<code>locator</code>
</td>
<td>
<code><span title="str">str</span> | <span title="playwright.sync_api.Locator">Locator</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Локатор для поиска элемента</p>
<p>Локатор элемента или строка с CSS/XPath.</p>
</div>
</td>
<td>
@ -2215,10 +2270,11 @@
<code>item_name</code>
</td>
<td>
<code><span title="str">str</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Текст элемента для клика</p>
<p>Текст элемента для клика.</p>
</div>
</td>
<td>
@ -2231,21 +2287,23 @@
<details class="quote">
<summary>Source code in <code>components\navbar_component.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">42</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">37</span>
<span class="normal">38</span>
<span class="normal">39</span>
<span class="normal">40</span>
<span class="normal">41</span>
<span class="normal">42</span>
<span class="normal">43</span>
<span class="normal">44</span>
<span class="normal">45</span>
<span class="normal">46</span>
<span class="normal">47</span>
<span class="normal">48</span>
<span class="normal">49</span>
<span class="normal">50</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">click_item</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="n">item_name</span><span class="p">):</span>
<span class="normal">46</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">click_item</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="n">item_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;Кликает по элементу с указанным текстом.</span>
<span class="sd"> Args:</span>
<span class="sd"> locator: Локатор для поиска элемента</span>
<span class="sd"> item_name: Текст элемента для клика</span>
<span class="sd"> locator: Локатор элемента или строка с CSS/XPath.</span>
<span class="sd"> item_name: Текст элемента для клика.</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">get_locator</span><span class="p">(</span><span class="n">locator</span><span class="p">)</span>
<span class="n">loc</span><span class="o">.</span><span class="n">get_by_text</span><span class="p">(</span><span class="n">item_name</span><span class="p">)</span><span class="o">.</span><span class="n">click</span><span class="p">()</span>
</code></pre></div></td></tr></table></div>
@ -2284,10 +2342,11 @@
<code>locator</code>
</td>
<td>
<code><span title="str">str</span> | <span title="playwright.sync_api.Locator">Locator</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Локатор для поиска элемента</p>
<p>Локатор родительского элемента.</p>
</div>
</td>
<td>
@ -2299,10 +2358,11 @@
<code>sublevel_number</code>
</td>
<td>
<code><span title="int">int</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Уровень вложенности (1 или 2)</p>
<p>Уровень вложенности (1 или 2).</p>
</div>
</td>
<td>
@ -2314,10 +2374,11 @@
<code>item_name</code>
</td>
<td>
<code><span title="str">str</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Текст элемента для клика</p>
<p>Текст элемента для клика.</p>
</div>
</td>
<td>
@ -2343,7 +2404,7 @@
</td>
<td>
<div class="doc-md-description">
<p>Если указан недопустимый уровень вложенности</p>
<p>Если уровень вложенности не 1 или 2.</p>
</div>
</td>
</tr>
@ -2353,7 +2414,11 @@
<details class="quote">
<summary>Source code in <code>components\navbar_component.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">52</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">48</span>
<span class="normal">49</span>
<span class="normal">50</span>
<span class="normal">51</span>
<span class="normal">52</span>
<span class="normal">53</span>
<span class="normal">54</span>
<span class="normal">55</span>
@ -2371,20 +2436,18 @@
<span class="normal">67</span>
<span class="normal">68</span>
<span class="normal">69</span>
<span class="normal">70</span>
<span class="normal">71</span>
<span class="normal">72</span>
<span class="normal">73</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">click_sub_item</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="n">sublevel_number</span><span class="p">,</span> <span class="n">item_name</span><span class="p">):</span>
<span class="normal">70</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">click_sub_item</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="n">sublevel_number</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">item_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;Кликает по вложенному элементу с указанным текстом.</span>
<span class="sd"> Args:</span>
<span class="sd"> locator: Локатор для поиска элемента</span>
<span class="sd"> sublevel_number: Уровень вложенности (1 или 2)</span>
<span class="sd"> item_name: Текст элемента для клика</span>
<span class="sd"> locator: Локатор родительского элемента.</span>
<span class="sd"> sublevel_number: Уровень вложенности (1 или 2).</span>
<span class="sd"> item_name: Текст элемента для клика.</span>
<span class="sd"> Raises:</span>
<span class="sd"> ValueError: Если указан недопустимый уровень вложенности</span>
<span class="sd"> ValueError: Если уровень вложенности не 1 или 2.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">root_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">NavigationPanelLocators</span><span class="o">.</span><span class="n">NODE_ROOT</span><span class="p">)</span>
<span class="n">children_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">NavigationPanelLocators</span><span class="o">.</span><span class="n">NODE_CHILDREN</span><span class="p">)</span>
@ -2413,7 +2476,7 @@
<div class="doc doc-contents ">
<p>Получает тексты всех элементов по указанному локатору.</p>
<p>Возвращает тексты всех элементов по указанному локатору.</p>
<p><span class="doc-section-title">Parameters:</span></p>
@ -2432,10 +2495,11 @@
<code>locator</code>
</td>
<td>
<code><span title="str">str</span> | <span title="playwright.sync_api.Locator">Locator</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Локатор для поиска элементов</p>
<p>Локатор элементов или строка с CSS/XPath.</p>
</div>
</td>
<td>
@ -2450,17 +2514,18 @@
<table>
<thead>
<tr>
<th>Name</th> <th>Type</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>list</code></td> <td>
<td>
<code><span title="list">list</span>[<span title="str">str</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Список текстов элементов</p>
<p>Список текстов элементов.</p>
</div>
</td>
</tr>
@ -2470,25 +2535,27 @@
<details class="quote">
<summary>Source code in <code>components\navbar_component.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">30</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">24</span>
<span class="normal">25</span>
<span class="normal">26</span>
<span class="normal">27</span>
<span class="normal">28</span>
<span class="normal">29</span>
<span class="normal">30</span>
<span class="normal">31</span>
<span class="normal">32</span>
<span class="normal">33</span>
<span class="normal">34</span>
<span class="normal">35</span>
<span class="normal">36</span>
<span class="normal">37</span>
<span class="normal">38</span>
<span class="normal">39</span>
<span class="normal">40</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">get_item_names</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="w"> </span><span class="sd">&quot;&quot;&quot;Получает тексты всех элементов по указанному локатору.</span>
<span class="normal">35</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">get_item_names</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;Возвращает тексты всех элементов по указанному локатору.</span>
<span class="sd"> Args:</span>
<span class="sd"> locator: Локатор для поиска элементов</span>
<span class="sd"> locator: Локатор элементов или строка с CSS/XPath.</span>
<span class="sd"> Returns:</span>
<span class="sd"> list: Список текстов элементов</span>
<span class="sd"> Список текстов элементов.</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">get_locator</span><span class="p">(</span><span class="n">locator</span><span class="p">)</span>
<span class="k">return</span> <span class="n">loc</span><span class="o">.</span><span class="n">all_inner_texts</span><span class="p">()</span>
</code></pre></div></td></tr></table></div>

View File

@ -642,6 +642,15 @@
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#components.table_component.TableComponent.get_row_locator" class="md-nav__link">
<span class="md-ellipsis">
get_row_locator
</span>
</a>
</li>
<li class="md-nav__item">
@ -1763,6 +1772,15 @@
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#components.table_component.TableComponent.get_row_locator" class="md-nav__link">
<span class="md-ellipsis">
get_row_locator
</span>
</a>
</li>
<li class="md-nav__item">
@ -1804,6 +1822,8 @@
<a id="components.table_component"></a>
<div class="doc doc-contents first">
<p>Модуль компонента таблицы. Содержит класс для работы с табличными данными.</p>
@ -1837,16 +1857,9 @@
Bases: <code><a class="autorefs autorefs-internal" title="BaseComponent (components.base_component.BaseComponent)" href="../base_component/#components.base_component.BaseComponent">BaseComponent</a></code></p>
<p>Компонент таблицы.</p>
<p>Предоставляет методы для взаимодействия с таблицами и проверки их состояния.
Наследуется от BaseComponent.</p>
<p>Компонент таблицы. Предоставляет методы для работы с табличными данными.</p>
<details class="атрибуты" open>
<summary>Атрибуты</summary>
<p>page: Page - экземпляр страницы Playwright</p>
</details>
@ -1854,8 +1867,7 @@
<details class="quote">
<summary>Source code in <code>components\table_component.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 10</span>
<span class="normal"> 11</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 11</span>
<span class="normal"> 12</span>
<span class="normal"> 13</span>
<span class="normal"> 14</span>
@ -1958,36 +1970,54 @@
<span class="normal">111</span>
<span class="normal">112</span>
<span class="normal">113</span>
<span class="normal">114</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">TableComponent</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"> Предоставляет методы для взаимодействия с таблицами и проверки их состояния.</span>
<span class="sd"> Наследуется от BaseComponent.</span>
<span class="sd"> Атрибуты:</span>
<span class="sd"> page: Page - экземпляр страницы Playwright</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="normal">114</span>
<span class="normal">115</span>
<span class="normal">116</span>
<span class="normal">117</span>
<span class="normal">118</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">TableComponent</span><span class="p">(</span><span class="n">BaseComponent</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Компонент таблицы. Предоставляет методы для работы с табличными данными.&quot;&quot;&quot;</span>
<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="w"> </span><span class="sd">&quot;&quot;&quot;Инициализация компонента таблицы.</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Инициализирует компонент таблицы.</span>
<span class="sd"> Args:</span>
<span class="sd"> page: Page - экземпляр страницы Playwright</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>
<span class="c1"># Действия:</span>
<span class="k">def</span><span class="w"> </span><span class="nf">read</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="o">-&gt;</span> <span class="p">[]:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Читает данные из таблицы, включая заголовки и содержимое ячеек.</span>
<span class="k">def</span><span class="w"> </span><span class="nf">get_row_locator</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">table_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="n">row_index</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Locator</span> <span class="o">|</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"> locator: Локатор таблицы</span>
<span class="sd"> table_locator: Локатор таблицы.</span>
<span class="sd"> row_index: Индекс строки.</span>
<span class="sd"> Returns:</span>
<span class="sd"> list: Двумерный список с данными таблицы (первый элемент - заголовки)</span>
<span class="sd"> Локатор строки или None, если индекс вне диапазона.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">table_data</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">table</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">table_locator</span><span class="p">)</span>
<span class="n">rows</span> <span class="o">=</span> <span class="n">table</span><span class="o">.</span><span class="n">locator</span><span class="p">(</span><span class="s2">&quot;//tbody/tr&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">row_index</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">rows</span><span class="o">.</span><span class="n">count</span><span class="p">()):</span>
<span class="k">return</span> <span class="n">rows</span><span class="o">.</span><span class="n">nth</span><span class="p">(</span><span class="n">row_index</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">def</span><span class="w"> </span><span class="nf">read</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">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;Читает данные таблицы, включая заголовки.</span>
<span class="sd"> Args:</span>
<span class="sd"> locator: Локатор таблицы.</span>
<span class="sd"> Returns:</span>
<span class="sd"> Двумерный список с данными таблицы.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">table_data</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">table</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="c1"># Чтение заголовка таблицы</span>
@ -1996,7 +2026,7 @@
<span class="n">header_data</span> <span class="o">=</span> <span class="n">header_cell_text</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
<span class="n">table_data</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">header_data</span><span class="p">)</span>
<span class="c1"># Чтение ячеек таблицы по строкам</span>
<span class="c1"># Чтение ячеек таблицы</span>
<span class="n">rows</span> <span class="o">=</span> <span class="n">table</span><span class="o">.</span><span class="n">locator</span><span class="p">(</span><span class="s2">&quot;//tbody/tr&quot;</span><span class="p">)</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">rows</span><span class="o">.</span><span class="n">count</span><span class="p">()):</span>
<span class="n">row</span> <span class="o">=</span> <span class="n">rows</span><span class="o">.</span><span class="n">nth</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
@ -2010,59 +2040,48 @@
<span class="k">return</span> <span class="n">table_data</span>
<span class="c1"># Проверки:</span>
<span class="k">def</span><span class="w"> </span><span class="nf">check_first_row_visibility</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="k">def</span><span class="w"> </span><span class="nf">check_first_row_visibility</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="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"> locator: Локатор таблицы</span>
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: Если первая строка не видима</span>
<span class="sd"> locator: Локатор таблицы.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">table</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">first_row</span> <span class="o">=</span> <span class="n">table</span><span class="o">.</span><span class="n">locator</span><span class="p">(</span><span class="s2">&quot;//tbody/tr&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">first</span>
<span class="n">expect</span><span class="p">(</span><span class="n">first_row</span><span class="p">)</span><span class="o">.</span><span class="n">to_be_visible</span><span class="p">(),</span> <span class="s2">&quot;The first table row is not visible&quot;</span>
<span class="k">def</span><span class="w"> </span><span class="nf">check_last_row_visibility</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="k">def</span><span class="w"> </span><span class="nf">check_last_row_visibility</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="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"> locator: Локатор таблицы</span>
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: Если последняя строка не видима</span>
<span class="sd"> locator: Локатор таблицы.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">table</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">last_row</span> <span class="o">=</span> <span class="n">table</span><span class="o">.</span><span class="n">locator</span><span class="p">(</span><span class="s2">&quot;//tbody/tr&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">last</span>
<span class="n">expect</span><span class="p">(</span><span class="n">last_row</span><span class="p">)</span><span class="o">.</span><span class="n">to_be_visible</span><span class="p">(),</span> <span class="s2">&quot;The last table row is not visible&quot;</span>
<span class="k">def</span><span class="w"> </span><span class="nf">check_row_highlighting</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="n">row_index</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Проверяет изменение цвета строки при наведении курсора.</span>
<span class="k">def</span><span class="w"> </span><span class="nf">check_row_highlighting</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="n">row_index</span><span class="p">:</span> <span class="nb">int</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"> locator: Локатор таблицы</span>
<span class="sd"> row_index: Индекс проверяемой строки</span>
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: Если цвет строки не изменился при наведении</span>
<span class="sd"> locator: Локатор таблицы.</span>
<span class="sd"> row_index: Индекс проверяемой строки.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">table</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">row</span> <span class="o">=</span> <span class="n">table</span><span class="o">.</span><span class="n">locator</span><span class="p">(</span><span class="s2">&quot;//tbody/tr&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">nth</span><span class="p">(</span><span class="n">row_index</span><span class="p">)</span>
<span class="n">row</span><span class="o">.</span><span class="n">scroll_into_view_if_needed</span><span class="p">()</span>
<span class="c1"># Получение элемента с подсветкой и его цвета</span>
<span class="n">hover_element</span> <span class="o">=</span> <span class="n">row</span><span class="o">.</span><span class="n">locator</span><span class="p">(</span><span class="s2">&quot;.body-row-hover&quot;</span><span class="p">)</span>
<span class="n">initial_color</span> <span class="o">=</span> <span class="n">hover_element</span><span class="o">.</span><span class="n">evaluate</span><span class="p">(</span><span class="s2">&quot;el =&gt; window.getComputedStyle(el).backgroundColor&quot;</span><span class="p">)</span>
<span class="c1"># Наведение на строку</span>
<span class="n">row</span><span class="o">.</span><span class="n">hover</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">page</span><span class="o">.</span><span class="n">wait_for_timeout</span><span class="p">(</span><span class="mi">300</span><span class="p">)</span> <span class="c1"># 0.3 секунды</span>
<span class="bp">self</span><span class="o">.</span><span class="n">page</span><span class="o">.</span><span class="n">wait_for_timeout</span><span class="p">(</span><span class="mi">300</span><span class="p">)</span>
<span class="c1"># Получение нового цвета</span>
<span class="n">new_color</span> <span class="o">=</span> <span class="n">hover_element</span><span class="o">.</span><span class="n">evaluate</span><span class="p">(</span><span class="s2">&quot;el =&gt; window.getComputedStyle(el).backgroundColor&quot;</span><span class="p">)</span>
<span class="k">assert</span> <span class="n">initial_color</span> <span class="o">==</span> <span class="n">new_color</span><span class="p">,</span> <span class="s2">&quot;Color of row did not change when hovering the cursor&quot;</span>
<span class="k">assert</span> <span class="n">initial_color</span> <span class="o">!=</span> <span class="n">new_color</span><span class="p">,</span> <span class="s2">&quot;Color of row did not change when hovering the cursor&quot;</span>
</code></pre></div></td></tr></table></div>
</details>
@ -2089,7 +2108,7 @@
<div class="doc doc-contents ">
<p>Инициализация компонента таблицы.</p>
<p>Инициализирует компонент таблицы.</p>
<p><span class="doc-section-title">Parameters:</span></p>
@ -2112,7 +2131,7 @@
</td>
<td>
<div class="doc-md-description">
<p>Page - экземпляр страницы Playwright</p>
<p>Экземпляр страницы Playwright.</p>
</div>
</td>
<td>
@ -2125,18 +2144,20 @@
<details class="quote">
<summary>Source code in <code>components\table_component.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">20</span>
<span class="normal">21</span>
<span class="normal">22</span>
<span class="normal">23</span>
<span class="normal">24</span>
<span class="normal">25</span>
<span class="normal">26</span></pre></div></td><td class="code"><div><pre><span></span><code><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="w"> </span><span class="sd">&quot;&quot;&quot;Инициализация компонента таблицы.</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">14</span>
<span class="normal">15</span>
<span class="normal">16</span>
<span class="normal">17</span>
<span class="normal">18</span>
<span class="normal">19</span>
<span class="normal">20</span>
<span class="normal">21</span></pre></div></td><td class="code"><div><pre><span></span><code><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="w"> </span><span class="sd">&quot;&quot;&quot;Инициализирует компонент таблицы.</span>
<span class="sd"> Args:</span>
<span class="sd"> page: Page - экземпляр страницы Playwright</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>
</code></pre></div></td></tr></table></div>
</details>
@ -2174,10 +2195,11 @@
<code>locator</code>
</td>
<td>
<code><span title="str">str</span> | <span title="playwright.sync_api.Locator">Locator</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Локатор таблицы</p>
<p>Локатор таблицы.</p>
</div>
</td>
<td>
@ -2188,51 +2210,24 @@
</table>
<p><span class="doc-section-title">Raises:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="AssertionError">AssertionError</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Если первая строка не видима</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>components\table_component.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">62</span>
<span class="normal">63</span>
<span class="normal">64</span>
<span class="normal">65</span>
<span class="normal">66</span>
<span class="normal">67</span>
<span class="normal">68</span>
<span class="normal">69</span>
<span class="normal">70</span>
<span class="normal">71</span>
<span class="normal">72</span>
<span class="normal">73</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">check_first_row_visibility</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">locator</span><span class="p">):</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">77</span>
<span class="normal">78</span>
<span class="normal">79</span>
<span class="normal">80</span>
<span class="normal">81</span>
<span class="normal">82</span>
<span class="normal">83</span>
<span class="normal">84</span>
<span class="normal">85</span>
<span class="normal">86</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">check_first_row_visibility</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="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"> locator: Локатор таблицы</span>
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: Если первая строка не видима</span>
<span class="sd"> locator: Локатор таблицы.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">table</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">first_row</span> <span class="o">=</span> <span class="n">table</span><span class="o">.</span><span class="n">locator</span><span class="p">(</span><span class="s2">&quot;//tbody/tr&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">first</span>
<span class="n">expect</span><span class="p">(</span><span class="n">first_row</span><span class="p">)</span><span class="o">.</span><span class="n">to_be_visible</span><span class="p">(),</span> <span class="s2">&quot;The first table row is not visible&quot;</span>
@ -2272,10 +2267,11 @@
<code>locator</code>
</td>
<td>
<code><span title="str">str</span> | <span title="playwright.sync_api.Locator">Locator</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Локатор таблицы</p>
<p>Локатор таблицы.</p>
</div>
</td>
<td>
@ -2286,51 +2282,24 @@
</table>
<p><span class="doc-section-title">Raises:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="AssertionError">AssertionError</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Если последняя строка не видима</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>components\table_component.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">75</span>
<span class="normal">76</span>
<span class="normal">77</span>
<span class="normal">78</span>
<span class="normal">79</span>
<span class="normal">80</span>
<span class="normal">81</span>
<span class="normal">82</span>
<span class="normal">83</span>
<span class="normal">84</span>
<span class="normal">85</span>
<span class="normal">86</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">check_last_row_visibility</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">locator</span><span class="p">):</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">88</span>
<span class="normal">89</span>
<span class="normal">90</span>
<span class="normal">91</span>
<span class="normal">92</span>
<span class="normal">93</span>
<span class="normal">94</span>
<span class="normal">95</span>
<span class="normal">96</span>
<span class="normal">97</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">check_last_row_visibility</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="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"> locator: Локатор таблицы</span>
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: Если последняя строка не видима</span>
<span class="sd"> locator: Локатор таблицы.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">table</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">last_row</span> <span class="o">=</span> <span class="n">table</span><span class="o">.</span><span class="n">locator</span><span class="p">(</span><span class="s2">&quot;//tbody/tr&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">last</span>
<span class="n">expect</span><span class="p">(</span><span class="n">last_row</span><span class="p">)</span><span class="o">.</span><span class="n">to_be_visible</span><span class="p">(),</span> <span class="s2">&quot;The last table row is not visible&quot;</span>
@ -2351,7 +2320,7 @@
<div class="doc doc-contents ">
<p>Проверяет изменение цвета строки при наведении курсора.</p>
<p>Проверяет изменение цвета строки при наведении.</p>
<p><span class="doc-section-title">Parameters:</span></p>
@ -2370,10 +2339,11 @@
<code>locator</code>
</td>
<td>
<code><span title="str">str</span> | <span title="playwright.sync_api.Locator">Locator</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Локатор таблицы</p>
<p>Локатор таблицы.</p>
</div>
</td>
<td>
@ -2385,10 +2355,11 @@
<code>row_index</code>
</td>
<td>
<code><span title="int">int</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Индекс проверяемой строки</p>
<p>Индекс проверяемой строки.</p>
</div>
</td>
<td>
@ -2399,43 +2370,9 @@
</table>
<p><span class="doc-section-title">Raises:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="AssertionError">AssertionError</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Если цвет строки не изменился при наведении</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>components\table_component.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 88</span>
<span class="normal"> 89</span>
<span class="normal"> 90</span>
<span class="normal"> 91</span>
<span class="normal"> 92</span>
<span class="normal"> 93</span>
<span class="normal"> 94</span>
<span class="normal"> 95</span>
<span class="normal"> 96</span>
<span class="normal"> 97</span>
<span class="normal"> 98</span>
<span class="normal"> 99</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 99</span>
<span class="normal">100</span>
<span class="normal">101</span>
<span class="normal">102</span>
@ -2450,33 +2387,159 @@
<span class="normal">111</span>
<span class="normal">112</span>
<span class="normal">113</span>
<span class="normal">114</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">check_row_highlighting</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="n">row_index</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Проверяет изменение цвета строки при наведении курсора.</span>
<span class="normal">114</span>
<span class="normal">115</span>
<span class="normal">116</span>
<span class="normal">117</span>
<span class="normal">118</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">check_row_highlighting</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="n">row_index</span><span class="p">:</span> <span class="nb">int</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"> locator: Локатор таблицы</span>
<span class="sd"> row_index: Индекс проверяемой строки</span>
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: Если цвет строки не изменился при наведении</span>
<span class="sd"> locator: Локатор таблицы.</span>
<span class="sd"> row_index: Индекс проверяемой строки.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">table</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">row</span> <span class="o">=</span> <span class="n">table</span><span class="o">.</span><span class="n">locator</span><span class="p">(</span><span class="s2">&quot;//tbody/tr&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">nth</span><span class="p">(</span><span class="n">row_index</span><span class="p">)</span>
<span class="n">row</span><span class="o">.</span><span class="n">scroll_into_view_if_needed</span><span class="p">()</span>
<span class="c1"># Получение элемента с подсветкой и его цвета</span>
<span class="n">hover_element</span> <span class="o">=</span> <span class="n">row</span><span class="o">.</span><span class="n">locator</span><span class="p">(</span><span class="s2">&quot;.body-row-hover&quot;</span><span class="p">)</span>
<span class="n">initial_color</span> <span class="o">=</span> <span class="n">hover_element</span><span class="o">.</span><span class="n">evaluate</span><span class="p">(</span><span class="s2">&quot;el =&gt; window.getComputedStyle(el).backgroundColor&quot;</span><span class="p">)</span>
<span class="c1"># Наведение на строку</span>
<span class="n">row</span><span class="o">.</span><span class="n">hover</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">page</span><span class="o">.</span><span class="n">wait_for_timeout</span><span class="p">(</span><span class="mi">300</span><span class="p">)</span> <span class="c1"># 0.3 секунды</span>
<span class="bp">self</span><span class="o">.</span><span class="n">page</span><span class="o">.</span><span class="n">wait_for_timeout</span><span class="p">(</span><span class="mi">300</span><span class="p">)</span>
<span class="c1"># Получение нового цвета</span>
<span class="n">new_color</span> <span class="o">=</span> <span class="n">hover_element</span><span class="o">.</span><span class="n">evaluate</span><span class="p">(</span><span class="s2">&quot;el =&gt; window.getComputedStyle(el).backgroundColor&quot;</span><span class="p">)</span>
<span class="k">assert</span> <span class="n">initial_color</span> <span class="o">!=</span> <span class="n">new_color</span><span class="p">,</span> <span class="s2">&quot;Color of row did not change when hovering the cursor&quot;</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
<span class="k">assert</span> <span class="n">initial_color</span> <span class="o">==</span> <span class="n">new_color</span><span class="p">,</span> <span class="s2">&quot;Color of row did not change when hovering the cursor&quot;</span>
</div>
<div class="doc doc-object doc-function">
<h3 id="components.table_component.TableComponent.get_row_locator" class="doc doc-heading">
<code class="highlight language-python"><span class="n">get_row_locator</span><span class="p">(</span><span class="n">table_locator</span><span class="p">,</span> <span class="n">row_index</span><span class="p">)</span></code>
</h3>
<div class="doc doc-contents ">
<p>Возвращает локатор строки по индексу.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>table_locator</code>
</td>
<td>
<code><span title="str">str</span> | <span title="playwright.sync_api.Locator">Locator</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Локатор таблицы.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>row_index</code>
</td>
<td>
<code><span title="int">int</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Индекс строки.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="playwright.sync_api.Locator">Locator</span> | None</code>
</td>
<td>
<div class="doc-md-description">
<p>Локатор строки или None, если индекс вне диапазона.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>components\table_component.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">24</span>
<span class="normal">25</span>
<span class="normal">26</span>
<span class="normal">27</span>
<span class="normal">28</span>
<span class="normal">29</span>
<span class="normal">30</span>
<span class="normal">31</span>
<span class="normal">32</span>
<span class="normal">33</span>
<span class="normal">34</span>
<span class="normal">35</span>
<span class="normal">36</span>
<span class="normal">37</span>
<span class="normal">38</span>
<span class="normal">39</span>
<span class="normal">40</span>
<span class="normal">41</span>
<span class="normal">42</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">get_row_locator</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">table_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="n">row_index</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Locator</span> <span class="o">|</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"> table_locator: Локатор таблицы.</span>
<span class="sd"> row_index: Индекс строки.</span>
<span class="sd"> Returns:</span>
<span class="sd"> Локатор строки или None, если индекс вне диапазона.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">table</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">table_locator</span><span class="p">)</span>
<span class="n">rows</span> <span class="o">=</span> <span class="n">table</span><span class="o">.</span><span class="n">locator</span><span class="p">(</span><span class="s2">&quot;//tbody/tr&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">row_index</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">rows</span><span class="o">.</span><span class="n">count</span><span class="p">()):</span>
<span class="k">return</span> <span class="n">rows</span><span class="o">.</span><span class="n">nth</span><span class="p">(</span><span class="n">row_index</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
@ -2494,7 +2557,7 @@
<div class="doc doc-contents ">
<p>Читает данные из таблицы, включая заголовки и содержимое ячеек.</p>
<p>Читает данные таблицы, включая заголовки.</p>
<p><span class="doc-section-title">Parameters:</span></p>
@ -2513,10 +2576,11 @@
<code>locator</code>
</td>
<td>
<code><span title="str">str</span> | <span title="playwright.sync_api.Locator">Locator</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Локатор таблицы</p>
<p>Локатор таблицы.</p>
</div>
</td>
<td>
@ -2531,18 +2595,18 @@
<table>
<thead>
<tr>
<th>Name</th> <th>Type</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>list</code></td> <td>
<code>[]</code>
<td>
<code><span title="list">list</span>[<span title="list">list</span>[<span title="str">str</span>]]</code>
</td>
<td>
<div class="doc-md-description">
<p>Двумерный список с данными таблицы (первый элемент - заголовки)</p>
<p>Двумерный список с данными таблицы.</p>
</div>
</td>
</tr>
@ -2552,22 +2616,7 @@
<details class="quote">
<summary>Source code in <code>components\table_component.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">29</span>
<span class="normal">30</span>
<span class="normal">31</span>
<span class="normal">32</span>
<span class="normal">33</span>
<span class="normal">34</span>
<span class="normal">35</span>
<span class="normal">36</span>
<span class="normal">37</span>
<span class="normal">38</span>
<span class="normal">39</span>
<span class="normal">40</span>
<span class="normal">41</span>
<span class="normal">42</span>
<span class="normal">43</span>
<span class="normal">44</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">44</span>
<span class="normal">45</span>
<span class="normal">46</span>
<span class="normal">47</span>
@ -2582,17 +2631,32 @@
<span class="normal">56</span>
<span class="normal">57</span>
<span class="normal">58</span>
<span class="normal">59</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">read</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="o">-&gt;</span> <span class="p">[]:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Читает данные из таблицы, включая заголовки и содержимое ячеек.</span>
<span class="normal">59</span>
<span class="normal">60</span>
<span class="normal">61</span>
<span class="normal">62</span>
<span class="normal">63</span>
<span class="normal">64</span>
<span class="normal">65</span>
<span class="normal">66</span>
<span class="normal">67</span>
<span class="normal">68</span>
<span class="normal">69</span>
<span class="normal">70</span>
<span class="normal">71</span>
<span class="normal">72</span>
<span class="normal">73</span>
<span class="normal">74</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">read</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">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;Читает данные таблицы, включая заголовки.</span>
<span class="sd"> Args:</span>
<span class="sd"> locator: Локатор таблицы</span>
<span class="sd"> locator: Локатор таблицы.</span>
<span class="sd"> Returns:</span>
<span class="sd"> list: Двумерный список с данными таблицы (первый элемент - заголовки)</span>
<span class="sd"> Двумерный список с данными таблицы.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">table_data</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">table_data</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">table</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="c1"># Чтение заголовка таблицы</span>
@ -2601,7 +2665,7 @@
<span class="n">header_data</span> <span class="o">=</span> <span class="n">header_cell_text</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
<span class="n">table_data</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">header_data</span><span class="p">)</span>
<span class="c1"># Чтение ячеек таблицы по строкам</span>
<span class="c1"># Чтение ячеек таблицы</span>
<span class="n">rows</span> <span class="o">=</span> <span class="n">table</span><span class="o">.</span><span class="n">locator</span><span class="p">(</span><span class="s2">&quot;//tbody/tr&quot;</span><span class="p">)</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">rows</span><span class="o">.</span><span class="n">count</span><span class="p">()):</span>
<span class="n">row</span> <span class="o">=</span> <span class="n">rows</span><span class="o">.</span><span class="n">nth</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>

View File

@ -675,9 +675,9 @@
</li>
<li class="md-nav__item">
<a href="#components.toolbar_component.ToolbarComponent.check_presence" class="md-nav__link">
<a href="#components.toolbar_component.ToolbarComponent.check_toolbar_presence" class="md-nav__link">
<span class="md-ellipsis">
check_presence
check_toolbar_presence
</span>
</a>
@ -1820,9 +1820,9 @@
</li>
<li class="md-nav__item">
<a href="#components.toolbar_component.ToolbarComponent.check_presence" class="md-nav__link">
<a href="#components.toolbar_component.ToolbarComponent.check_toolbar_presence" class="md-nav__link">
<span class="md-ellipsis">
check_presence
check_toolbar_presence
</span>
</a>
@ -1894,6 +1894,12 @@
<a id="components.toolbar_component"></a>
<div class="doc doc-contents first">
<p>Модуль компонента тулбара (панели инструментов).</p>
<p>Содержит класс ToolbarComponent для работы с элементами тулбара:
- Управление кнопками и их подсказками
- Проверка видимости элементов
- Взаимодействие с панелью инструментов</p>
@ -1927,11 +1933,7 @@
Bases: <code><a class="autorefs autorefs-internal" title="BaseComponent (components.base_component.BaseComponent)" href="../base_component/#components.base_component.BaseComponent">BaseComponent</a></code></p>
<p>Компонент тулбара (панели инструментов).</p>
<p>Предоставляет методы для работы с панелью инструментов:
- Добавление/управление кнопками
- Проверка видимости элементов
- Взаимодействие с элементами тулбара</p>
<p>Компонент тулбара. Предоставляет методы для работы с панелью инструментов.</p>
<p><span class="doc-section-title">Parameters:</span></p>
@ -1988,15 +1990,7 @@
<details class="quote">
<summary>Source code in <code>components\toolbar_component.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 10</span>
<span class="normal"> 11</span>
<span class="normal"> 12</span>
<span class="normal"> 13</span>
<span class="normal"> 14</span>
<span class="normal"> 15</span>
<span class="normal"> 16</span>
<span class="normal"> 17</span>
<span class="normal"> 18</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 18</span>
<span class="normal"> 19</span>
<span class="normal"> 20</span>
<span class="normal"> 21</span>
@ -2122,13 +2116,31 @@
<span class="normal">141</span>
<span class="normal">142</span>
<span class="normal">143</span>
<span class="normal">144</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">ToolbarComponent</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="normal">144</span>
<span class="normal">145</span>
<span class="normal">146</span>
<span class="normal">147</span>
<span class="normal">148</span>
<span class="normal">149</span>
<span class="normal">150</span>
<span class="normal">151</span>
<span class="normal">152</span>
<span class="normal">153</span>
<span class="normal">154</span>
<span class="normal">155</span>
<span class="normal">156</span>
<span class="normal">157</span>
<span class="normal">158</span>
<span class="normal">159</span>
<span class="normal">160</span>
<span class="normal">161</span>
<span class="normal">162</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">ToolbarComponent</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"> Предоставляет методы для работы с панелью инструментов:</span>
<span class="sd"> - Добавление/управление кнопками</span>
<span class="sd"> - Проверка видимости элементов</span>
<span class="sd"> - Взаимодействие с элементами тулбара</span>
<span class="sd"> Args:</span>
<span class="sd"> page (Page): Экземпляр страницы Playwright</span>
@ -2136,17 +2148,19 @@
<span class="sd"> &quot;&quot;&quot;</span>
<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="n">title</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="w"> </span><span class="sd">&quot;&quot;&quot;Инициализирует компонент тулбара с указанным заголовком.&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">title</span> <span class="o">=</span> <span class="n">title</span>
<span class="bp">self</span><span class="o">.</span><span class="n">buttons</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">def</span><span class="w"> </span><span class="nf">add_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;Устанавливает заголовок тулбара.</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Устанавливает новый заголовок тулбара.</span>
<span class="sd"> Args:</span>
<span class="sd"> title (str): Новый заголовок тулбара</span>
<span class="sd"> title (str): Новый заголовок</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">title</span> <span class="o">=</span> <span class="n">title</span>
<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="n">Locator</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>
@ -2156,6 +2170,7 @@
<span class="sd"> locator (Locator): Локатор кнопки</span>
<span class="sd"> name (str): Уникальное имя кнопки</span>
<span class="sd"> &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>
<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">TooltipButton</span> <span class="o">|</span> <span class="kc">None</span><span class="p">:</span>
@ -2165,8 +2180,9 @@
<span class="sd"> name (str): Имя кнопки</span>
<span class="sd"> Returns:</span>
<span class="sd"> TooltipButton | None: Экземпляр кнопки или None если не найдена</span>
<span class="sd"> TooltipButton | None: Найденная кнопка или None</span>
<span class="sd"> &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>
@ -2181,6 +2197,7 @@
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: Если кнопка не найдена</span>
<span class="sd"> &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>
@ -2198,6 +2215,7 @@
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: Если имя кнопки не поддерживается</span>
<span class="sd"> &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>
@ -2215,17 +2233,19 @@
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: Если имя кнопки не поддерживается</span>
<span class="sd"> &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="k">return</span> <span class="n">button</span><span class="o">.</span><span class="n">is_not_present</span><span class="p">(</span><span class="n">timeout</span><span class="o">=</span><span class="mi">1000</span><span class="p">)</span> <span class="c1"># Ожидание 1 секунда</span>
<span class="k">def</span><span class="w"> </span><span class="nf">check_presence</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</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="k">def</span><span class="w"> </span><span class="nf">check_toolbar_presence</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</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"> message (str): Сообщение об ошибке если тулбар не виден</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">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">ToolbarLocators</span><span class="o">.</span><span class="n">TITLE</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="bp">self</span><span class="o">.</span><span class="n">title</span><span class="p">)</span>
<span class="n">expect</span><span class="p">(</span><span class="n">locator</span><span class="p">)</span><span class="o">.</span><span class="n">to_be_visible</span><span class="p">(),</span> <span class="n">message</span>
@ -2238,6 +2258,7 @@
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: Если кнопка не найдена или не видна</span>
<span class="sd"> &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>
@ -2251,8 +2272,9 @@
<span class="sd"> tooltip (str): Ожидаемый текст подсказки</span>
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: Если кнопка не найдена или текст подсказки не совпадает</span>
<span class="sd"> AssertionError: Если текст подсказки не совпадает</span>
<span class="sd"> &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>
@ -2283,17 +2305,19 @@
<div class="doc doc-contents ">
<p>Инициализация компонента тулбара.</p>
<p>Инициализирует компонент тулбара с указанным заголовком.</p>
<details class="quote">
<summary>Source code in <code>components\toolbar_component.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">23</span>
<span class="normal">24</span>
<span class="normal">25</span>
<span class="normal">26</span>
<span class="normal">27</span></pre></div></td><td class="code"><div><pre><span></span><code><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="n">title</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>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">31</span>
<span class="normal">32</span>
<span class="normal">33</span>
<span class="normal">34</span>
<span class="normal">35</span>
<span class="normal">36</span></pre></div></td><td class="code"><div><pre><span></span><code><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="n">title</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="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">title</span> <span class="o">=</span> <span class="n">title</span>
<span class="bp">self</span><span class="o">.</span><span class="n">buttons</span> <span class="o">=</span> <span class="p">[]</span>
@ -2366,20 +2390,22 @@
<details class="quote">
<summary>Source code in <code>components\toolbar_component.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">37</span>
<span class="normal">38</span>
<span class="normal">39</span>
<span class="normal">40</span>
<span class="normal">41</span>
<span class="normal">42</span>
<span class="normal">43</span>
<span class="normal">44</span></pre></div></td><td class="code"><div><pre><span></span><code><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="n">Locator</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>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">47</span>
<span class="normal">48</span>
<span class="normal">49</span>
<span class="normal">50</span>
<span class="normal">51</span>
<span class="normal">52</span>
<span class="normal">53</span>
<span class="normal">54</span>
<span class="normal">55</span></pre></div></td><td class="code"><div><pre><span></span><code><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="n">Locator</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;Добавляет кнопку в тулбар.</span>
<span class="sd"> Args:</span>
<span class="sd"> locator (Locator): Локатор кнопки</span>
<span class="sd"> name (str): Уникальное имя кнопки</span>
<span class="sd"> &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>
</code></pre></div></td></tr></table></div>
</details>
@ -2398,7 +2424,7 @@
<div class="doc doc-contents ">
<p>Устанавливает заголовок тулбара.</p>
<p>Устанавливает новый заголовок тулбара.</p>
<p><span class="doc-section-title">Parameters:</span></p>
@ -2421,7 +2447,7 @@
</td>
<td>
<div class="doc-md-description">
<p>Новый заголовок тулбара</p>
<p>Новый заголовок</p>
</div>
</td>
<td>
@ -2434,18 +2460,20 @@
<details class="quote">
<summary>Source code in <code>components\toolbar_component.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">29</span>
<span class="normal">30</span>
<span class="normal">31</span>
<span class="normal">32</span>
<span class="normal">33</span>
<span class="normal">34</span>
<span class="normal">35</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">add_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;Устанавливает заголовок тулбара.</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">38</span>
<span class="normal">39</span>
<span class="normal">40</span>
<span class="normal">41</span>
<span class="normal">42</span>
<span class="normal">43</span>
<span class="normal">44</span>
<span class="normal">45</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">add_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;Устанавливает новый заголовок тулбара.</span>
<span class="sd"> Args:</span>
<span class="sd"> title (str): Новый заголовок тулбара</span>
<span class="sd"> title (str): Новый заголовок</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">title</span> <span class="o">=</span> <span class="n">title</span>
</code></pre></div></td></tr></table></div>
</details>
@ -2523,19 +2551,20 @@
<details class="quote">
<summary>Source code in <code>components\toolbar_component.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">117</span>
<span class="normal">118</span>
<span class="normal">119</span>
<span class="normal">120</span>
<span class="normal">121</span>
<span class="normal">122</span>
<span class="normal">123</span>
<span class="normal">124</span>
<span class="normal">125</span>
<span class="normal">126</span>
<span class="normal">127</span>
<span class="normal">128</span>
<span class="normal">129</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">check_button_presence</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>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">133</span>
<span class="normal">134</span>
<span class="normal">135</span>
<span class="normal">136</span>
<span class="normal">137</span>
<span class="normal">138</span>
<span class="normal">139</span>
<span class="normal">140</span>
<span class="normal">141</span>
<span class="normal">142</span>
<span class="normal">143</span>
<span class="normal">144</span>
<span class="normal">145</span>
<span class="normal">146</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">check_button_presence</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;Проверяет наличие и видимость кнопки.</span>
<span class="sd"> Args:</span>
@ -2544,6 +2573,7 @@
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: Если кнопка не найдена или не видна</span>
<span class="sd"> &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>
@ -2630,7 +2660,7 @@
</td>
<td>
<div class="doc-md-description">
<p>Если кнопка не найдена или текст подсказки не совпадает</p>
<p>Если текст подсказки не совпадает</p>
</div>
</td>
</tr>
@ -2640,20 +2670,21 @@
<details class="quote">
<summary>Source code in <code>components\toolbar_component.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">131</span>
<span class="normal">132</span>
<span class="normal">133</span>
<span class="normal">134</span>
<span class="normal">135</span>
<span class="normal">136</span>
<span class="normal">137</span>
<span class="normal">138</span>
<span class="normal">139</span>
<span class="normal">140</span>
<span class="normal">141</span>
<span class="normal">142</span>
<span class="normal">143</span>
<span class="normal">144</span></pre></div></td><td class="code"><div><pre><span></span><code><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>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">148</span>
<span class="normal">149</span>
<span class="normal">150</span>
<span class="normal">151</span>
<span class="normal">152</span>
<span class="normal">153</span>
<span class="normal">154</span>
<span class="normal">155</span>
<span class="normal">156</span>
<span class="normal">157</span>
<span class="normal">158</span>
<span class="normal">159</span>
<span class="normal">160</span>
<span class="normal">161</span>
<span class="normal">162</span></pre></div></td><td class="code"><div><pre><span></span><code><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;Проверяет текст подсказки кнопки.</span>
<span class="sd"> Args:</span>
@ -2661,8 +2692,9 @@
<span class="sd"> tooltip (str): Ожидаемый текст подсказки</span>
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: Если кнопка не найдена или текст подсказки не совпадает</span>
<span class="sd"> AssertionError: Если текст подсказки не совпадает</span>
<span class="sd"> &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>
@ -2676,8 +2708,8 @@
<div class="doc doc-object doc-function">
<h3 id="components.toolbar_component.ToolbarComponent.check_presence" class="doc doc-heading">
<code class="highlight language-python"><span class="n">check_presence</span><span class="p">(</span><span class="n">message</span><span class="p">)</span></code>
<h3 id="components.toolbar_component.ToolbarComponent.check_toolbar_presence" class="doc doc-heading">
<code class="highlight language-python"><span class="n">check_toolbar_presence</span><span class="p">(</span><span class="n">message</span><span class="p">)</span></code>
</h3>
@ -2720,19 +2752,21 @@
<details class="quote">
<summary>Source code in <code>components\toolbar_component.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">108</span>
<span class="normal">109</span>
<span class="normal">110</span>
<span class="normal">111</span>
<span class="normal">112</span>
<span class="normal">113</span>
<span class="normal">114</span>
<span class="normal">115</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">check_presence</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</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>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">123</span>
<span class="normal">124</span>
<span class="normal">125</span>
<span class="normal">126</span>
<span class="normal">127</span>
<span class="normal">128</span>
<span class="normal">129</span>
<span class="normal">130</span>
<span class="normal">131</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">check_toolbar_presence</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</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"> message (str): Сообщение об ошибке если тулбар не виден</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">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">ToolbarLocators</span><span class="o">.</span><span class="n">TITLE</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="bp">self</span><span class="o">.</span><span class="n">title</span><span class="p">)</span>
<span class="n">expect</span><span class="p">(</span><span class="n">locator</span><span class="p">)</span><span class="o">.</span><span class="n">to_be_visible</span><span class="p">(),</span> <span class="n">message</span>
</code></pre></div></td></tr></table></div>
@ -2811,19 +2845,20 @@
<details class="quote">
<summary>Source code in <code>components\toolbar_component.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">60</span>
<span class="normal">61</span>
<span class="normal">62</span>
<span class="normal">63</span>
<span class="normal">64</span>
<span class="normal">65</span>
<span class="normal">66</span>
<span class="normal">67</span>
<span class="normal">68</span>
<span class="normal">69</span>
<span class="normal">70</span>
<span class="normal">71</span>
<span class="normal">72</span></pre></div></td><td class="code"><div><pre><span></span><code><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>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">72</span>
<span class="normal">73</span>
<span class="normal">74</span>
<span class="normal">75</span>
<span class="normal">76</span>
<span class="normal">77</span>
<span class="normal">78</span>
<span class="normal">79</span>
<span class="normal">80</span>
<span class="normal">81</span>
<span class="normal">82</span>
<span class="normal">83</span>
<span class="normal">84</span>
<span class="normal">85</span></pre></div></td><td class="code"><div><pre><span></span><code><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;Кликает по кнопке тулбара.</span>
<span class="sd"> Args:</span>
@ -2832,6 +2867,7 @@
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: Если кнопка не найдена</span>
<span class="sd"> &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>
@ -2902,7 +2938,7 @@
</td>
<td>
<div class="doc-md-description">
<p>TooltipButton | None: Экземпляр кнопки или None если не найдена</p>
<p>TooltipButton | None: Найденная кнопка или None</p>
</div>
</td>
</tr>
@ -2912,27 +2948,29 @@
<details class="quote">
<summary>Source code in <code>components\toolbar_component.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">46</span>
<span class="normal">47</span>
<span class="normal">48</span>
<span class="normal">49</span>
<span class="normal">50</span>
<span class="normal">51</span>
<span class="normal">52</span>
<span class="normal">53</span>
<span class="normal">54</span>
<span class="normal">55</span>
<span class="normal">56</span>
<span class="normal">57</span>
<span class="normal">58</span></pre></div></td><td class="code"><div><pre><span></span><code><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">TooltipButton</span> <span class="o">|</span> <span class="kc">None</span><span class="p">:</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">57</span>
<span class="normal">58</span>
<span class="normal">59</span>
<span class="normal">60</span>
<span class="normal">61</span>
<span class="normal">62</span>
<span class="normal">63</span>
<span class="normal">64</span>
<span class="normal">65</span>
<span class="normal">66</span>
<span class="normal">67</span>
<span class="normal">68</span>
<span class="normal">69</span>
<span class="normal">70</span></pre></div></td><td class="code"><div><pre><span></span><code><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">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;Возвращает кнопку по имени.</span>
<span class="sd"> Args:</span>
<span class="sd"> name (str): Имя кнопки</span>
<span class="sd"> Returns:</span>
<span class="sd"> TooltipButton | None: Экземпляр кнопки или None если не найдена</span>
<span class="sd"> TooltipButton | None: Найденная кнопка или None</span>
<span class="sd"> &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>
@ -3036,22 +3074,23 @@
<details class="quote">
<summary>Source code in <code>components\toolbar_component.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 91</span>
<span class="normal"> 92</span>
<span class="normal"> 93</span>
<span class="normal"> 94</span>
<span class="normal"> 95</span>
<span class="normal"> 96</span>
<span class="normal"> 97</span>
<span class="normal"> 98</span>
<span class="normal"> 99</span>
<span class="normal">100</span>
<span class="normal">101</span>
<span class="normal">102</span>
<span class="normal">103</span>
<span class="normal">104</span>
<span class="normal">105</span>
<span class="normal">106</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">is_button_not_present</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">bool</span><span class="p">:</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">105</span>
<span class="normal">106</span>
<span class="normal">107</span>
<span class="normal">108</span>
<span class="normal">109</span>
<span class="normal">110</span>
<span class="normal">111</span>
<span class="normal">112</span>
<span class="normal">113</span>
<span class="normal">114</span>
<span class="normal">115</span>
<span class="normal">116</span>
<span class="normal">117</span>
<span class="normal">118</span>
<span class="normal">119</span>
<span class="normal">120</span>
<span class="normal">121</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">is_button_not_present</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">bool</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Проверяет отсутствие кнопки.</span>
<span class="sd"> Args:</span>
@ -3063,6 +3102,7 @@
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: Если имя кнопки не поддерживается</span>
<span class="sd"> &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>
@ -3166,22 +3206,23 @@
<details class="quote">
<summary>Source code in <code>components\toolbar_component.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">74</span>
<span class="normal">75</span>
<span class="normal">76</span>
<span class="normal">77</span>
<span class="normal">78</span>
<span class="normal">79</span>
<span class="normal">80</span>
<span class="normal">81</span>
<span class="normal">82</span>
<span class="normal">83</span>
<span class="normal">84</span>
<span class="normal">85</span>
<span class="normal">86</span>
<span class="normal">87</span>
<span class="normal">88</span>
<span class="normal">89</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">is_button_present</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">bool</span><span class="p">:</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 87</span>
<span class="normal"> 88</span>
<span class="normal"> 89</span>
<span class="normal"> 90</span>
<span class="normal"> 91</span>
<span class="normal"> 92</span>
<span class="normal"> 93</span>
<span class="normal"> 94</span>
<span class="normal"> 95</span>
<span class="normal"> 96</span>
<span class="normal"> 97</span>
<span class="normal"> 98</span>
<span class="normal"> 99</span>
<span class="normal">100</span>
<span class="normal">101</span>
<span class="normal">102</span>
<span class="normal">103</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">is_button_present</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">bool</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Проверяет наличие кнопки.</span>
<span class="sd"> Args:</span>
@ -3193,6 +3234,7 @@
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: Если имя кнопки не поддерживается</span>
<span class="sd"> &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>

View File

@ -16,7 +16,7 @@
<title>Форматирование кода в соответствии с PEP 8 и Google Python Style Guide - Документация тестов</title>
<title>Add docstring - Документация тестов</title>
@ -59,11 +59,6 @@
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#pep-8-google-python-style-guide" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
@ -96,7 +91,7 @@
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Форматирование кода в соответствии с PEP 8 и Google Python Style Guide
Add docstring
</span>
</div>
@ -1586,25 +1581,6 @@
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#_1" class="md-nav__link">
<span class="md-ellipsis">
Требования к форматированию
</span>
</a>
</li>
</ul>
</nav>
</div>
@ -1619,42 +1595,20 @@
<h1 id="pep-8-google-python-style-guide">Форматирование кода в соответствии с PEP 8 и Google Python Style Guide</h1>
<h2 id="_1">Требования к форматированию</h2>
<ol>
<li><strong>Добавление Docstring</strong>:</li>
<li>Для класса: описание назначения и атрибутов в Google-формате на русском языке</li>
<li>
<p>Для методов: описание аргументов, возвращаемых значений и возможных исключений</p>
</li>
<li>
<p><strong>Сохранение комментариев</strong>:</p>
</li>
<li>Разделительные комментарии (например, <code>#actions:</code>, <code># assertions:</code>) остаются без изменений</li>
<li>Закомментированный код сохраняется в оригинальном виде</li>
<li>
<p>Технические комментарии в методах не изменяются</p>
</li>
<li>
<p><strong>Перевод комментариев</strong>:</p>
</li>
<li>Разделительные комментарии переводятся (например, <code># Действия:</code>, <code># Проверки:</code>)</li>
<li>Пояснительные комментарии к логике кода переводятся</li>
<li>
<p>Не переводятся:</p>
<ul>
<li>Технические сообщения в <code>assert</code>, <code>raise</code> и других системных конструкциях</li>
<li>Закомментированный код</li>
<li>Сообщения в логах и ошибках</li>
</ul>
</li>
<li>
<p><strong>Форматирование кода</strong>:</p>
</li>
<li>Соответствие PEP 8 (отступы, пробелы вокруг операторов)</li>
<li>Сохранение исходной структуры кода</li>
<li>Без изменений рабочей логики программы</li>
</ol>
<h1>Add docstring</h1>
<p><strong>Добавление Docstring</strong></p>
<p>Изменить строго соблюдая требования:
1. Добавить недостающие и улучшить имеющиеся docstrings язык русский.
2. Сделать docstring более компактными, сохранив всю важную информацию.
3. Ограничить в docstring длину строк 79 символами.
4. Добавить docstring перед импортами.
5. Должна быть пустая строка после каждого docstring.
6. Сохранить все текущие комментарии.
7. Запрещено изменять код (изменять только docstring).
8. Не удалять пустые строки.
9. В конце кода должна быть одна пустая строка.</p>
<p>Вывести полный изменённый код и отчет о выполнении требований</p>

View File

@ -1702,6 +1702,10 @@
<a id="data.constants"></a>
<div class="doc doc-contents first">
<p>Модуль constants содержит настройки и константы приложения.</p>
<p>Основной класс Constants предоставляет доступ к переменным окружения,
используемым для аутентификации и других настроек.</p>
@ -1733,15 +1737,14 @@
<div class="doc doc-contents ">
<p>Класс для хранения констант и переменных окружения.</p>
<p>Содержит переменные, используемые для аутентификации и других настроек.
Получает значения из переменных окружения.</p>
<p>Хранит константы и переменные окружения.</p>
<p>Получает значения из переменных окружения. Используется для аутентификации.</p>
<details class="атрибуты" open>
<summary>Атрибуты</summary>
<p>login (str): Логин для аутентификации
password (str): Пароль для аутентификации</p>
<p>login (str): Логин для аутентификации.
password (str): Пароль для аутентификации.</p>
</details>
@ -1751,12 +1754,7 @@ password (str): Пароль для аутентификации</p>
<details class="quote">
<summary>Source code in <code>data\constants.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 4</span>
<span class="normal"> 5</span>
<span class="normal"> 6</span>
<span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 9</span>
<span class="normal">10</span>
<span class="normal">11</span>
<span class="normal">12</span>
@ -1766,15 +1764,20 @@ password (str): Пароль для аутентификации</p>
<span class="normal">16</span>
<span class="normal">17</span>
<span class="normal">18</span>
<span class="normal">19</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">Constants</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Класс для хранения констант и переменных окружения.</span>
<span class="normal">19</span>
<span class="normal">20</span>
<span class="normal">21</span>
<span class="normal">22</span>
<span class="normal">23</span>
<span class="normal">24</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">Constants</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Хранит константы и переменные окружения.</span>
<span class="sd"> Содержит переменные, используемые для аутентификации и других настроек.</span>
<span class="sd"> Получает значения из переменных окружения.</span>
<span class="sd"> Получает значения из переменных окружения. Используется для аутентификации.</span>
<span class="sd"> Атрибуты:</span>
<span class="sd"> login (str): Логин для аутентификации</span>
<span class="sd"> password (str): Пароль для аутентификации</span>
<span class="sd"> login (str): Логин для аутентификации.</span>
<span class="sd"> password (str): Пароль для аутентификации.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">try</span><span class="p">:</span>

View File

@ -1804,6 +1804,10 @@
<a id="data.environment"></a>
<div class="doc doc-contents first">
<p>Модуль environment содержит настройки окружения и URL-адресов.</p>
<p>Класс Environment предоставляет методы для работы с окружением,
токенами и URL-адресами API.</p>
@ -1835,18 +1839,14 @@
<div class="doc doc-contents ">
<p>Класс для работы с окружением и URL-адресами.</p>
<p>Содержит настройки для различных окружений (test, develop) и методы для работы с ними.
Получает текущее окружение из переменных окружения системы.</p>
<p>Управление окружением, URL-адресами и токенами.</p>
<details class="атрибуты" open>
<summary>Атрибуты</summary>
<p>TEST (str): Константа для тестового окружения
DEVELOP (str): Константа для окружения разработки
URLS (dict): Словарь с базовыми URL для каждого окружения
env (str): Текущее окружение
access_token (str): Токен доступа</p>
<details class="атрибуты-класса" open>
<summary>Атрибуты класса</summary>
<p>TEST (str): Константа для тестового окружения.
DEVELOP (str): Константа для dev-окружения.
URLS (Dict[str, str]): Словарь URL для разных окружений.</p>
</details>
@ -1856,13 +1856,7 @@ access_token (str): Токен доступа</p>
<details class="quote">
<summary>Source code in <code>data\environment.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 4</span>
<span class="normal"> 5</span>
<span class="normal"> 6</span>
<span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal">10</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">10</span>
<span class="normal">11</span>
<span class="normal">12</span>
<span class="normal">13</span>
@ -1929,85 +1923,73 @@ access_token (str): Токен доступа</p>
<span class="normal">74</span>
<span class="normal">75</span>
<span class="normal">76</span>
<span class="normal">77</span>
<span class="normal">78</span>
<span class="normal">79</span>
<span class="normal">80</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">Environment</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Класс для работы с окружением и URL-адресами.</span>
<span class="normal">77</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">Environment</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Управление окружением, URL-адресами и токенами.</span>
<span class="sd"> Содержит настройки для различных окружений (test, develop) и методы для работы с ними.</span>
<span class="sd"> Получает текущее окружение из переменных окружения системы.</span>
<span class="sd"> Атрибуты:</span>
<span class="sd"> TEST (str): Константа для тестового окружения</span>
<span class="sd"> DEVELOP (str): Константа для окружения разработки</span>
<span class="sd"> URLS (dict): Словарь с базовыми URL для каждого окружения</span>
<span class="sd"> env (str): Текущее окружение</span>
<span class="sd"> access_token (str): Токен доступа</span>
<span class="sd"> Атрибуты класса:</span>
<span class="sd"> TEST (str): Константа для тестового окружения.</span>
<span class="sd"> DEVELOP (str): Константа для dev-окружения.</span>
<span class="sd"> URLS (Dict[str, str]): Словарь URL для разных окружений.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">TEST</span> <span class="o">=</span> <span class="s1">&#39;test&#39;</span>
<span class="n">DEVELOP</span> <span class="o">=</span> <span class="s1">&#39;develop&#39;</span>
<span class="n">TEST</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s1">&#39;test&#39;</span>
<span class="n">DEVELOP</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s1">&#39;develop&#39;</span>
<span class="n">URLS</span> <span class="o">=</span> <span class="p">{</span>
<span class="n">URLS</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
<span class="n">TEST</span><span class="p">:</span> <span class="s1">&#39;http://192.168.2.76/&#39;</span><span class="p">,</span>
<span class="n">DEVELOP</span><span class="p">:</span> <span class="s1">&#39;http://192.168.2.69/&#39;</span>
<span class="p">}</span>
<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="w"> </span><span class="sd">&quot;&quot;&quot;Инициализация объекта окружения.</span>
<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="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="sd"> Устанавливает окружение из переменной окружения ENV или по умолчанию TEST.</span>
<span class="sd"> Инициализирует пустой access_token.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">env</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s1">&#39;ENV&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">access_token</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s1">&#39;ENV&#39;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">TEST</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">access_token</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">token</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">env</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TEST</span>
<span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TEST</span>
<span class="k">def</span><span class="w"> </span><span class="nf">get_base_url</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span><span class="w"> </span><span class="nf">get_base_url</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;Возвращает базовый URL для текущего окружения.</span>
<span class="sd"> Returns:</span>
<span class="sd"> str: Базовый URL с учётом особенностей окружения</span>
<span class="sd"> Raises:</span>
<span class="sd"> Exception: Если значение переменной ENV неизвестно</span>
<span class="sd"> Возвращает:</span>
<span class="sd"> str: Базовый URL с путем для теста или без него.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">env</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">URLS</span><span class="p">:</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">env</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">TEST</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">URLS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="p">]</span> <span class="o">+</span> <span class="s2">&quot;e-nms-ui/&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">URLS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="p">]</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unknown value of ENV variable </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">get_request_url</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span><span class="w"> </span><span class="nf">get_request_url</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;Возвращает URL для API-запросов.</span>
<span class="sd"> Returns:</span>
<span class="sd"> str: URL для запросов</span>
<span class="sd"> Raises:</span>
<span class="sd"> Exception: Если значение переменной ENV неизвестно</span>
<span class="sd"> Возвращает:</span>
<span class="sd"> str: URL для API-запросов.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">env</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">URLS</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">URLS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="p">]</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unknown value of ENV variable </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">set_access_token</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">):</span>
<span class="k">def</span><span class="w"> </span><span class="nf">set_access_token</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token</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"> token (str): Новый токен доступа</span>
<span class="sd"> Аргументы:</span>
<span class="sd"> token (str): Токен для установки.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">token</span> <span class="o">=</span> <span class="n">token</span>
<span class="k">def</span><span class="w"> </span><span class="nf">get_access_token</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span><span class="w"> </span><span class="nf">get_access_token</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;Возвращает текущий токен доступа.</span>
<span class="sd"> Returns:</span>
<span class="sd"> str: Текущий токен доступа</span>
<span class="sd"> Возвращает:</span>
<span class="sd"> str: Текущий токен доступа.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">token</span>
</code></pre></div></td></tr></table></div>
</details>
@ -2035,15 +2017,12 @@ access_token (str): Токен доступа</p>
<div class="doc doc-contents ">
<p>Инициализация объекта окружения.</p>
<p>Устанавливает окружение из переменной окружения ENV или по умолчанию TEST.
Инициализирует пустой access_token.</p>
<p>Инициализирует объект окружения и токены.</p>
<details class="quote">
<summary>Source code in <code>data\environment.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">26</span>
<span class="normal">27</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">27</span>
<span class="normal">28</span>
<span class="normal">29</span>
<span class="normal">30</span>
@ -2051,18 +2030,15 @@ access_token (str): Токен доступа</p>
<span class="normal">32</span>
<span class="normal">33</span>
<span class="normal">34</span>
<span class="normal">35</span>
<span class="normal">36</span></pre></div></td><td class="code"><div><pre><span></span><code><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="w"> </span><span class="sd">&quot;&quot;&quot;Инициализация объекта окружения.</span>
<span class="normal">35</span></pre></div></td><td class="code"><div><pre><span></span><code><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="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="sd"> Устанавливает окружение из переменной окружения ENV или по умолчанию TEST.</span>
<span class="sd"> Инициализирует пустой access_token.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">env</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s1">&#39;ENV&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">access_token</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s1">&#39;ENV&#39;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">TEST</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">access_token</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">token</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">env</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TEST</span>
<span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TEST</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
@ -2083,42 +2059,27 @@ access_token (str): Токен доступа</p>
<p>Возвращает текущий токен доступа.</p>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Name</th> <th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>str</code></td> <td>
</td>
<td>
<div class="doc-md-description">
<p>Текущий токен доступа</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="возвращает" open>
<summary>Возвращает</summary>
<p>str: Текущий токен доступа.</p>
</details>
<details class="quote">
<summary>Source code in <code>data\environment.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">74</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">70</span>
<span class="normal">71</span>
<span class="normal">72</span>
<span class="normal">73</span>
<span class="normal">74</span>
<span class="normal">75</span>
<span class="normal">76</span>
<span class="normal">77</span>
<span class="normal">78</span>
<span class="normal">79</span>
<span class="normal">80</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">get_access_token</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="normal">77</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">get_access_token</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;Возвращает текущий токен доступа.</span>
<span class="sd"> Returns:</span>
<span class="sd"> str: Текущий токен доступа</span>
<span class="sd"> Возвращает:</span>
<span class="sd"> str: Текущий токен доступа.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">token</span>
</code></pre></div></td></tr></table></div>
</details>
@ -2140,54 +2101,15 @@ access_token (str): Токен доступа</p>
<p>Возвращает базовый URL для текущего окружения.</p>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Name</th> <th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>str</code></td> <td>
</td>
<td>
<div class="doc-md-description">
<p>Базовый URL с учётом особенностей окружения</p>
</div>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Raises:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="Exception">Exception</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Если значение переменной ENV неизвестно</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="возвращает" open>
<summary>Возвращает</summary>
<p>str: Базовый URL с путем для теста или без него.</p>
</details>
<details class="quote">
<summary>Source code in <code>data\environment.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">38</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">37</span>
<span class="normal">38</span>
<span class="normal">39</span>
<span class="normal">40</span>
<span class="normal">41</span>
@ -2197,18 +2119,13 @@ access_token (str): Токен доступа</p>
<span class="normal">45</span>
<span class="normal">46</span>
<span class="normal">47</span>
<span class="normal">48</span>
<span class="normal">49</span>
<span class="normal">50</span>
<span class="normal">51</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">get_base_url</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="normal">48</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">get_base_url</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;Возвращает базовый URL для текущего окружения.</span>
<span class="sd"> Returns:</span>
<span class="sd"> str: Базовый URL с учётом особенностей окружения</span>
<span class="sd"> Raises:</span>
<span class="sd"> Exception: Если значение переменной ENV неизвестно</span>
<span class="sd"> Возвращает:</span>
<span class="sd"> str: Базовый URL с путем для теста или без него.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">env</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">URLS</span><span class="p">:</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">env</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">TEST</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">URLS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="p">]</span> <span class="o">+</span> <span class="s2">&quot;e-nms-ui/&quot;</span>
@ -2234,73 +2151,29 @@ access_token (str): Токен доступа</p>
<p>Возвращает URL для API-запросов.</p>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Name</th> <th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>str</code></td> <td>
</td>
<td>
<div class="doc-md-description">
<p>URL для запросов</p>
</div>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Raises:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="Exception">Exception</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Если значение переменной ENV неизвестно</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="возвращает" open>
<summary>Возвращает</summary>
<p>str: URL для API-запросов.</p>
</details>
<details class="quote">
<summary>Source code in <code>data\environment.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">53</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">50</span>
<span class="normal">51</span>
<span class="normal">52</span>
<span class="normal">53</span>
<span class="normal">54</span>
<span class="normal">55</span>
<span class="normal">56</span>
<span class="normal">57</span>
<span class="normal">58</span>
<span class="normal">59</span>
<span class="normal">60</span>
<span class="normal">61</span>
<span class="normal">62</span>
<span class="normal">63</span>
<span class="normal">64</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">get_request_url</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="normal">59</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">get_request_url</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;Возвращает URL для API-запросов.</span>
<span class="sd"> Returns:</span>
<span class="sd"> str: URL для запросов</span>
<span class="sd"> Raises:</span>
<span class="sd"> Exception: Если значение переменной ENV неизвестно</span>
<span class="sd"> Возвращает:</span>
<span class="sd"> str: URL для API-запросов.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">env</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">URLS</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">URLS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="p">]</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unknown value of ENV variable </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
@ -2324,51 +2197,27 @@ access_token (str): Токен доступа</p>
<p>Устанавливает токен доступа.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>token</code>
</td>
<td>
<code><span title="str">str</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Новый токен доступа</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<details class="аргументы" open>
<summary>Аргументы</summary>
<p>token (str): Токен для установки.</p>
</details>
<details class="quote">
<summary>Source code in <code>data\environment.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">66</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">61</span>
<span class="normal">62</span>
<span class="normal">63</span>
<span class="normal">64</span>
<span class="normal">65</span>
<span class="normal">66</span>
<span class="normal">67</span>
<span class="normal">68</span>
<span class="normal">69</span>
<span class="normal">70</span>
<span class="normal">71</span>
<span class="normal">72</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">set_access_token</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">):</span>
<span class="normal">68</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">set_access_token</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token</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"> token (str): Новый токен доступа</span>
<span class="sd"> Аргументы:</span>
<span class="sd"> token (str): Токен для установки.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">token</span> <span class="o">=</span> <span class="n">token</span>
</code></pre></div></td></tr></table></div>
</details>

View File

@ -1684,6 +1684,9 @@
<a id="data.roles_dict"></a>
<div class="doc doc-contents first">
<p>Модуль roles_dict содержит словарь соответствия ролей.</p>
<p>Содержит сопоставление системных названий ролей с их отображаемыми названиями.</p>

File diff suppressed because it is too large Load Diff

View File

@ -1732,6 +1732,10 @@
<a id="elements.button_element"></a>
<div class="doc doc-contents first">
<p>Модуль button_element содержит класс для работы с кнопками на странице.</p>
<p>Класс Button наследует базовый функционал BaseElement и предоставляет
специфичные методы для работы с элементами типа 'кнопка'.</p>
@ -1765,8 +1769,9 @@
Bases: <code><a class="autorefs autorefs-internal" title="BaseElement (elements.base_element.BaseElement)" href="../base_element/#elements.base_element.BaseElement">BaseElement</a></code></p>
<p>Класс для работы с элементами типа 'кнопка' на странице.</p>
<p>Наследует функциональность базового элемента и добавляет специфичные для кнопок методы.</p>
<p>Класс для работы с кнопками на странице.</p>
<p>Наследует функциональность BaseElement и добавляет специфичные
для кнопок методы и проверки.</p>
@ -1776,11 +1781,7 @@
<details class="quote">
<summary>Source code in <code>elements\button_element.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 9</span>
<span class="normal">10</span>
<span class="normal">11</span>
<span class="normal">12</span>
<span class="normal">13</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">13</span>
<span class="normal">14</span>
<span class="normal">15</span>
<span class="normal">16</span>
@ -1789,19 +1790,27 @@
<span class="normal">19</span>
<span class="normal">20</span>
<span class="normal">21</span>
<span class="normal">22</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">Button</span><span class="p">(</span><span class="n">BaseElement</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Класс для работы с элементами типа &#39;кнопка&#39; на странице.</span>
<span class="normal">22</span>
<span class="normal">23</span>
<span class="normal">24</span>
<span class="normal">25</span>
<span class="normal">26</span>
<span class="normal">27</span>
<span class="normal">28</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">Button</span><span class="p">(</span><span class="n">BaseElement</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Класс для работы с кнопками на странице.</span>
<span class="sd"> Наследует функциональность базового элемента и добавляет специфичные для кнопок методы.</span>
<span class="sd"> Наследует функциональность BaseElement и добавляет специфичные</span>
<span class="sd"> для кнопок методы и проверки.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="nd">@property</span>
<span class="k">def</span><span class="w"> </span><span class="nf">type_of</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="w"> </span><span class="sd">&quot;&quot;&quot;Возвращает тип элемента (&#39;кнопка&#39;).</span>
<span class="sd"> Returns:</span>
<span class="sd"> Строка с типом элемента.</span>
<span class="sd"> str: Тип элемента - &#39;кнопка&#39;.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="s2">&quot;button&quot;</span>
</code></pre></div></td></tr></table></div>
</details>
@ -1832,25 +1841,25 @@
<div class="doc doc-contents ">
<p>Возвращает тип элемента - 'кнопка'.</p>
<p>Возвращает тип элемента ('кнопка').</p>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Name</th> <th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<td><code>str</code></td> <td>
<code><span title="str">str</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Строка с типом элемента.</p>
<p>Тип элемента - 'кнопка'.</p>
</div>
</td>
</tr>

View File

@ -1786,6 +1786,10 @@
<a id="elements.checkbox_element"></a>
<div class="doc doc-contents first">
<p>Модуль checkbox_element содержит класс для работы с чекбоксами.</p>
<p>Класс Checkbox наследует базовый функционал BaseElement и добавляет
специфичные методы для работы с элементами типа 'чекбокс'.</p>
@ -1819,8 +1823,9 @@
Bases: <code><a class="autorefs autorefs-internal" title="BaseElement (elements.base_element.BaseElement)" href="../base_element/#elements.base_element.BaseElement">BaseElement</a></code></p>
<p>Класс для работы с элементами типа 'чекбокс' на странице.</p>
<p>Наследует функциональность базового элемента и добавляет специфичные для чекбоксов методы.</p>
<p>Класс для работы с чекбоксами на странице.</p>
<p>Наследует функциональность BaseElement и добавляет методы для
взаимодействия с чекбоксами и проверки их состояния.</p>
@ -1830,13 +1835,7 @@
<details class="quote">
<summary>Source code in <code>elements\checkbox_element.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal">10</span>
<span class="normal">11</span>
<span class="normal">12</span>
<span class="normal">13</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">13</span>
<span class="normal">14</span>
<span class="normal">15</span>
<span class="normal">16</span>
@ -1864,30 +1863,45 @@
<span class="normal">38</span>
<span class="normal">39</span>
<span class="normal">40</span>
<span class="normal">41</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">Checkbox</span><span class="p">(</span><span class="n">BaseElement</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Класс для работы с элементами типа &#39;чекбокс&#39; на странице.</span>
<span class="normal">41</span>
<span class="normal">42</span>
<span class="normal">43</span>
<span class="normal">44</span>
<span class="normal">45</span>
<span class="normal">46</span>
<span class="normal">47</span>
<span class="normal">48</span>
<span class="normal">49</span>
<span class="normal">50</span>
<span class="normal">51</span>
<span class="normal">52</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">Checkbox</span><span class="p">(</span><span class="n">BaseElement</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Класс для работы с чекбоксами на странице.</span>
<span class="sd"> Наследует функциональность базового элемента и добавляет специфичные для чекбоксов методы.</span>
<span class="sd"> Наследует функциональность BaseElement и добавляет методы для</span>
<span class="sd"> взаимодействия с чекбоксами и проверки их состояния.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="nd">@property</span>
<span class="k">def</span><span class="w"> </span><span class="nf">type_of</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="w"> </span><span class="sd">&quot;&quot;&quot;Возвращает тип элемента (&#39;чекбокс&#39;).</span>
<span class="sd"> Returns:</span>
<span class="sd"> Строка с типом элемента.</span>
<span class="sd"> str: Тип элемента - &#39;чекбокс&#39;.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="s2">&quot;checkbox&quot;</span>
<span class="c1"># Действия:</span>
<span class="k">def</span><span class="w"> </span><span class="nf">check</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;Устанавливает чекбокс в отмеченное состояние.&quot;&quot;&quot;</span>
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;Checking checkbox &quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s1">&quot;&#39;</span><span class="p">)</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Отмечает чекбокс (устанавливает галочку).&quot;&quot;&quot;</span>
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Checking checkbox &#39;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">locator</span><span class="o">.</span><span class="n">check</span><span class="p">()</span>
<span class="k">def</span><span class="w"> </span><span class="nf">uncheck</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;Снимает отметку с чекбокса.&quot;&quot;&quot;</span>
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;Unchecking checkbox &quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s1">&quot;&#39;</span><span class="p">)</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Снимает отметку с чекбокса (убирает галочку).&quot;&quot;&quot;</span>
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unchecking checkbox &#39;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">locator</span><span class="o">.</span><span class="n">uncheck</span><span class="p">()</span>
<span class="c1"># Проверки:</span>
@ -1895,9 +1909,10 @@
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Проверяет, отмечен ли чекбокс.</span>
<span class="sd"> Returns:</span>
<span class="sd"> True, если чекбокс отмечен, иначе False.</span>
<span class="sd"> bool: True если отмечен, False если нет.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;Checking if checkbox &quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s1">&quot; is checked&#39;</span><span class="p">)</span>
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Checking if checkbox &#39;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&#39; is checked&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">locator</span><span class="o">.</span><span class="n">is_checked</span><span class="p">()</span>
</code></pre></div></td></tr></table></div>
</details>
@ -1928,25 +1943,25 @@
<div class="doc doc-contents ">
<p>Возвращает тип элемента - 'чекбокс'.</p>
<p>Возвращает тип элемента ('чекбокс').</p>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Name</th> <th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<td><code>str</code></td> <td>
<code><span title="str">str</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Строка с типом элемента.</p>
<p>Тип элемента - 'чекбокс'.</p>
</div>
</td>
</tr>
@ -1970,17 +1985,19 @@
<div class="doc doc-contents ">
<p>Устанавливает чекбокс в отмеченное состояние.</p>
<p>Отмечает чекбокс (устанавливает галочку).</p>
<details class="quote">
<summary>Source code in <code>elements\checkbox_element.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">23</span>
<span class="normal">24</span>
<span class="normal">25</span>
<span class="normal">26</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">check</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;Устанавливает чекбокс в отмеченное состояние.&quot;&quot;&quot;</span>
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;Checking checkbox &quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s1">&quot;&#39;</span><span class="p">)</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">31</span>
<span class="normal">32</span>
<span class="normal">33</span>
<span class="normal">34</span>
<span class="normal">35</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">check</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;Отмечает чекбокс (устанавливает галочку).&quot;&quot;&quot;</span>
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Checking checkbox &#39;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">locator</span><span class="o">.</span><span class="n">check</span><span class="p">()</span>
</code></pre></div></td></tr></table></div>
</details>
@ -2006,18 +2023,18 @@
<table>
<thead>
<tr>
<th>Type</th>
<th>Name</th> <th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<td><code>bool</code></td> <td>
<code><span title="bool">bool</span></code>
</td>
<td>
<div class="doc-md-description">
<p>True, если чекбокс отмечен, иначе False.</p>
<p>True если отмечен, False если нет.</p>
</div>
</td>
</tr>
@ -2027,20 +2044,22 @@
<details class="quote">
<summary>Source code in <code>elements\checkbox_element.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">34</span>
<span class="normal">35</span>
<span class="normal">36</span>
<span class="normal">37</span>
<span class="normal">38</span>
<span class="normal">39</span>
<span class="normal">40</span>
<span class="normal">41</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">is_checked</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">44</span>
<span class="normal">45</span>
<span class="normal">46</span>
<span class="normal">47</span>
<span class="normal">48</span>
<span class="normal">49</span>
<span class="normal">50</span>
<span class="normal">51</span>
<span class="normal">52</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">is_checked</span><span class="p">(</span><span class="bp">self</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"> Returns:</span>
<span class="sd"> True, если чекбокс отмечен, иначе False.</span>
<span class="sd"> bool: True если отмечен, False если нет.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;Checking if checkbox &quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s1">&quot; is checked&#39;</span><span class="p">)</span>
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Checking if checkbox &#39;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&#39; is checked&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">locator</span><span class="o">.</span><span class="n">is_checked</span><span class="p">()</span>
</code></pre></div></td></tr></table></div>
</details>
@ -2059,17 +2078,19 @@
<div class="doc doc-contents ">
<p>Снимает отметку с чекбокса.</p>
<p>Снимает отметку с чекбокса (убирает галочку).</p>
<details class="quote">
<summary>Source code in <code>elements\checkbox_element.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">28</span>
<span class="normal">29</span>
<span class="normal">30</span>
<span class="normal">31</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">uncheck</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;Снимает отметку с чекбокса.&quot;&quot;&quot;</span>
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;Unchecking checkbox &quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s1">&quot;&#39;</span><span class="p">)</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">37</span>
<span class="normal">38</span>
<span class="normal">39</span>
<span class="normal">40</span>
<span class="normal">41</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">uncheck</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;Снимает отметку с чекбокса (убирает галочку).&quot;&quot;&quot;</span>
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unchecking checkbox &#39;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">locator</span><span class="o">.</span><span class="n">uncheck</span><span class="p">()</span>
</code></pre></div></td></tr></table></div>
</details>

View File

@ -1768,6 +1768,10 @@
<a id="elements.dropdown_list_element"></a>
<div class="doc doc-contents first">
<p>Модуль dropdown_list_element содержит класс для работы с выпадающими списками.</p>
<p>Класс DropdownList наследует базовый функционал BaseElement и добавляет
методы для взаимодействия с выпадающими списками на странице.</p>
@ -1801,8 +1805,9 @@
Bases: <code><a class="autorefs autorefs-internal" title="BaseElement (elements.base_element.BaseElement)" href="../base_element/#elements.base_element.BaseElement">BaseElement</a></code></p>
<p>Класс для работы с выпадающими списками на странице.</p>
<p>Наследует функциональность базового элемента и добавляет специфичные для dropdown-списков методы.</p>
<p>Класс для работы с выпадающими списками.</p>
<p>Наследует функциональность BaseElement и добавляет специфичные
методы для выбора и проверки элементов списка.</p>
@ -1812,11 +1817,7 @@
<details class="quote">
<summary>Source code in <code>elements\dropdown_list_element.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal">10</span>
<span class="normal">11</span>
<span class="normal">12</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">12</span>
<span class="normal">13</span>
<span class="normal">14</span>
<span class="normal">15</span>
@ -1850,41 +1851,53 @@
<span class="normal">43</span>
<span class="normal">44</span>
<span class="normal">45</span>
<span class="normal">46</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">DropdownList</span><span class="p">(</span><span class="n">BaseElement</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Класс для работы с выпадающими списками на странице.</span>
<span class="normal">46</span>
<span class="normal">47</span>
<span class="normal">48</span>
<span class="normal">49</span>
<span class="normal">50</span>
<span class="normal">51</span>
<span class="normal">52</span>
<span class="normal">53</span>
<span class="normal">54</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">DropdownList</span><span class="p">(</span><span class="n">BaseElement</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Класс для работы с выпадающими списками.</span>
<span class="sd"> Наследует функциональность базового элемента и добавляет специфичные для dropdown-списков методы.</span>
<span class="sd"> Наследует функциональность BaseElement и добавляет специфичные</span>
<span class="sd"> методы для выбора и проверки элементов списка.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="nd">@property</span>
<span class="k">def</span><span class="w"> </span><span class="nf">type_of</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="w"> </span><span class="sd">&quot;&quot;&quot;Возвращает тип элемента (&#39;выпадающий список&#39;).</span>
<span class="sd"> Returns:</span>
<span class="sd"> Строка с типом элемента.</span>
<span class="sd"> str: Тип элемента - &#39;выпадающий список&#39;.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="s2">&quot;dropdown list&quot;</span>
<span class="c1"># Действия:</span>
<span class="k">def</span><span class="w"> </span><span class="nf">click_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="w"> </span><span class="sd">&quot;&quot;&quot;Выбирает элемент списка по указанному тексту.</span>
<span class="sd"> Args:</span>
<span class="sd"> text: Текст элемента, который нужно выбрать.</span>
<span class="sd"> text (str): Текст элемента для выбора.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;Selecting item with text &quot;</span><span class="si">{</span><span class="n">text</span><span class="si">}</span><span class="s1">&quot; from dropdown &quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s1">&quot;&#39;</span><span class="p">)</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;listitem&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">text</span><span class="p">)</span><span class="o">.</span><span class="n">click</span><span class="p">()</span>
<span class="c1"># Проверки:</span>
<span class="k">def</span><span class="w"> </span><span class="nf">check_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="w"> </span><span class="sd">&quot;&quot;&quot;Проверяет наличие и доступность элемента списка.</span>
<span class="sd"> Args:</span>
<span class="sd"> text: Текст элемента, который нужно проверить.</span>
<span class="sd"> text (str): Текст элемента для проверки.</span>
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: Если элемент отсутствует или недоступен.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;Checking item with text &quot;</span><span class="si">{</span><span class="n">text</span><span class="si">}</span><span class="s1">&quot; in dropdown &quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s1">&quot;&#39;</span><span class="p">)</span>
<span class="n">enabled</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;listitem&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">text</span><span class="p">)</span><span class="o">.</span><span class="n">is_enabled</span><span class="p">()</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">enabled</span><span class="p">:</span>
@ -1918,25 +1931,25 @@
<div class="doc doc-contents ">
<p>Возвращает тип элемента - 'выпадающий список'.</p>
<p>Возвращает тип элемента ('выпадающий список').</p>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Name</th> <th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<td><code>str</code></td> <td>
<code><span title="str">str</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Строка с типом элемента.</p>
<p>Тип элемента - 'выпадающий список'.</p>
</div>
</td>
</tr>
@ -1960,7 +1973,7 @@
<div class="doc doc-contents ">
<p>Проверяет наличие и доступность элемента с указанным текстом.</p>
<p>Проверяет наличие и доступность элемента списка.</p>
<p><span class="doc-section-title">Parameters:</span></p>
@ -1983,7 +1996,7 @@
</td>
<td>
<div class="doc-md-description">
<p>Текст элемента, который нужно проверить.</p>
<p>Текст элемента для проверки.</p>
</div>
</td>
<td>
@ -2019,27 +2032,29 @@
<details class="quote">
<summary>Source code in <code>elements\dropdown_list_element.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">34</span>
<span class="normal">35</span>
<span class="normal">36</span>
<span class="normal">37</span>
<span class="normal">38</span>
<span class="normal">39</span>
<span class="normal">40</span>
<span class="normal">41</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">41</span>
<span class="normal">42</span>
<span class="normal">43</span>
<span class="normal">44</span>
<span class="normal">45</span>
<span class="normal">46</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">check_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="normal">46</span>
<span class="normal">47</span>
<span class="normal">48</span>
<span class="normal">49</span>
<span class="normal">50</span>
<span class="normal">51</span>
<span class="normal">52</span>
<span class="normal">53</span>
<span class="normal">54</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">check_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: Текст элемента, который нужно проверить.</span>
<span class="sd"> text (str): Текст элемента для проверки.</span>
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: Если элемент отсутствует или недоступен.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;Checking item with text &quot;</span><span class="si">{</span><span class="n">text</span><span class="si">}</span><span class="s1">&quot; in dropdown &quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s1">&quot;&#39;</span><span class="p">)</span>
<span class="n">enabled</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;listitem&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">text</span><span class="p">)</span><span class="o">.</span><span class="n">is_enabled</span><span class="p">()</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">enabled</span><span class="p">:</span>
@ -2061,7 +2076,7 @@
<div class="doc doc-contents ">
<p>Кликает на элемент списка с указанным текстом.</p>
<p>Выбирает элемент списка по указанному тексту.</p>
<p><span class="doc-section-title">Parameters:</span></p>
@ -2084,7 +2099,7 @@
</td>
<td>
<div class="doc-md-description">
<p>Текст элемента, который нужно выбрать.</p>
<p>Текст элемента для выбора.</p>
</div>
</td>
<td>
@ -2097,19 +2112,21 @@
<details class="quote">
<summary>Source code in <code>elements\dropdown_list_element.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">24</span>
<span class="normal">25</span>
<span class="normal">26</span>
<span class="normal">27</span>
<span class="normal">28</span>
<span class="normal">29</span>
<span class="normal">30</span>
<span class="normal">31</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">click_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>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">30</span>
<span class="normal">31</span>
<span class="normal">32</span>
<span class="normal">33</span>
<span class="normal">34</span>
<span class="normal">35</span>
<span class="normal">36</span>
<span class="normal">37</span>
<span class="normal">38</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">click_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: Текст элемента, который нужно выбрать.</span>
<span class="sd"> text (str): Текст элемента для выбора.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;Selecting item with text &quot;</span><span class="si">{</span><span class="n">text</span><span class="si">}</span><span class="s1">&quot; from dropdown &quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s1">&quot;&#39;</span><span class="p">)</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;listitem&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">text</span><span class="p">)</span><span class="o">.</span><span class="n">click</span><span class="p">()</span>
</code></pre></div></td></tr></table></div>

View File

@ -1732,6 +1732,10 @@
<a id="elements.text_element"></a>
<div class="doc doc-contents first">
<p>Модуль text_element содержит класс для работы с текстовыми элементами.</p>
<p>Класс Text наследует базовый функционал BaseElement и предоставляет
методы для работы с текстовыми элементами на странице.</p>
@ -1765,8 +1769,9 @@
Bases: <code><a class="autorefs autorefs-internal" title="BaseElement (elements.base_element.BaseElement)" href="../base_element/#elements.base_element.BaseElement">BaseElement</a></code></p>
<p>Класс для работы с текстовыми элементами на странице.</p>
<p>Наследует функциональность базового элемента и добавляет специфичные для текста методы.</p>
<p>Класс для работы с текстовыми элементами страницы.</p>
<p>Наследует функциональность BaseElement и добавляет специфичные
методы для взаимодействия с текстовыми элементами.</p>
@ -1776,12 +1781,7 @@
<details class="quote">
<summary>Source code in <code>elements\text_element.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal">10</span>
<span class="normal">11</span>
<span class="normal">12</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">12</span>
<span class="normal">13</span>
<span class="normal">14</span>
<span class="normal">15</span>
@ -1789,19 +1789,28 @@
<span class="normal">17</span>
<span class="normal">18</span>
<span class="normal">19</span>
<span class="normal">20</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">Text</span><span class="p">(</span><span class="n">BaseElement</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Класс для работы с текстовыми элементами на странице.</span>
<span class="normal">20</span>
<span class="normal">21</span>
<span class="normal">22</span>
<span class="normal">23</span>
<span class="normal">24</span>
<span class="normal">25</span>
<span class="normal">26</span>
<span class="normal">27</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">Text</span><span class="p">(</span><span class="n">BaseElement</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Класс для работы с текстовыми элементами страницы.</span>
<span class="sd"> Наследует функциональность базового элемента и добавляет специфичные для текста методы.</span>
<span class="sd"> Наследует функциональность BaseElement и добавляет специфичные</span>
<span class="sd"> методы для взаимодействия с текстовыми элементами.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="nd">@property</span>
<span class="k">def</span><span class="w"> </span><span class="nf">type_of</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="w"> </span><span class="sd">&quot;&quot;&quot;Возвращает тип элемента (&#39;текст&#39;).</span>
<span class="sd"> Returns:</span>
<span class="sd"> Строка с типом элемента.</span>
<span class="sd"> str: Тип элемента - &#39;текст&#39;.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="s2">&quot;text&quot;</span>
</code></pre></div></td></tr></table></div>
</details>
@ -1832,25 +1841,25 @@
<div class="doc doc-contents ">
<p>Возвращает тип элемента - 'текст'.</p>
<p>Возвращает тип элемента ('текст').</p>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Name</th> <th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<td><code>str</code></td> <td>
<code><span title="str">str</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Строка с типом элемента.</p>
<p>Тип элемента - 'текст'.</p>
</div>
</td>
</tr>

View File

@ -1804,6 +1804,10 @@
<a id="elements.text_input_element"></a>
<div class="doc doc-contents first">
<p>Модуль text_input_element содержит класс для работы с текстовыми полями ввода.</p>
<p>Класс TextInput наследует базовый функционал BaseElement и предоставляет
методы для взаимодействия с текстовыми полями ввода на странице.</p>
@ -1837,8 +1841,9 @@
Bases: <code><a class="autorefs autorefs-internal" title="BaseElement (elements.base_element.BaseElement)" href="../base_element/#elements.base_element.BaseElement">BaseElement</a></code></p>
<p>Класс для работы с текстовыми полями ввода на странице.</p>
<p>Наследует функциональность базового элемента и добавляет специфичные для текстовых полей методы.</p>
<p>Класс для работы с текстовыми полями ввода.</p>
<p>Наследует функциональность BaseElement и добавляет методы
для ввода, очистки и проверки текстовых полей.</p>
@ -1848,13 +1853,7 @@
<details class="quote">
<summary>Source code in <code>elements\text_input_element.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal">10</span>
<span class="normal">11</span>
<span class="normal">12</span>
<span class="normal">13</span>
<span class="normal">14</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">14</span>
<span class="normal">15</span>
<span class="normal">16</span>
<span class="normal">17</span>
@ -1899,56 +1898,74 @@
<span class="normal">56</span>
<span class="normal">57</span>
<span class="normal">58</span>
<span class="normal">59</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">TextInput</span><span class="p">(</span><span class="n">BaseElement</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Класс для работы с текстовыми полями ввода на странице.</span>
<span class="normal">59</span>
<span class="normal">60</span>
<span class="normal">61</span>
<span class="normal">62</span>
<span class="normal">63</span>
<span class="normal">64</span>
<span class="normal">65</span>
<span class="normal">66</span>
<span class="normal">67</span>
<span class="normal">68</span>
<span class="normal">69</span>
<span class="normal">70</span>
<span class="normal">71</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">TextInput</span><span class="p">(</span><span class="n">BaseElement</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Класс для работы с текстовыми полями ввода.</span>
<span class="sd"> Наследует функциональность базового элемента и добавляет специфичные для текстовых полей методы.</span>
<span class="sd"> Наследует функциональность BaseElement и добавляет методы</span>
<span class="sd"> для ввода, очистки и проверки текстовых полей.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="nd">@property</span>
<span class="k">def</span><span class="w"> </span><span class="nf">type_of</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="w"> </span><span class="sd">&quot;&quot;&quot;Возвращает тип элемента (&#39;текстовое поле ввода&#39;).</span>
<span class="sd"> Returns:</span>
<span class="sd"> Строка с типом элемента.</span>
<span class="sd"> str: Тип элемента - &#39;текстовое поле ввода&#39;.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="s2">&quot;text input&quot;</span>
<span class="c1"># Действия:</span>
<span class="k">def</span><span class="w"> </span><span class="nf">get_input_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;Получает текущее значение текстового поля.</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Возвращает текущее значение поля ввода.</span>
<span class="sd"> Returns:</span>
<span class="sd"> Текущее значение поля ввода.</span>
<span class="sd"> str: Текущее значение в поле.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;Getting value from text input &quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s1">&quot;&#39;</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">locator</span><span class="o">.</span><span class="n">input_value</span><span class="p">()</span>
<span class="k">def</span><span class="w"> </span><span class="nf">input_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</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="w"> </span><span class="sd">&quot;&quot;&quot;Вводит указанное значение в поле.</span>
<span class="sd"> Args:</span>
<span class="sd"> value: Значение для ввода.</span>
<span class="sd"> value (str): Значение для ввода.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;Inputting value &quot;</span><span class="si">{</span><span class="n">value</span><span class="si">}</span><span class="s1">&quot; to text input &quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s1">&quot;&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">locator</span><span class="o">.</span><span class="n">fill</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">clear</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;Очищает содержимое текстового поля.&quot;&quot;&quot;</span>
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;Clearing text input &quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s1">&quot;&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">locator</span><span class="o">.</span><span class="n">press</span><span class="p">(</span><span class="s1">&#39;Control+A&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">locator</span><span class="o">.</span><span class="n">press</span><span class="p">(</span><span class="s1">&#39;Backspace&#39;</span><span class="p">)</span>
<span class="c1"># Проверки:</span>
<span class="k">def</span><span class="w"> </span><span class="nf">check_empty_input</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg</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="w"> </span><span class="sd">&quot;&quot;&quot;Проверяет, что поле ввода пустое.</span>
<span class="sd"> Args:</span>
<span class="sd"> msg: Сообщение об ошибке при неудачной проверке.</span>
<span class="sd"> msg (str): Сообщение об ошибке при неудачной проверке.</span>
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: Если поле не пустое.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;Checking that text input &quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s1">&quot; is empty&#39;</span><span class="p">)</span>
<span class="n">expect</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">locator</span><span class="p">)</span><span class="o">.</span><span class="n">to_be_empty</span><span class="p">(),</span> <span class="n">msg</span>
</code></pre></div></td></tr></table></div>
@ -1980,25 +1997,25 @@
<div class="doc doc-contents ">
<p>Возвращает тип элемента - 'текстовое поле ввода'.</p>
<p>Возвращает тип элемента ('текстовое поле ввода').</p>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Name</th> <th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<td><code>str</code></td> <td>
<code><span title="str">str</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Строка с типом элемента.</p>
<p>Тип элемента - 'текстовое поле ввода'.</p>
</div>
</td>
</tr>
@ -2022,7 +2039,7 @@
<div class="doc doc-contents ">
<p>Проверяет, что текстовое поле пустое.</p>
<p>Проверяет, что поле ввода пустое.</p>
<p><span class="doc-section-title">Parameters:</span></p>
@ -2081,25 +2098,27 @@
<details class="quote">
<summary>Source code in <code>elements\text_input_element.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">49</span>
<span class="normal">50</span>
<span class="normal">51</span>
<span class="normal">52</span>
<span class="normal">53</span>
<span class="normal">54</span>
<span class="normal">55</span>
<span class="normal">56</span>
<span class="normal">57</span>
<span class="normal">58</span>
<span class="normal">59</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">check_empty_input</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg</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>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">60</span>
<span class="normal">61</span>
<span class="normal">62</span>
<span class="normal">63</span>
<span class="normal">64</span>
<span class="normal">65</span>
<span class="normal">66</span>
<span class="normal">67</span>
<span class="normal">68</span>
<span class="normal">69</span>
<span class="normal">70</span>
<span class="normal">71</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">check_empty_input</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg</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"> msg: Сообщение об ошибке при неудачной проверке.</span>
<span class="sd"> msg (str): Сообщение об ошибке при неудачной проверке.</span>
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: Если поле не пустое.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;Checking that text input &quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s1">&quot; is empty&#39;</span><span class="p">)</span>
<span class="n">expect</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">locator</span><span class="p">)</span><span class="o">.</span><span class="n">to_be_empty</span><span class="p">(),</span> <span class="n">msg</span>
</code></pre></div></td></tr></table></div>
@ -2124,12 +2143,14 @@
<details class="quote">
<summary>Source code in <code>elements\text_input_element.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">42</span>
<span class="normal">43</span>
<span class="normal">44</span>
<span class="normal">45</span>
<span class="normal">46</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">clear</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>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">52</span>
<span class="normal">53</span>
<span class="normal">54</span>
<span class="normal">55</span>
<span class="normal">56</span>
<span class="normal">57</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">clear</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;Очищает содержимое текстового поля.&quot;&quot;&quot;</span>
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;Clearing text input &quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s1">&quot;&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">locator</span><span class="o">.</span><span class="n">press</span><span class="p">(</span><span class="s1">&#39;Control+A&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">locator</span><span class="o">.</span><span class="n">press</span><span class="p">(</span><span class="s1">&#39;Backspace&#39;</span><span class="p">)</span>
@ -2150,25 +2171,25 @@
<div class="doc doc-contents ">
<p>Получает текущее значение текстового поля.</p>
<p>Возвращает текущее значение поля ввода.</p>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Name</th> <th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<td><code>str</code></td> <td>
<code><span title="str">str</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Текущее значение поля ввода.</p>
<p>Текущее значение в поле.</p>
</div>
</td>
</tr>
@ -2178,19 +2199,21 @@
<details class="quote">
<summary>Source code in <code>elements\text_input_element.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">24</span>
<span class="normal">25</span>
<span class="normal">26</span>
<span class="normal">27</span>
<span class="normal">28</span>
<span class="normal">29</span>
<span class="normal">30</span>
<span class="normal">31</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">get_input_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;Получает текущее значение текстового поля.</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">32</span>
<span class="normal">33</span>
<span class="normal">34</span>
<span class="normal">35</span>
<span class="normal">36</span>
<span class="normal">37</span>
<span class="normal">38</span>
<span class="normal">39</span>
<span class="normal">40</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">get_input_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;Возвращает текущее значение поля ввода.</span>
<span class="sd"> Returns:</span>
<span class="sd"> Текущее значение поля ввода.</span>
<span class="sd"> str: Текущее значение в поле.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;Getting value from text input &quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s1">&quot;&#39;</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">locator</span><span class="o">.</span><span class="n">input_value</span><span class="p">()</span>
</code></pre></div></td></tr></table></div>
@ -2210,7 +2233,7 @@
<div class="doc doc-contents ">
<p>Вводит указанное значение в текстовое поле.</p>
<p>Вводит указанное значение в поле.</p>
<p><span class="doc-section-title">Parameters:</span></p>
@ -2246,19 +2269,21 @@
<details class="quote">
<summary>Source code in <code>elements\text_input_element.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">33</span>
<span class="normal">34</span>
<span class="normal">35</span>
<span class="normal">36</span>
<span class="normal">37</span>
<span class="normal">38</span>
<span class="normal">39</span>
<span class="normal">40</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">input_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</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>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">42</span>
<span class="normal">43</span>
<span class="normal">44</span>
<span class="normal">45</span>
<span class="normal">46</span>
<span class="normal">47</span>
<span class="normal">48</span>
<span class="normal">49</span>
<span class="normal">50</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">input_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</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"> value: Значение для ввода.</span>
<span class="sd"> value (str): Значение для ввода.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;Inputting value &quot;</span><span class="si">{</span><span class="n">value</span><span class="si">}</span><span class="s1">&quot; to text input &quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s1">&quot;&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">locator</span><span class="o">.</span><span class="n">fill</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>

View File

@ -1750,6 +1750,10 @@
<a id="elements.tooltip_button_element"></a>
<div class="doc doc-contents first">
<p>Модуль tooltip_button_element содержит класс для работы с кнопками с подсказками.</p>
<p>Класс TooltipButton наследует базовый функционал BaseElement и добавляет
методы для проверки всплывающих подсказок у кнопок.</p>
@ -1783,8 +1787,9 @@
Bases: <code><a class="autorefs autorefs-internal" title="BaseElement (elements.base_element.BaseElement)" href="../base_element/#elements.base_element.BaseElement">BaseElement</a></code></p>
<p>Класс элемента кнопки с всплывающей подсказкой.</p>
<p>Наследует функциональность базового элемента и добавляет методы для работы с подсказками.</p>
<p>Класс для работы с кнопками, имеющими всплывающие подсказки.</p>
<p>Наследует функциональность BaseElement и добавляет методы
для взаимодействия с подсказками кнопок.</p>
@ -1794,12 +1799,7 @@
<details class="quote">
<summary>Source code in <code>elements\tooltip_button_element.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal">10</span>
<span class="normal">11</span>
<span class="normal">12</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">12</span>
<span class="normal">13</span>
<span class="normal">14</span>
<span class="normal">15</span>
@ -1830,31 +1830,42 @@
<span class="normal">40</span>
<span class="normal">41</span>
<span class="normal">42</span>
<span class="normal">43</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">TooltipButton</span><span class="p">(</span><span class="n">BaseElement</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Класс элемента кнопки с всплывающей подсказкой.</span>
<span class="normal">43</span>
<span class="normal">44</span>
<span class="normal">45</span>
<span class="normal">46</span>
<span class="normal">47</span>
<span class="normal">48</span>
<span class="normal">49</span>
<span class="normal">50</span>
<span class="normal">51</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">TooltipButton</span><span class="p">(</span><span class="n">BaseElement</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Класс для работы с кнопками, имеющими всплывающие подсказки.</span>
<span class="sd"> Наследует функциональность базового элемента и добавляет методы для работы с подсказками.</span>
<span class="sd"> Наследует функциональность BaseElement и добавляет методы</span>
<span class="sd"> для взаимодействия с подсказками кнопок.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="nd">@property</span>
<span class="k">def</span><span class="w"> </span><span class="nf">type_of</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;Возвращает тип элемента.</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Возвращает тип элемента (&#39;tooltip_button&#39;).</span>
<span class="sd"> Returns:</span>
<span class="sd"> str: Тип элемента (&#39;tooltip_button&#39;)</span>
<span class="sd"> str: Тип элемента - кнопка с подсказкой.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="s2">&quot;tooltip_button&quot;</span>
<span class="k">def</span><span class="w"> </span><span class="nf">check_tooltip_with_text</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tooltip_locator</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">expected_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="w"> </span><span class="sd">&quot;&quot;&quot;Проверяет соответствие текста всплывающей подсказки.</span>
<span class="sd"> Args:</span>
<span class="sd"> tooltip_locator (str): Локатор элемента подсказки</span>
<span class="sd"> expected_text (str): Ожидаемый текст подсказки</span>
<span class="sd"> tooltip_locator (str): Локатор элемента подсказки.</span>
<span class="sd"> expected_text (str): Ожидаемый текст подсказки.</span>
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: Если текст подсказки не соответствует ожидаемому</span>
<span class="sd"> AssertionError: Если текст подсказки не соответствует ожидаемому.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># Наведение на элемент для отображения подсказки</span>
<span class="bp">self</span><span class="o">.</span><span class="n">locator</span><span class="o">.</span><span class="n">hover</span><span class="p">()</span>
@ -1896,7 +1907,7 @@
<div class="doc doc-contents ">
<p>Возвращает тип элемента.</p>
<p>Возвращает тип элемента ('tooltip_button').</p>
<p><span class="doc-section-title">Returns:</span></p>
@ -1914,7 +1925,7 @@
</td>
<td>
<div class="doc-md-description">
<p>Тип элемента ('tooltip_button')</p>
<p>Тип элемента - кнопка с подсказкой.</p>
</div>
</td>
</tr>
@ -1938,7 +1949,7 @@
<div class="doc doc-contents ">
<p>Проверяет текст всплывающей подсказки.</p>
<p>Проверяет соответствие текста всплывающей подсказки.</p>
<p><span class="doc-section-title">Parameters:</span></p>
@ -1961,7 +1972,7 @@
</td>
<td>
<div class="doc-md-description">
<p>Локатор элемента подсказки</p>
<p>Локатор элемента подсказки.</p>
</div>
</td>
<td>
@ -1977,7 +1988,7 @@
</td>
<td>
<div class="doc-md-description">
<p>Ожидаемый текст подсказки</p>
<p>Ожидаемый текст подсказки.</p>
</div>
</td>
<td>
@ -2003,7 +2014,7 @@
</td>
<td>
<div class="doc-md-description">
<p>Если текст подсказки не соответствует ожидаемому</p>
<p>Если текст подсказки не соответствует ожидаемому.</p>
</div>
</td>
</tr>
@ -2013,14 +2024,7 @@
<details class="quote">
<summary>Source code in <code>elements\tooltip_button_element.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">22</span>
<span class="normal">23</span>
<span class="normal">24</span>
<span class="normal">25</span>
<span class="normal">26</span>
<span class="normal">27</span>
<span class="normal">28</span>
<span class="normal">29</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">29</span>
<span class="normal">30</span>
<span class="normal">31</span>
<span class="normal">32</span>
@ -2034,16 +2038,25 @@
<span class="normal">40</span>
<span class="normal">41</span>
<span class="normal">42</span>
<span class="normal">43</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">check_tooltip_with_text</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tooltip_locator</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">expected_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="normal">43</span>
<span class="normal">44</span>
<span class="normal">45</span>
<span class="normal">46</span>
<span class="normal">47</span>
<span class="normal">48</span>
<span class="normal">49</span>
<span class="normal">50</span>
<span class="normal">51</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">check_tooltip_with_text</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tooltip_locator</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">expected_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"> tooltip_locator (str): Локатор элемента подсказки</span>
<span class="sd"> expected_text (str): Ожидаемый текст подсказки</span>
<span class="sd"> tooltip_locator (str): Локатор элемента подсказки.</span>
<span class="sd"> expected_text (str): Ожидаемый текст подсказки.</span>
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: Если текст подсказки не соответствует ожидаемому</span>
<span class="sd"> AssertionError: Если текст подсказки не соответствует ожидаемому.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># Наведение на элемент для отображения подсказки</span>
<span class="bp">self</span><span class="o">.</span><span class="n">locator</span><span class="o">.</span><span class="n">hover</span><span class="p">()</span>

View File

@ -1810,8 +1810,9 @@
<a id="fixtures.pages"></a>
<div class="doc doc-contents first">
<p>Модуль для работы с Playwright в тестах pytest.</p>
<p>Содержит фикстуры и вспомогательные функции для управления браузером.</p>
<p>Модуль pages содержит фикстуры и функции для работы с Playwright.</p>
<p>Предоставляет инструменты для управления браузером, контекстами и страницами
в тестах pytest, включая настройку параметров запуска.</p>
@ -1842,7 +1843,7 @@
<div class="doc doc-contents ">
<p>Фикстура для создания и управления экземпляром браузера.</p>
<p>Фикстура для управления экземпляром браузера.</p>
<p><span class="doc-section-title">Parameters:</span></p>
@ -1861,6 +1862,7 @@
<code>request</code>
</td>
<td>
<code><span title="_pytest.fixtures.FixtureRequest">FixtureRequest</span></code>
</td>
<td>
<div class="doc-md-description">
@ -1913,7 +1915,7 @@
</td>
<td>
<div class="doc-md-description">
<p>Экземпляр страницы для использования в тестах.</p>
<p>Страница для использования в тестах.</p>
</div>
</td>
</tr>
@ -1923,20 +1925,12 @@
<details class="note" open>
<summary>Note</summary>
<p>Автоматически закрывает браузер и контексты после завершения тестов.</p>
<p>Автоматически закрывает браузер после тестов.</p>
</details>
<details class="quote">
<summary>Source code in <code>fixtures\pages.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">44</span>
<span class="normal">45</span>
<span class="normal">46</span>
<span class="normal">47</span>
<span class="normal">48</span>
<span class="normal">49</span>
<span class="normal">50</span>
<span class="normal">51</span>
<span class="normal">52</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">52</span>
<span class="normal">53</span>
<span class="normal">54</span>
<span class="normal">55</span>
@ -1970,9 +1964,18 @@
<span class="normal">83</span>
<span class="normal">84</span>
<span class="normal">85</span>
<span class="normal">86</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="nd">@pytest</span><span class="o">.</span><span class="n">fixture</span><span class="p">(</span><span class="n">scope</span><span class="o">=</span><span class="s1">&#39;class&#39;</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">browser</span><span class="p">(</span><span class="n">request</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Page</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Фикстура для создания и управления экземпляром браузера.</span>
<span class="normal">86</span>
<span class="normal">87</span>
<span class="normal">88</span>
<span class="normal">89</span>
<span class="normal">90</span>
<span class="normal">91</span>
<span class="normal">92</span>
<span class="normal">93</span>
<span class="normal">94</span>
<span class="normal">95</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="nd">@pytest</span><span class="o">.</span><span class="n">fixture</span><span class="p">(</span><span class="n">scope</span><span class="o">=</span><span class="s1">&#39;class&#39;</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">browser</span><span class="p">(</span><span class="n">request</span><span class="p">:</span> <span class="n">FixtureRequest</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Page</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Фикстура для управления экземпляром браузера.</span>
<span class="sd"> Args:</span>
<span class="sd"> request: Объект запроса pytest для доступа к конфигурации.</span>
@ -1981,11 +1984,12 @@
<span class="sd"> Page: Экземпляр страницы браузера.</span>
<span class="sd"> Yields:</span>
<span class="sd"> Page: Экземпляр страницы для использования в тестах.</span>
<span class="sd"> Page: Страница для использования в тестах.</span>
<span class="sd"> Note:</span>
<span class="sd"> Автоматически закрывает браузер и контексты после завершения тестов.</span>
<span class="sd"> Автоматически закрывает браузер после тестов.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">playwright</span> <span class="o">=</span> <span class="n">sync_playwright</span><span class="p">()</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
<span class="c1"># Выбор браузера на основе параметра командной строки</span>
@ -2049,6 +2053,7 @@
<code>playwright</code>
</td>
<td>
<code><span title="playwright.sync_api.Playwright">Playwright</span></code>
</td>
<td>
<div class="doc-md-description">
@ -2064,10 +2069,11 @@
<code>request</code>
</td>
<td>
<code><span title="_pytest.fixtures.FixtureRequest">FixtureRequest</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Объект запроса pytest для доступа к конфигурации.</p>
<p>Объект запроса pytest.</p>
</div>
</td>
<td>
@ -2093,7 +2099,7 @@
</td>
<td>
<div class="doc-md-description">
<p>Экземпляр Chrome браузера.</p>
<p>Экземпляр Chrome.</p>
</div>
</td>
</tr>
@ -2103,30 +2109,32 @@
<details class="quote">
<summary>Source code in <code>fixtures\pages.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">105</span>
<span class="normal">106</span>
<span class="normal">107</span>
<span class="normal">108</span>
<span class="normal">109</span>
<span class="normal">110</span>
<span class="normal">111</span>
<span class="normal">112</span>
<span class="normal">113</span>
<span class="normal">114</span>
<span class="normal">115</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">115</span>
<span class="normal">116</span>
<span class="normal">117</span>
<span class="normal">118</span>
<span class="normal">119</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">get_chrome_browser</span><span class="p">(</span><span class="n">playwright</span><span class="p">,</span> <span class="n">request</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Browser</span><span class="p">:</span>
<span class="normal">119</span>
<span class="normal">120</span>
<span class="normal">121</span>
<span class="normal">122</span>
<span class="normal">123</span>
<span class="normal">124</span>
<span class="normal">125</span>
<span class="normal">126</span>
<span class="normal">127</span>
<span class="normal">128</span>
<span class="normal">129</span>
<span class="normal">130</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">get_chrome_browser</span><span class="p">(</span><span class="n">playwright</span><span class="p">:</span> <span class="n">Playwright</span><span class="p">,</span> <span class="n">request</span><span class="p">:</span> <span class="n">FixtureRequest</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Browser</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Создает и возвращает экземпляр Chrome браузера.</span>
<span class="sd"> Args:</span>
<span class="sd"> playwright: Экземпляр Playwright.</span>
<span class="sd"> request: Объект запроса pytest для доступа к конфигурации.</span>
<span class="sd"> request: Объект запроса pytest.</span>
<span class="sd"> Returns:</span>
<span class="sd"> Browser: Экземпляр Chrome браузера.</span>
<span class="sd"> Browser: Экземпляр Chrome.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">playwright</span><span class="o">.</span><span class="n">chromium</span><span class="o">.</span><span class="n">launch</span><span class="p">(</span>
<span class="n">headless</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">getoption</span><span class="p">(</span><span class="s2">&quot;h&quot;</span><span class="p">),</span>
<span class="n">slow_mo</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">getoption</span><span class="p">(</span><span class="s2">&quot;slow&quot;</span><span class="p">),</span>
@ -2168,6 +2176,7 @@
<code>browser</code>
</td>
<td>
<code><span title="playwright.sync_api.Browser">Browser</span></code>
</td>
<td>
<div class="doc-md-description">
@ -2183,10 +2192,11 @@
<code>request</code>
</td>
<td>
<code><span title="_pytest.fixtures.FixtureRequest">FixtureRequest</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Объект запроса pytest для доступа к конфигурации.</p>
<p>Объект запроса pytest.</p>
</div>
</td>
<td>
@ -2198,6 +2208,7 @@
<code>start</code>
</td>
<td>
<code><span title="str">str</span></code>
</td>
<td>
<div class="doc-md-description">
@ -2227,7 +2238,7 @@
</td>
<td>
<div class="doc-md-description">
<p>Настроенный контекст браузера.</p>
<p>Настроенный контекст.</p>
</div>
</td>
</tr>
@ -2237,19 +2248,7 @@
<details class="quote">
<summary>Source code in <code>fixtures\pages.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">138</span>
<span class="normal">139</span>
<span class="normal">140</span>
<span class="normal">141</span>
<span class="normal">142</span>
<span class="normal">143</span>
<span class="normal">144</span>
<span class="normal">145</span>
<span class="normal">146</span>
<span class="normal">147</span>
<span class="normal">148</span>
<span class="normal">149</span>
<span class="normal">150</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">150</span>
<span class="normal">151</span>
<span class="normal">152</span>
<span class="normal">153</span>
@ -2271,17 +2270,31 @@
<span class="normal">169</span>
<span class="normal">170</span>
<span class="normal">171</span>
<span class="normal">172</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">get_context</span><span class="p">(</span><span class="n">browser</span><span class="p">,</span> <span class="n">request</span><span class="p">,</span> <span class="n">start</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">BrowserContext</span><span class="p">:</span>
<span class="normal">172</span>
<span class="normal">173</span>
<span class="normal">174</span>
<span class="normal">175</span>
<span class="normal">176</span>
<span class="normal">177</span>
<span class="normal">178</span>
<span class="normal">179</span>
<span class="normal">180</span>
<span class="normal">181</span>
<span class="normal">182</span>
<span class="normal">183</span>
<span class="normal">184</span>
<span class="normal">185</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">get_context</span><span class="p">(</span><span class="n">browser</span><span class="p">:</span> <span class="n">Browser</span><span class="p">,</span> <span class="n">request</span><span class="p">:</span> <span class="n">FixtureRequest</span><span class="p">,</span> <span class="n">start</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">BrowserContext</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Создает и настраивает контекст браузера.</span>
<span class="sd"> Args:</span>
<span class="sd"> browser: Экземпляр браузера.</span>
<span class="sd"> request: Объект запроса pytest для доступа к конфигурации.</span>
<span class="sd"> request: Объект запроса pytest.</span>
<span class="sd"> start: Тип запуска (&#39;local&#39; или &#39;remote&#39;).</span>
<span class="sd"> Returns:</span>
<span class="sd"> BrowserContext: Настроенный контекст браузера.</span>
<span class="sd"> BrowserContext: Настроенный контекст.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">start</span> <span class="o">==</span> <span class="s1">&#39;local&#39;</span><span class="p">:</span>
<span class="n">context</span> <span class="o">=</span> <span class="n">browser</span><span class="o">.</span><span class="n">new_context</span><span class="p">(</span>
<span class="c1"># no_viewport=True,</span>
@ -2342,6 +2355,7 @@
<code>playwright</code>
</td>
<td>
<code><span title="playwright.sync_api.Playwright">Playwright</span></code>
</td>
<td>
<div class="doc-md-description">
@ -2357,10 +2371,11 @@
<code>request</code>
</td>
<td>
<code><span title="_pytest.fixtures.FixtureRequest">FixtureRequest</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Объект запроса pytest для доступа к конфигурации.</p>
<p>Объект запроса pytest.</p>
</div>
</td>
<td>
@ -2386,7 +2401,7 @@
</td>
<td>
<div class="doc-md-description">
<p>Экземпляр Firefox браузера.</p>
<p>Экземпляр Firefox.</p>
</div>
</td>
</tr>
@ -2396,29 +2411,31 @@
<details class="quote">
<summary>Source code in <code>fixtures\pages.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 89</span>
<span class="normal"> 90</span>
<span class="normal"> 91</span>
<span class="normal"> 92</span>
<span class="normal"> 93</span>
<span class="normal"> 94</span>
<span class="normal"> 95</span>
<span class="normal"> 96</span>
<span class="normal"> 97</span>
<span class="normal"> 98</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 98</span>
<span class="normal"> 99</span>
<span class="normal">100</span>
<span class="normal">101</span>
<span class="normal">102</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">get_firefox_browser</span><span class="p">(</span><span class="n">playwright</span><span class="p">,</span> <span class="n">request</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Browser</span><span class="p">:</span>
<span class="normal">102</span>
<span class="normal">103</span>
<span class="normal">104</span>
<span class="normal">105</span>
<span class="normal">106</span>
<span class="normal">107</span>
<span class="normal">108</span>
<span class="normal">109</span>
<span class="normal">110</span>
<span class="normal">111</span>
<span class="normal">112</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">get_firefox_browser</span><span class="p">(</span><span class="n">playwright</span><span class="p">:</span> <span class="n">Playwright</span><span class="p">,</span> <span class="n">request</span><span class="p">:</span> <span class="n">FixtureRequest</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Browser</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Создает и возвращает экземпляр Firefox браузера.</span>
<span class="sd"> Args:</span>
<span class="sd"> playwright: Экземпляр Playwright.</span>
<span class="sd"> request: Объект запроса pytest для доступа к конфигурации.</span>
<span class="sd"> request: Объект запроса pytest.</span>
<span class="sd"> Returns:</span>
<span class="sd"> Browser: Экземпляр Firefox браузера.</span>
<span class="sd"> Browser: Экземпляр Firefox.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">playwright</span><span class="o">.</span><span class="n">firefox</span><span class="o">.</span><span class="n">launch</span><span class="p">(</span>
<span class="n">headless</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">getoption</span><span class="p">(</span><span class="s2">&quot;h&quot;</span><span class="p">),</span>
<span class="n">slow_mo</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">getoption</span><span class="p">(</span><span class="s2">&quot;slow&quot;</span><span class="p">),</span>
@ -2440,7 +2457,7 @@
<div class="doc doc-contents ">
<p>Создает и возвращает экземпляр Chrome браузера для удаленного запуска.</p>
<p>Создает экземпляр Chrome для удаленного запуска.</p>
<p><span class="doc-section-title">Parameters:</span></p>
@ -2459,6 +2476,7 @@
<code>playwright</code>
</td>
<td>
<code><span title="playwright.sync_api.Playwright">Playwright</span></code>
</td>
<td>
<div class="doc-md-description">
@ -2474,10 +2492,11 @@
<code>request</code>
</td>
<td>
<code><span title="_pytest.fixtures.FixtureRequest">FixtureRequest</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Объект запроса pytest для доступа к конфигурации.</p>
<p>Объект запроса pytest.</p>
</div>
</td>
<td>
@ -2503,7 +2522,7 @@
</td>
<td>
<div class="doc-md-description">
<p>Экземпляр Chrome браузера в режиме headless.</p>
<p>Экземпляр Chrome в headless режиме.</p>
</div>
</td>
</tr>
@ -2513,29 +2532,31 @@
<details class="quote">
<summary>Source code in <code>fixtures\pages.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">122</span>
<span class="normal">123</span>
<span class="normal">124</span>
<span class="normal">125</span>
<span class="normal">126</span>
<span class="normal">127</span>
<span class="normal">128</span>
<span class="normal">129</span>
<span class="normal">130</span>
<span class="normal">131</span>
<span class="normal">132</span>
<span class="normal">133</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">133</span>
<span class="normal">134</span>
<span class="normal">135</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">get_remote_chrome</span><span class="p">(</span><span class="n">playwright</span><span class="p">,</span> <span class="n">request</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Browser</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Создает и возвращает экземпляр Chrome браузера для удаленного запуска.</span>
<span class="normal">135</span>
<span class="normal">136</span>
<span class="normal">137</span>
<span class="normal">138</span>
<span class="normal">139</span>
<span class="normal">140</span>
<span class="normal">141</span>
<span class="normal">142</span>
<span class="normal">143</span>
<span class="normal">144</span>
<span class="normal">145</span>
<span class="normal">146</span>
<span class="normal">147</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">get_remote_chrome</span><span class="p">(</span><span class="n">playwright</span><span class="p">:</span> <span class="n">Playwright</span><span class="p">,</span> <span class="n">request</span><span class="p">:</span> <span class="n">FixtureRequest</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Browser</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Создает экземпляр Chrome для удаленного запуска.</span>
<span class="sd"> Args:</span>
<span class="sd"> playwright: Экземпляр Playwright.</span>
<span class="sd"> request: Объект запроса pytest для доступа к конфигурации.</span>
<span class="sd"> request: Объект запроса pytest.</span>
<span class="sd"> Returns:</span>
<span class="sd"> Browser: Экземпляр Chrome браузера в режиме headless.</span>
<span class="sd"> Browser: Экземпляр Chrome в headless режиме.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">playwright</span><span class="o">.</span><span class="n">chromium</span><span class="o">.</span><span class="n">launch</span><span class="p">(</span>
<span class="n">headless</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="n">slow_mo</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">getoption</span><span class="p">(</span><span class="s2">&quot;slow&quot;</span><span class="p">)</span>
@ -2557,7 +2578,7 @@
<div class="doc doc-contents ">
<p>Добавляет пользовательские опции командной строки для настройки браузера.</p>
<p>Добавляет опции командной строки для настройки браузера.</p>
<p><span class="doc-section-title">Parameters:</span></p>
@ -2576,6 +2597,7 @@
<code>parser</code>
</td>
<td>
<code><span title="_pytest.config.argparsing.Parser">Parser</span></code>
</td>
<td>
<div class="doc-md-description">
@ -2590,22 +2612,19 @@
</table>
<details class="доступные-опции" open>
<summary>Доступные опции</summary>
<p>--bn: Выбор браузера (chrome, remote_chrome или firefox)
<details class="опции" open>
<summary>Опции</summary>
<p>--bn: Браузер (chrome, remote_chrome, firefox)
--h: Режим headless (True/False)
--s: Размер окна в формате {'width': int, 'height': int}
--slow: Задержка между действиями (slow_mo)
--s: Размер окна {'width': int, 'height': int}
--slow: Задержка между действиями (мс)
--t: Таймаут по умолчанию (мс)
--l: Локаль браузера</p>
</details>
<details class="quote">
<summary>Source code in <code>fixtures\pages.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">11</span>
<span class="normal">12</span>
<span class="normal">13</span>
<span class="normal">14</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">14</span>
<span class="normal">15</span>
<span class="normal">16</span>
<span class="normal">17</span>
@ -2630,34 +2649,47 @@
<span class="normal">36</span>
<span class="normal">37</span>
<span class="normal">38</span>
<span class="normal">39</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">pytest_addoption</span><span class="p">(</span><span class="n">parser</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Добавляет пользовательские опции командной строки для настройки браузера.</span>
<span class="normal">39</span>
<span class="normal">40</span>
<span class="normal">41</span>
<span class="normal">42</span>
<span class="normal">43</span>
<span class="normal">44</span>
<span class="normal">45</span>
<span class="normal">46</span>
<span class="normal">47</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">pytest_addoption</span><span class="p">(</span><span class="n">parser</span><span class="p">:</span> <span class="n">Parser</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Добавляет опции командной строки для настройки браузера.</span>
<span class="sd"> Args:</span>
<span class="sd"> parser: Парсер pytest для добавления опций.</span>
<span class="sd"> Доступные опции:</span>
<span class="sd"> --bn: Выбор браузера (chrome, remote_chrome или firefox)</span>
<span class="sd"> Опции:</span>
<span class="sd"> --bn: Браузер (chrome, remote_chrome, firefox)</span>
<span class="sd"> --h: Режим headless (True/False)</span>
<span class="sd"> --s: Размер окна в формате {&#39;width&#39;: int, &#39;height&#39;: int}</span>
<span class="sd"> --slow: Задержка между действиями (slow_mo)</span>
<span class="sd"> --s: Размер окна {&#39;width&#39;: int, &#39;height&#39;: int}</span>
<span class="sd"> --slow: Задержка между действиями (мс)</span>
<span class="sd"> --t: Таймаут по умолчанию (мс)</span>
<span class="sd"> --l: Локаль браузера</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">parser</span><span class="o">.</span><span class="n">addoption</span><span class="p">(</span><span class="s1">&#39;--bn&#39;</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s1">&#39;store&#39;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s2">&quot;chrome&quot;</span><span class="p">,</span>
<span class="n">parser</span><span class="o">.</span><span class="n">addoption</span><span class="p">(</span><span class="s1">&#39;--bn&#39;</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s1">&#39;store&#39;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s2">&quot;chrome&quot;</span><span class="p">,</span>
<span class="n">help</span><span class="o">=</span><span class="s2">&quot;Choose browser: chrome, remote_chrome or firefox&quot;</span><span class="p">)</span>
<span class="n">parser</span><span class="o">.</span><span class="n">addoption</span><span class="p">(</span><span class="s1">&#39;--h&#39;</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s1">&#39;store&#39;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">parser</span><span class="o">.</span><span class="n">addoption</span><span class="p">(</span><span class="s1">&#39;--h&#39;</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s1">&#39;store&#39;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">help</span><span class="o">=</span><span class="s1">&#39;Choose headless: True or False&#39;</span><span class="p">)</span>
<span class="n">parser</span><span class="o">.</span><span class="n">addoption</span><span class="p">(</span><span class="s1">&#39;--s&#39;</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s1">&#39;store&#39;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;width&#39;</span><span class="p">:</span> <span class="mi">1600</span><span class="p">,</span> <span class="s1">&#39;height&#39;</span><span class="p">:</span> <span class="mi">900</span><span class="p">},</span>
<span class="n">parser</span><span class="o">.</span><span class="n">addoption</span><span class="p">(</span><span class="s1">&#39;--s&#39;</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s1">&#39;store&#39;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;width&#39;</span><span class="p">:</span> <span class="mi">1600</span><span class="p">,</span> <span class="s1">&#39;height&#39;</span><span class="p">:</span> <span class="mi">900</span><span class="p">},</span>
<span class="n">help</span><span class="o">=</span><span class="s1">&#39;Size window: width,height&#39;</span><span class="p">)</span>
<span class="c1"># Закомментированные альтернативные размеры окон</span>
<span class="c1"># parser.addoption(&#39;--s&#39;, action=&#39;store&#39;, default={&#39;width&#39;: 1920, &#39;height&#39;: 1080}, help=&#39;Size window: width,height&#39;)</span>
<span class="c1"># parser.addoption(&#39;--s&#39;, action=&#39;store&#39;, default={&#39;width&#39;: 1920, &#39;height&#39;: 300}, help=&#39;Size window: width,height&#39;)</span>
<span class="n">parser</span><span class="o">.</span><span class="n">addoption</span><span class="p">(</span><span class="s1">&#39;--slow&#39;</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s1">&#39;store&#39;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="mi">200</span><span class="p">,</span>
<span class="c1"># parser.addoption(&#39;--s&#39;, action=&#39;store&#39;, default={&#39;width&#39;: 1920, &#39;height&#39;: 1080},</span>
<span class="c1"># help=&#39;Size window: width,height&#39;)</span>
<span class="c1"># parser.addoption(&#39;--s&#39;, action=&#39;store&#39;, default={&#39;width&#39;: 1920, &#39;height&#39;: 300},</span>
<span class="c1"># help=&#39;Size window: width,height&#39;)</span>
<span class="c1"># parser.addoption(&#39;--s&#39;, action=&#39;store&#39;, default={&#39;width&#39;: 300, &#39;height&#39;: 420},</span>
<span class="c1"># help=&#39;Size window: width,height&#39;)</span>
<span class="n">parser</span><span class="o">.</span><span class="n">addoption</span><span class="p">(</span><span class="s1">&#39;--slow&#39;</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s1">&#39;store&#39;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="mi">200</span><span class="p">,</span>
<span class="n">help</span><span class="o">=</span><span class="s1">&#39;Choose slow_mo for robot action&#39;</span><span class="p">)</span>
<span class="n">parser</span><span class="o">.</span><span class="n">addoption</span><span class="p">(</span><span class="s1">&#39;--t&#39;</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s1">&#39;store&#39;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="mi">60000</span><span class="p">,</span>
<span class="n">parser</span><span class="o">.</span><span class="n">addoption</span><span class="p">(</span><span class="s1">&#39;--t&#39;</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s1">&#39;store&#39;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="mi">60000</span><span class="p">,</span>
<span class="n">help</span><span class="o">=</span><span class="s1">&#39;Choose timeout&#39;</span><span class="p">)</span>
<span class="n">parser</span><span class="o">.</span><span class="n">addoption</span><span class="p">(</span><span class="s1">&#39;--l&#39;</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s1">&#39;store&#39;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s1">&#39;ru-RU&#39;</span><span class="p">,</span>
<span class="n">parser</span><span class="o">.</span><span class="n">addoption</span><span class="p">(</span><span class="s1">&#39;--l&#39;</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s1">&#39;store&#39;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s1">&#39;ru-RU&#39;</span><span class="p">,</span>
<span class="n">help</span><span class="o">=</span><span class="s1">&#39;Choose locale&#39;</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
@ -2676,7 +2708,7 @@
<div class="doc doc-contents ">
<p>Фикстура для возврата на предыдущую страницу в браузере.</p>
<p>Фикстура для возврата на предыдущую страницу.</p>
<p><span class="doc-section-title">Parameters:</span></p>
@ -2695,6 +2727,7 @@
<code>browser</code>
</td>
<td>
<code><span title="playwright.sync_api.Page">Page</span></code>
</td>
<td>
<div class="doc-md-description">
@ -2711,20 +2744,22 @@
<details class="quote">
<summary>Source code in <code>fixtures\pages.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">175</span>
<span class="normal">176</span>
<span class="normal">177</span>
<span class="normal">178</span>
<span class="normal">179</span>
<span class="normal">180</span>
<span class="normal">181</span>
<span class="normal">182</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="nd">@pytest</span><span class="o">.</span><span class="n">fixture</span><span class="p">(</span><span class="n">scope</span><span class="o">=</span><span class="s2">&quot;function&quot;</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">return_back</span><span class="p">(</span><span class="n">browser</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Фикстура для возврата на предыдущую страницу в браузере.</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">188</span>
<span class="normal">189</span>
<span class="normal">190</span>
<span class="normal">191</span>
<span class="normal">192</span>
<span class="normal">193</span>
<span class="normal">194</span>
<span class="normal">195</span>
<span class="normal">196</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="nd">@pytest</span><span class="o">.</span><span class="n">fixture</span><span class="p">(</span><span class="n">scope</span><span class="o">=</span><span class="s2">&quot;function&quot;</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">return_back</span><span class="p">(</span><span class="n">browser</span><span class="p">:</span> <span class="n">Page</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Фикстура для возврата на предыдущую страницу.</span>
<span class="sd"> Args:</span>
<span class="sd"> browser: Экземпляр страницы браузера.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">browser</span><span class="o">.</span><span class="n">go_back</span><span class="p">()</span>
</code></pre></div></td></tr></table></div>
</details>

View File

@ -1702,6 +1702,10 @@
<a id="locators.confirm_locators"></a>
<div class="doc doc-contents first">
<p>Модуль confirm_locators содержит локаторы элементов диалогов подтверждения.</p>
<p>Класс ConfirmLocators предоставляет XPath локаторы для взаимодействия
с диалоговыми окнами подтверждения действий в тестах.</p>
@ -1736,12 +1740,12 @@
<p>Локаторы элементов диалогов подтверждения.</p>
<details class="атрибуты" open>
<summary>Атрибуты</summary>
<p>CONFIRM (str): XPath локатор активного диалогового окна.
TITLE (str): XPath локатор заголовка диалогового окна.
BUTTON_CLOSE (str): XPath локатор кнопки закрытия диалога.
TEXT (str): XPath локатор текстового содержимого диалога (формируется динамически).</p>
<details class="содержит-xpath-локаторы-для" open>
<summary>Содержит XPath локаторы для</summary>
<p>CONFIRM (str): активного диалогового окна.
TITLE (str): заголовка диалогового окна.
BUTTON_CLOSE (str): кнопки закрытия диалога.
TEXT (str): текстового содержимого диалога (формируется динамически).</p>
</details>
@ -1751,27 +1755,29 @@ TEXT (str): XPath локатор текстового содержимого д
<details class="quote">
<summary>Source code in <code>locators\confirm_locators.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 1</span>
<span class="normal"> 2</span>
<span class="normal"> 3</span>
<span class="normal"> 4</span>
<span class="normal"> 5</span>
<span class="normal"> 6</span>
<span class="normal"> 7</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal">10</span>
<span class="normal">11</span>
<span class="normal">12</span>
<span class="normal">13</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">ConfirmLocators</span><span class="p">:</span>
<span class="normal">13</span>
<span class="normal">14</span>
<span class="normal">15</span>
<span class="normal">16</span>
<span class="normal">17</span>
<span class="normal">18</span>
<span class="normal">19</span>
<span class="normal">20</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">ConfirmLocators</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Локаторы элементов диалогов подтверждения.</span>
<span class="sd"> Атрибуты:</span>
<span class="sd"> CONFIRM (str): XPath локатор активного диалогового окна.</span>
<span class="sd"> TITLE (str): XPath локатор заголовка диалогового окна.</span>
<span class="sd"> BUTTON_CLOSE (str): XPath локатор кнопки закрытия диалога.</span>
<span class="sd"> TEXT (str): XPath локатор текстового содержимого диалога (формируется динамически).</span>
<span class="sd"> Содержит XPath локаторы для:</span>
<span class="sd"> CONFIRM (str): активного диалогового окна.</span>
<span class="sd"> TITLE (str): заголовка диалогового окна.</span>
<span class="sd"> BUTTON_CLOSE (str): кнопки закрытия диалога.</span>
<span class="sd"> TEXT (str): текстового содержимого диалога (формируется динамически).</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">CONFIRM</span> <span class="o">=</span> <span class="s2">&quot;//div[contains(@class, &#39;v-dialog--active&#39;)]&quot;</span>
<span class="n">TITLE</span> <span class="o">=</span> <span class="s2">&quot;//div[@class=&#39;v-card__title&#39;]/h3&quot;</span>
<span class="n">BUTTON_CLOSE</span> <span class="o">=</span> <span class="s2">&quot;//div[@class=&#39;vuedl-layout__closeBtn&#39;]&quot;</span>

View File

@ -1702,6 +1702,10 @@
<a id="locators.event_panel_locators"></a>
<div class="doc doc-contents first">
<p>Модуль event_panel_locators содержит локаторы элементов панели событий.</p>
<p>Класс EventPanelLocators предоставляет XPath локаторы для взаимодействия
с элементами панели событий в тестах.</p>
@ -1734,14 +1738,10 @@
<p>Локаторы элементов панели событий.</p>
<p>Содержит XPath локаторы для:
BUTTONS_BLOCK (str): блока кнопок в панели инструментов</p>
<details class="атрибуты" open>
<summary>Атрибуты</summary>
<p>BUTTONS_BLOCK (str): XPath локатор блока кнопок в панели инструментов.
Находится во втором блоке элементов toolbar'а внутри контентной области.</p>
</details>
@ -1749,20 +1749,22 @@
<details class="quote">
<summary>Source code in <code>locators\event_panel_locators.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1</span>
<span class="normal">2</span>
<span class="normal">3</span>
<span class="normal">4</span>
<span class="normal">5</span>
<span class="normal">6</span>
<span class="normal">7</span>
<span class="normal">8</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">EventPanelLocators</span><span class="p">:</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal">10</span>
<span class="normal">11</span>
<span class="normal">12</span>
<span class="normal">13</span>
<span class="normal">14</span>
<span class="normal">15</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">EventPanelLocators</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Локаторы элементов панели событий.</span>
<span class="sd"> Атрибуты:</span>
<span class="sd"> BUTTONS_BLOCK (str): XPath локатор блока кнопок в панели инструментов.</span>
<span class="sd"> Находится во втором блоке элементов toolbar&#39;а внутри контентной области.</span>
<span class="sd"> Содержит XPath локаторы для:</span>
<span class="sd"> BUTTONS_BLOCK (str): блока кнопок в панели инструментов</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">BUTTONS_BLOCK</span> <span class="o">=</span> <span class="s2">&quot;//nav/div[@class=&#39;v-toolbar__content&#39;]/div[@class=&#39;v-toolbar__items&#39;][2]&quot;</span>
</code></pre></div></td></tr></table></div>
</details>

View File

@ -1702,6 +1702,10 @@
<a id="locators.modal_window_locators"></a>
<div class="doc doc-contents first">
<p>Модуль modal_window_locators содержит локаторы элементов модальных окон.</p>
<p>Класс ModalWindowLocators предоставляет XPath локаторы для взаимодействия
с элементами модальных окон в тестах.</p>
@ -1734,20 +1738,15 @@
<p>Локаторы для элементов модальных окон.</p>
<p>Содержит XPath локаторы для:
MODAL_WINDOW (str): активного модального окна
INPUT_FORM_USER_DATA (str): формы ввода пользовательских данных
TEXT_FIELD_INPUT_FORM_USER_DATA (str): текстового поля ввода</p>
<p>ROLES_FIELD_INPUT_FORM_USER_DATA (str): поля выбора ролей</p>
<p>ROLES_MENU_INPUT_FORM_USER_DATA (str): меню выбора ролей
LABEL_INPUT_FORM_USER_DATA (str): метки поля ввода</p>
<details class="атрибуты" open>
<summary>Атрибуты</summary>
<p>MODAL_WINDOW (str): XPath локатор активного модального окна.
INPUT_FORM_USER_DATA (str): XPath локатор формы для ввода пользовательских данных.
TEXT_FIELD_INPUT_FORM_USER_DATA (str): Относительный XPath текстового поля ввода
внутри формы пользовательских данных.
ROLES_FIELD_INPUT_FORM_USER_DATA (str): Относительный XPath поля выбора ролей
внутри формы пользовательских данных.
ROLES_MENU_INPUT_FORM_USER_DATA (str): XPath локатор активного меню выбора ролей.
LABEL_INPUT_FORM_USER_DATA (str): XPath локатор метки поля ввода в форме.</p>
</details>
@ -1755,13 +1754,7 @@ LABEL_INPUT_FORM_USER_DATA (str): XPath локатор метки поля вв
<details class="quote">
<summary>Source code in <code>locators\modal_window_locators.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 1</span>
<span class="normal"> 2</span>
<span class="normal"> 3</span>
<span class="normal"> 4</span>
<span class="normal"> 5</span>
<span class="normal"> 6</span>
<span class="normal"> 7</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal">10</span>
@ -1774,19 +1767,27 @@ LABEL_INPUT_FORM_USER_DATA (str): XPath локатор метки поля вв
<span class="normal">17</span>
<span class="normal">18</span>
<span class="normal">19</span>
<span class="normal">20</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">ModalWindowLocators</span><span class="p">:</span>
<span class="normal">20</span>
<span class="normal">21</span>
<span class="normal">22</span>
<span class="normal">23</span>
<span class="normal">24</span>
<span class="normal">25</span>
<span class="normal">26</span>
<span class="normal">27</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">ModalWindowLocators</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Локаторы для элементов модальных окон.</span>
<span class="sd"> Атрибуты:</span>
<span class="sd"> MODAL_WINDOW (str): XPath локатор активного модального окна.</span>
<span class="sd"> INPUT_FORM_USER_DATA (str): XPath локатор формы для ввода пользовательских данных.</span>
<span class="sd"> TEXT_FIELD_INPUT_FORM_USER_DATA (str): Относительный XPath текстового поля ввода </span>
<span class="sd"> внутри формы пользовательских данных.</span>
<span class="sd"> ROLES_FIELD_INPUT_FORM_USER_DATA (str): Относительный XPath поля выбора ролей </span>
<span class="sd"> внутри формы пользовательских данных.</span>
<span class="sd"> ROLES_MENU_INPUT_FORM_USER_DATA (str): XPath локатор активного меню выбора ролей.</span>
<span class="sd"> LABEL_INPUT_FORM_USER_DATA (str): XPath локатор метки поля ввода в форме.</span>
<span class="sd"> Содержит XPath локаторы для:</span>
<span class="sd"> MODAL_WINDOW (str): активного модального окна</span>
<span class="sd"> INPUT_FORM_USER_DATA (str): формы ввода пользовательских данных</span>
<span class="sd"> TEXT_FIELD_INPUT_FORM_USER_DATA (str): текстового поля ввода</span>
<span class="sd"> ROLES_FIELD_INPUT_FORM_USER_DATA (str): поля выбора ролей</span>
<span class="sd"> ROLES_MENU_INPUT_FORM_USER_DATA (str): меню выбора ролей</span>
<span class="sd"> LABEL_INPUT_FORM_USER_DATA (str): метки поля ввода</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">MODAL_WINDOW</span> <span class="o">=</span> <span class="s2">&quot;//div[contains(@class, &#39;v-dialog--active&#39;)]&quot;</span>
<span class="n">INPUT_FORM_USER_DATA</span> <span class="o">=</span> <span class="s2">&quot;//form[@class=&#39;v-form&#39;]&quot;</span>

View File

@ -1702,6 +1702,10 @@
<a id="locators.navigation_panel_locators"></a>
<div class="doc doc-contents first">
<p>Модуль navigation_panel_locators содержит локаторы навигационной панели.</p>
<p>Класс NavigationPanelLocators предоставляет XPath локаторы для работы
с элементами навигационной панели в тестах.</p>
@ -1734,21 +1738,13 @@
<p>Локаторы элементов навигационной панели.</p>
<p>Содержит XPath локаторы для:
PANEL_MAIN (str): основной панели навигации
PANEL_SCROLL_CONTAINER (str): контейнера с прокруткой
NODE_ROOT (str): корневого узла дерева
NODE_CHILDREN (str): дочерних элементов узла</p>
<details class="атрибуты" open>
<summary>Атрибуты</summary>
<p>PANEL_MAIN (str): XPath локатор основной панели навигации.
Ищет элемент ul с классом, содержащим 'v-expansion-panel'.
PANEL_SCROLL_CONTAINER (str): XPath локатор контейнера с прокруткой,
содержащего навигационную панель. Ищет div с классом 'scrollarea__body',
внутри которого находится панель навигации.
NODE_ROOT (str): XPath локатор корневого узла дерева навигации.
Ищет div с классом, содержащим 'v-treeview-node__root'.
NODE_CHILDREN (str): XPath локатор дочерних элементов узла дерева.
Ищет div с классом, содержащим 'v-treeview-node__children'.</p>
</details>
@ -1756,13 +1752,7 @@ NODE_CHILDREN (str): XPath локатор дочерних элементов у
<details class="quote">
<summary>Source code in <code>locators\navigation_panel_locators.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 1</span>
<span class="normal"> 2</span>
<span class="normal"> 3</span>
<span class="normal"> 4</span>
<span class="normal"> 5</span>
<span class="normal"> 6</span>
<span class="normal"> 7</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal">10</span>
@ -1774,20 +1764,18 @@ NODE_CHILDREN (str): XPath локатор дочерних элементов у
<span class="normal">16</span>
<span class="normal">17</span>
<span class="normal">18</span>
<span class="normal">19</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">NavigationPanelLocators</span><span class="p">:</span>
<span class="normal">19</span>
<span class="normal">20</span>
<span class="normal">21</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">NavigationPanelLocators</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Локаторы элементов навигационной панели.</span>
<span class="sd"> Атрибуты:</span>
<span class="sd"> PANEL_MAIN (str): XPath локатор основной панели навигации.</span>
<span class="sd"> Ищет элемент ul с классом, содержащим &#39;v-expansion-panel&#39;.</span>
<span class="sd"> PANEL_SCROLL_CONTAINER (str): XPath локатор контейнера с прокруткой,</span>
<span class="sd"> содержащего навигационную панель. Ищет div с классом &#39;scrollarea__body&#39;,</span>
<span class="sd"> внутри которого находится панель навигации.</span>
<span class="sd"> NODE_ROOT (str): XPath локатор корневого узла дерева навигации.</span>
<span class="sd"> Ищет div с классом, содержащим &#39;v-treeview-node__root&#39;.</span>
<span class="sd"> NODE_CHILDREN (str): XPath локатор дочерних элементов узла дерева.</span>
<span class="sd"> Ищет div с классом, содержащим &#39;v-treeview-node__children&#39;.</span>
<span class="sd"> Содержит XPath локаторы для:</span>
<span class="sd"> PANEL_MAIN (str): основной панели навигации</span>
<span class="sd"> PANEL_SCROLL_CONTAINER (str): контейнера с прокруткой</span>
<span class="sd"> NODE_ROOT (str): корневого узла дерева</span>
<span class="sd"> NODE_CHILDREN (str): дочерних элементов узла</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">PANEL_MAIN</span> <span class="o">=</span> <span class="s2">&quot;//ul[contains(@class, &#39;v-expansion-panel&#39;)]&quot;</span>
<span class="n">PANEL_SCROLL_CONTAINER</span> <span class="o">=</span> <span class="s2">&quot;//div[contains(@class, &#39;scrollarea__body&#39;) and .//ul[contains(@class, &#39;v-expansion-panel&#39;)]]&quot;</span>

View File

@ -1702,6 +1702,10 @@
<a id="locators.table_locators"></a>
<div class="doc doc-contents first">
<p>Модуль table_locators содержит локаторы табличных элементов.</p>
<p>Класс TableLocators предоставляет XPath локаторы для работы
с таблицами в рабочей области приложения.</p>
@ -1734,18 +1738,11 @@
<p>Локаторы для табличных элементов в рабочей области.</p>
<p>Содержит XPath локаторы для:
TABLE_WORK_AREA (str): основной таблицы в рабочей области
TABLE_SCROLL_CONTAINER (str): контейнера с прокруткой таблицы</p>
<details class="атрибуты" open>
<summary>Атрибуты</summary>
<p>TABLE_WORK_AREA (str): XPath локатор основной таблицы в рабочей области.
Ищет элемент table, находящийся по пути:
scrollarea__body -&gt; div -&gt; div -&gt; div -&gt; table
TABLE_SCROLL_CONTAINER (str): XPath локатор контейнера с прокруткой таблицы.
Ищет tbody внутри div с классом scrollarea__body,
содержащего таблицу с классом scrolltable__container.</p>
</details>
@ -1753,29 +1750,23 @@ TABLE_SCROLL_CONTAINER (str): XPath локатор контейнера с пр
<details class="quote">
<summary>Source code in <code>locators\table_locators.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 1</span>
<span class="normal"> 2</span>
<span class="normal"> 3</span>
<span class="normal"> 4</span>
<span class="normal"> 5</span>
<span class="normal"> 6</span>
<span class="normal"> 7</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal">10</span>
<span class="normal">11</span>
<span class="normal">12</span>
<span class="normal">13</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">TableLocators</span><span class="p">:</span>
<span class="normal">13</span>
<span class="normal">14</span>
<span class="normal">15</span>
<span class="normal">16</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">TableLocators</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Локаторы для табличных элементов в рабочей области.</span>
<span class="sd"> Атрибуты:</span>
<span class="sd"> TABLE_WORK_AREA (str): XPath локатор основной таблицы в рабочей области.</span>
<span class="sd"> Ищет элемент table, находящийся по пути:</span>
<span class="sd"> scrollarea__body -&gt; div -&gt; div -&gt; div -&gt; table</span>
<span class="sd"> TABLE_SCROLL_CONTAINER (str): XPath локатор контейнера с прокруткой таблицы.</span>
<span class="sd"> Ищет tbody внутри div с классом scrollarea__body,</span>
<span class="sd"> содержащего таблицу с классом scrolltable__container.</span>
<span class="sd"> Содержит XPath локаторы для:</span>
<span class="sd"> TABLE_WORK_AREA (str): основной таблицы в рабочей области</span>
<span class="sd"> TABLE_SCROLL_CONTAINER (str): контейнера с прокруткой таблицы</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">TABLE_WORK_AREA</span> <span class="o">=</span> <span class="s2">&quot;//div[@class=&#39;scrollarea__body&#39;]/div/div/div/table&quot;</span>
<span class="n">TABLE_SCROLL_CONTAINER</span> <span class="o">=</span> <span class="s2">&quot;//div[contains(@class, &#39;scrollarea__body&#39;) and .//table[@class=&#39;scrolltable__container&#39;]]//tbody&quot;</span>
</code></pre></div></td></tr></table></div>

View File

@ -1702,6 +1702,10 @@
<a id="locators.toolbar_locators"></a>
<div class="doc doc-contents first">
<p>Модуль toolbar_locators содержит локаторы элементов панели инструментов.</p>
<p>Класс ToolbarLocators предоставляет XPath локаторы для взаимодействия
с элементами тулбара и всплывающими подсказками.</p>
@ -1733,20 +1737,12 @@
<div class="doc doc-contents ">
<p>Локаторы элементов тулбара (панели инструментов).</p>
<p>Локаторы элементов панели инструментов (тулбара).</p>
<p>Содержит XPath локаторы для:
TITLE (str): заголовка тулбара
TOOLTIP (str): активной всплывающей подсказки</p>
<details class="атрибуты" open>
<summary>Атрибуты</summary>
<p>TITLE (str): XPath локатор заголовка тулбара.
Находится в навигационной панели (nav) внутри элемента с классом,
содержащим 'v-toolbar__title'.</p>
<p>TOOLTIP (str): XPath локатор активного всплывающего подсказывающего элемента.
Ищет div с классами, содержащими:
- 'v-tooltip__content' (основа тултипа)
- 'menuable__content__active' (показанное состояние)</p>
</details>
@ -1754,13 +1750,7 @@
<details class="quote">
<summary>Source code in <code>locators\toolbar_locators.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 1</span>
<span class="normal"> 2</span>
<span class="normal"> 3</span>
<span class="normal"> 4</span>
<span class="normal"> 5</span>
<span class="normal"> 6</span>
<span class="normal"> 7</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal">10</span>
@ -1768,19 +1758,15 @@
<span class="normal">12</span>
<span class="normal">13</span>
<span class="normal">14</span>
<span class="normal">15</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">ToolbarLocators</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Локаторы элементов тулбара (панели инструментов).</span>
<span class="normal">15</span>
<span class="normal">16</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">ToolbarLocators</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Локаторы элементов панели инструментов (тулбара).</span>
<span class="sd"> Атрибуты:</span>
<span class="sd"> TITLE (str): XPath локатор заголовка тулбара.</span>
<span class="sd"> Находится в навигационной панели (nav) внутри элемента с классом,</span>
<span class="sd"> содержащим &#39;v-toolbar__title&#39;.</span>
<span class="sd"> TOOLTIP (str): XPath локатор активного всплывающего подсказывающего элемента.</span>
<span class="sd"> Ищет div с классами, содержащими:</span>
<span class="sd"> - &#39;v-tooltip__content&#39; (основа тултипа)</span>
<span class="sd"> - &#39;menuable__content__active&#39; (показанное состояние)</span>
<span class="sd"> Содержит XPath локаторы для:</span>
<span class="sd"> TITLE (str): заголовка тулбара</span>
<span class="sd"> TOOLTIP (str): активной всплывающей подсказки</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">TITLE</span> <span class="o">=</span> <span class="s2">&quot;//nav//div[contains(@class, &#39;v-toolbar__title&#39;)]&quot;</span>
<span class="n">TOOLTIP</span> <span class="o">=</span> <span class="s2">&quot;//div[contains(@class,&#39;v-tooltip__content menuable__content__active&#39;)]&quot;</span>
</code></pre></div></td></tr></table></div>

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -1768,6 +1768,10 @@
<a id="pages.login_page"></a>
<div class="doc doc-contents first">
<p>Модуль страницы авторизации.</p>
<p>Содержит класс LoginPage для работы с элементами страницы входа в систему.
Использует Playwright для взаимодействия с UI и обработки ответов сервера.</p>
@ -1806,11 +1810,11 @@
<details class="атрибуты" open>
<summary>Атрибуты</summary>
<p>page (Page): Экземпляр страницы Playwright.
login_input (TextInput): Поле ввода логина.
password_input (TextInput): Поле ввода пароля.
login_button (Button): Кнопка входа.
error_alert (AlertComponent): Компонент алерта с ошибкой.</p>
<p>page: Экземпляр страницы Playwright.
login_input: Поле ввода логина.
password_input: Поле ввода пароля.
login_button: Кнопка входа.
error_alert: Компонент алерта с ошибкой.</p>
</details>
@ -1820,99 +1824,102 @@ error_alert (AlertComponent): Компонент алерта с ошибкой.
<details class="quote">
<summary>Source code in <code>pages\login_page.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">12</span>
<span class="normal">13</span>
<span class="normal">14</span>
<span class="normal">15</span>
<span class="normal">16</span>
<span class="normal">17</span>
<span class="normal">18</span>
<span class="normal">19</span>
<span class="normal">20</span>
<span class="normal">21</span>
<span class="normal">22</span>
<span class="normal">23</span>
<span class="normal">24</span>
<span class="normal">25</span>
<span class="normal">26</span>
<span class="normal">27</span>
<span class="normal">28</span>
<span class="normal">29</span>
<span class="normal">30</span>
<span class="normal">31</span>
<span class="normal">32</span>
<span class="normal">33</span>
<span class="normal">34</span>
<span class="normal">35</span>
<span class="normal">36</span>
<span class="normal">37</span>
<span class="normal">38</span>
<span class="normal">39</span>
<span class="normal">40</span>
<span class="normal">41</span>
<span class="normal">42</span>
<span class="normal">43</span>
<span class="normal">44</span>
<span class="normal">45</span>
<span class="normal">46</span>
<span class="normal">47</span>
<span class="normal">48</span>
<span class="normal">49</span>
<span class="normal">50</span>
<span class="normal">51</span>
<span class="normal">52</span>
<span class="normal">53</span>
<span class="normal">54</span>
<span class="normal">55</span>
<span class="normal">56</span>
<span class="normal">57</span>
<span class="normal">58</span>
<span class="normal">59</span>
<span class="normal">60</span>
<span class="normal">61</span>
<span class="normal">62</span>
<span class="normal">63</span>
<span class="normal">64</span>
<span class="normal">65</span>
<span class="normal">66</span>
<span class="normal">67</span>
<span class="normal">68</span>
<span class="normal">69</span>
<span class="normal">70</span>
<span class="normal">71</span>
<span class="normal">72</span>
<span class="normal">73</span>
<span class="normal">74</span>
<span class="normal">75</span>
<span class="normal">76</span>
<span class="normal">77</span>
<span class="normal">78</span>
<span class="normal">79</span>
<span class="normal">80</span>
<span class="normal">81</span>
<span class="normal">82</span>
<span class="normal">83</span>
<span class="normal">84</span>
<span class="normal">85</span>
<span class="normal">86</span>
<span class="normal">87</span>
<span class="normal">88</span>
<span class="normal">89</span>
<span class="normal">90</span>
<span class="normal">91</span>
<span class="normal">92</span>
<span class="normal">93</span>
<span class="normal">94</span>
<span class="normal">95</span>
<span class="normal">96</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">LoginPage</span><span class="p">(</span><span class="n">BasePage</span><span class="p">):</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 15</span>
<span class="normal"> 16</span>
<span class="normal"> 17</span>
<span class="normal"> 18</span>
<span class="normal"> 19</span>
<span class="normal"> 20</span>
<span class="normal"> 21</span>
<span class="normal"> 22</span>
<span class="normal"> 23</span>
<span class="normal"> 24</span>
<span class="normal"> 25</span>
<span class="normal"> 26</span>
<span class="normal"> 27</span>
<span class="normal"> 28</span>
<span class="normal"> 29</span>
<span class="normal"> 30</span>
<span class="normal"> 31</span>
<span class="normal"> 32</span>
<span class="normal"> 33</span>
<span class="normal"> 34</span>
<span class="normal"> 35</span>
<span class="normal"> 36</span>
<span class="normal"> 37</span>
<span class="normal"> 38</span>
<span class="normal"> 39</span>
<span class="normal"> 40</span>
<span class="normal"> 41</span>
<span class="normal"> 42</span>
<span class="normal"> 43</span>
<span class="normal"> 44</span>
<span class="normal"> 45</span>
<span class="normal"> 46</span>
<span class="normal"> 47</span>
<span class="normal"> 48</span>
<span class="normal"> 49</span>
<span class="normal"> 50</span>
<span class="normal"> 51</span>
<span class="normal"> 52</span>
<span class="normal"> 53</span>
<span class="normal"> 54</span>
<span class="normal"> 55</span>
<span class="normal"> 56</span>
<span class="normal"> 57</span>
<span class="normal"> 58</span>
<span class="normal"> 59</span>
<span class="normal"> 60</span>
<span class="normal"> 61</span>
<span class="normal"> 62</span>
<span class="normal"> 63</span>
<span class="normal"> 64</span>
<span class="normal"> 65</span>
<span class="normal"> 66</span>
<span class="normal"> 67</span>
<span class="normal"> 68</span>
<span class="normal"> 69</span>
<span class="normal"> 70</span>
<span class="normal"> 71</span>
<span class="normal"> 72</span>
<span class="normal"> 73</span>
<span class="normal"> 74</span>
<span class="normal"> 75</span>
<span class="normal"> 76</span>
<span class="normal"> 77</span>
<span class="normal"> 78</span>
<span class="normal"> 79</span>
<span class="normal"> 80</span>
<span class="normal"> 81</span>
<span class="normal"> 82</span>
<span class="normal"> 83</span>
<span class="normal"> 84</span>
<span class="normal"> 85</span>
<span class="normal"> 86</span>
<span class="normal"> 87</span>
<span class="normal"> 88</span>
<span class="normal"> 89</span>
<span class="normal"> 90</span>
<span class="normal"> 91</span>
<span class="normal"> 92</span>
<span class="normal"> 93</span>
<span class="normal"> 94</span>
<span class="normal"> 95</span>
<span class="normal"> 96</span>
<span class="normal"> 97</span>
<span class="normal"> 98</span>
<span class="normal"> 99</span>
<span class="normal">100</span>
<span class="normal">101</span>
<span class="normal">102</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">LoginPage</span><span class="p">(</span><span class="n">BasePage</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Класс для работы со страницей авторизации.</span>
<span class="sd"> Атрибуты:</span>
<span class="sd"> page (Page): Экземпляр страницы Playwright.</span>
<span class="sd"> login_input (TextInput): Поле ввода логина.</span>
<span class="sd"> password_input (TextInput): Поле ввода пароля.</span>
<span class="sd"> login_button (Button): Кнопка входа.</span>
<span class="sd"> error_alert (AlertComponent): Компонент алерта с ошибкой.</span>
<span class="sd"> page: Экземпляр страницы Playwright.</span>
<span class="sd"> login_input: Поле ввода логина.</span>
<span class="sd"> password_input: Поле ввода пароля.</span>
<span class="sd"> login_button: Кнопка входа.</span>
<span class="sd"> error_alert: Компонент алерта с ошибкой.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<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>
@ -1921,6 +1928,7 @@ error_alert (AlertComponent): Компонент алерта с ошибкой.
<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>
<span class="bp">self</span><span class="o">.</span><span class="n">login_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">get_by_label</span><span class="p">(</span><span class="s2">&quot;Имя пользователя&quot;</span><span class="p">),</span> <span class="s2">&quot;login input&quot;</span><span class="p">)</span>
@ -1932,16 +1940,17 @@ error_alert (AlertComponent): Компонент алерта с ошибкой.
<span class="k">def</span><span class="w"> </span><span class="nf">do_login</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">username</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">password</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="kc">None</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"> Если username/password не указаны, использует значения из Constants.</span>
<span class="sd"> Использует переданные учетные данные или значения из Constants.</span>
<span class="sd"> Обрабатывает ответ сервера для получения токена доступа.</span>
<span class="sd"> Args:</span>
<span class="sd"> username: Логин пользователя. Если None, используется значение из Constants.</span>
<span class="sd"> password: Пароль пользователя. Если None, используется значение из Constants.</span>
<span class="sd"> username: Логин пользователя. По умолчанию из Constants.</span>
<span class="sd"> password: Пароль пользователя. По умолчанию из Constants.</span>
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: Если после входа открылась неожиданная страница.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span><span class="w"> </span><span class="nf">handle_response</span><span class="p">(</span><span class="n">response</span><span class="p">):</span>
<span class="k">if</span> <span class="s2">&quot;login&quot;</span> <span class="ow">in</span> <span class="n">response</span><span class="o">.</span><span class="n">url</span><span class="p">:</span>
<span class="n">response_body</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_response_body</span><span class="p">(</span><span class="n">response</span><span class="p">)</span>
@ -1970,13 +1979,14 @@ error_alert (AlertComponent): Компонент алерта с ошибкой.
<span class="k">def</span><span class="w"> </span><span class="nf">do_unsuccessful_login</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">username</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;someuser&quot;</span><span class="p">,</span> <span class="n">password</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;password&quot;</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"> Можно передать свои неверные данные или использовать значения по умолчанию.</span>
<span class="sd"> Проверяет наличие сообщения об ошибке.</span>
<span class="sd"> Проверяет наличие сообщения об ошибке. Можно передать свои данные</span>
<span class="sd"> или использовать значения по умолчанию.</span>
<span class="sd"> Args:</span>
<span class="sd"> username: Неверный логин пользователя. По умолчанию &quot;someuser&quot;.</span>
<span class="sd"> password: Неверный пароль пользователя. По умолчанию &quot;password&quot;.</span>
<span class="sd"> username: Неверный логин. По умолчанию &quot;someuser&quot;.</span>
<span class="sd"> password: Неверный пароль. По умолчанию &quot;password&quot;.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">open</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">login_input</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
@ -1987,8 +1997,8 @@ error_alert (AlertComponent): Компонент алерта с ошибкой.
<span class="bp">self</span><span class="o">.</span><span class="n">login_button</span><span class="o">.</span><span class="n">click</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">error_alert</span><span class="o">.</span><span class="n">check_presence</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">error_alert</span><span class="o">.</span><span class="n">check_absence</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">error_alert</span><span class="o">.</span><span class="n">check_alert_presence</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">error_alert</span><span class="o">.</span><span class="n">check_alert_absence</span><span class="p">(</span><span class="s2">&quot;Неверная пара логин/пароль&quot;</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
@ -2051,10 +2061,7 @@ error_alert (AlertComponent): Компонент алерта с ошибкой.
<details class="quote">
<summary>Source code in <code>pages\login_page.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">23</span>
<span class="normal">24</span>
<span class="normal">25</span>
<span class="normal">26</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">26</span>
<span class="normal">27</span>
<span class="normal">28</span>
<span class="normal">29</span>
@ -2063,12 +2070,17 @@ error_alert (AlertComponent): Компонент алерта с ошибкой.
<span class="normal">32</span>
<span class="normal">33</span>
<span class="normal">34</span>
<span class="normal">35</span></pre></div></td><td class="code"><div><pre><span></span><code><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="normal">35</span>
<span class="normal">36</span>
<span class="normal">37</span>
<span class="normal">38</span>
<span class="normal">39</span></pre></div></td><td class="code"><div><pre><span></span><code><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>
<span class="bp">self</span><span class="o">.</span><span class="n">login_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">get_by_label</span><span class="p">(</span><span class="s2">&quot;Имя пользователя&quot;</span><span class="p">),</span> <span class="s2">&quot;login input&quot;</span><span class="p">)</span>
@ -2094,7 +2106,7 @@ error_alert (AlertComponent): Компонент алерта с ошибкой.
<div class="doc doc-contents ">
<p>Выполняет вход в систему.</p>
<p>Если username/password не указаны, использует значения из Constants.
<p>Использует переданные учетные данные или значения из Constants.
Обрабатывает ответ сервера для получения токена доступа.</p>
@ -2118,7 +2130,7 @@ error_alert (AlertComponent): Компонент алерта с ошибкой.
</td>
<td>
<div class="doc-md-description">
<p>Логин пользователя. Если None, используется значение из Constants.</p>
<p>Логин пользователя. По умолчанию из Constants.</p>
</div>
</td>
<td>
@ -2134,7 +2146,7 @@ error_alert (AlertComponent): Компонент алерта с ошибкой.
</td>
<td>
<div class="doc-md-description">
<p>Пароль пользователя. Если None, используется значение из Constants.</p>
<p>Пароль пользователя. По умолчанию из Constants.</p>
</div>
</td>
<td>
@ -2170,11 +2182,7 @@ error_alert (AlertComponent): Компонент алерта с ошибкой.
<details class="quote">
<summary>Source code in <code>pages\login_page.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">37</span>
<span class="normal">38</span>
<span class="normal">39</span>
<span class="normal">40</span>
<span class="normal">41</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">41</span>
<span class="normal">42</span>
<span class="normal">43</span>
<span class="normal">44</span>
@ -2206,19 +2214,25 @@ error_alert (AlertComponent): Компонент алерта с ошибкой.
<span class="normal">70</span>
<span class="normal">71</span>
<span class="normal">72</span>
<span class="normal">73</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">do_login</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">username</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">password</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
<span class="normal">73</span>
<span class="normal">74</span>
<span class="normal">75</span>
<span class="normal">76</span>
<span class="normal">77</span>
<span class="normal">78</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">do_login</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">username</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">password</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="kc">None</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"> Если username/password не указаны, использует значения из Constants.</span>
<span class="sd"> Использует переданные учетные данные или значения из Constants.</span>
<span class="sd"> Обрабатывает ответ сервера для получения токена доступа.</span>
<span class="sd"> Args:</span>
<span class="sd"> username: Логин пользователя. Если None, используется значение из Constants.</span>
<span class="sd"> password: Пароль пользователя. Если None, используется значение из Constants.</span>
<span class="sd"> username: Логин пользователя. По умолчанию из Constants.</span>
<span class="sd"> password: Пароль пользователя. По умолчанию из Constants.</span>
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: Если после входа открылась неожиданная страница.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span><span class="w"> </span><span class="nf">handle_response</span><span class="p">(</span><span class="n">response</span><span class="p">):</span>
<span class="k">if</span> <span class="s2">&quot;login&quot;</span> <span class="ow">in</span> <span class="n">response</span><span class="o">.</span><span class="n">url</span><span class="p">:</span>
<span class="n">response_body</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_response_body</span><span class="p">(</span><span class="n">response</span><span class="p">)</span>
@ -2261,8 +2275,8 @@ error_alert (AlertComponent): Компонент алерта с ошибкой.
<div class="doc doc-contents ">
<p>Выполняет попытку входа с неверными учетными данными.</p>
<p>Можно передать свои неверные данные или использовать значения по умолчанию.
Проверяет наличие сообщения об ошибке.</p>
<p>Проверяет наличие сообщения об ошибке. Можно передать свои данные
или использовать значения по умолчанию.</p>
<p><span class="doc-section-title">Parameters:</span></p>
@ -2285,7 +2299,7 @@ error_alert (AlertComponent): Компонент алерта с ошибкой.
</td>
<td>
<div class="doc-md-description">
<p>Неверный логин пользователя. По умолчанию "someuser".</p>
<p>Неверный логин. По умолчанию "someuser".</p>
</div>
</td>
<td>
@ -2301,7 +2315,7 @@ error_alert (AlertComponent): Компонент алерта с ошибкой.
</td>
<td>
<div class="doc-md-description">
<p>Неверный пароль пользователя. По умолчанию "password".</p>
<p>Неверный пароль. По умолчанию "password".</p>
</div>
</td>
<td>
@ -2314,37 +2328,39 @@ error_alert (AlertComponent): Компонент алерта с ошибкой.
<details class="quote">
<summary>Source code in <code>pages\login_page.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">75</span>
<span class="normal">76</span>
<span class="normal">77</span>
<span class="normal">78</span>
<span class="normal">79</span>
<span class="normal">80</span>
<span class="normal">81</span>
<span class="normal">82</span>
<span class="normal">83</span>
<span class="normal">84</span>
<span class="normal">85</span>
<span class="normal">86</span>
<span class="normal">87</span>
<span class="normal">88</span>
<span class="normal">89</span>
<span class="normal">90</span>
<span class="normal">91</span>
<span class="normal">92</span>
<span class="normal">93</span>
<span class="normal">94</span>
<span class="normal">95</span>
<span class="normal">96</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">do_unsuccessful_login</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">username</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;someuser&quot;</span><span class="p">,</span> <span class="n">password</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;password&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 80</span>
<span class="normal"> 81</span>
<span class="normal"> 82</span>
<span class="normal"> 83</span>
<span class="normal"> 84</span>
<span class="normal"> 85</span>
<span class="normal"> 86</span>
<span class="normal"> 87</span>
<span class="normal"> 88</span>
<span class="normal"> 89</span>
<span class="normal"> 90</span>
<span class="normal"> 91</span>
<span class="normal"> 92</span>
<span class="normal"> 93</span>
<span class="normal"> 94</span>
<span class="normal"> 95</span>
<span class="normal"> 96</span>
<span class="normal"> 97</span>
<span class="normal"> 98</span>
<span class="normal"> 99</span>
<span class="normal">100</span>
<span class="normal">101</span>
<span class="normal">102</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">do_unsuccessful_login</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">username</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;someuser&quot;</span><span class="p">,</span> <span class="n">password</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;password&quot;</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"> Можно передать свои неверные данные или использовать значения по умолчанию.</span>
<span class="sd"> Проверяет наличие сообщения об ошибке.</span>
<span class="sd"> Проверяет наличие сообщения об ошибке. Можно передать свои данные</span>
<span class="sd"> или использовать значения по умолчанию.</span>
<span class="sd"> Args:</span>
<span class="sd"> username: Неверный логин пользователя. По умолчанию &quot;someuser&quot;.</span>
<span class="sd"> password: Неверный пароль пользователя. По умолчанию &quot;password&quot;.</span>
<span class="sd"> username: Неверный логин. По умолчанию &quot;someuser&quot;.</span>
<span class="sd"> password: Неверный пароль. По умолчанию &quot;password&quot;.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">open</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">login_input</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
@ -2355,8 +2371,8 @@ error_alert (AlertComponent): Компонент алерта с ошибкой.
<span class="bp">self</span><span class="o">.</span><span class="n">login_button</span><span class="o">.</span><span class="n">click</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">error_alert</span><span class="o">.</span><span class="n">check_presence</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">error_alert</span><span class="o">.</span><span class="n">check_absence</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">error_alert</span><span class="o">.</span><span class="n">check_alert_presence</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">error_alert</span><span class="o">.</span><span class="n">check_alert_absence</span><span class="p">(</span><span class="s2">&quot;Неверная пара логин/пароль&quot;</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>

View File

@ -1930,6 +1930,10 @@
<a id="pages.main_page"></a>
<div class="doc doc-contents first">
<p>Модуль главной страницы приложения.</p>
<p>Содержит класс MainPage для работы с элементами главной страницы.
Включает взаимодействие с панелью навигации, кнопками и карточкой пользователя.</p>
@ -1968,10 +1972,10 @@
<details class="атрибуты" open>
<summary>Атрибуты</summary>
<p>page (Page): Экземпляр страницы Playwright.
navigation_panel (NavigationPanelComponent): Компонент панели навигации.
user_button (Button): Кнопка пользователя.
user_card (CardComponent): Карточка пользователя.</p>
<p>page: Экземпляр страницы Playwright.
navigation_panel: Компонент панели навигации.
user_button: Кнопка пользователя.
user_card: Карточка пользователя.</p>
</details>
@ -1981,12 +1985,7 @@ user_card (CardComponent): Карточка пользователя.</p>
<details class="quote">
<summary>Source code in <code>pages\main_page.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 10</span>
<span class="normal"> 11</span>
<span class="normal"> 12</span>
<span class="normal"> 13</span>
<span class="normal"> 14</span>
<span class="normal"> 15</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 15</span>
<span class="normal"> 16</span>
<span class="normal"> 17</span>
<span class="normal"> 18</span>
@ -2081,14 +2080,31 @@ user_card (CardComponent): Карточка пользователя.</p>
<span class="normal">107</span>
<span class="normal">108</span>
<span class="normal">109</span>
<span class="normal">110</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">MainPage</span><span class="p">(</span><span class="n">BasePage</span><span class="p">):</span>
<span class="normal">110</span>
<span class="normal">111</span>
<span class="normal">112</span>
<span class="normal">113</span>
<span class="normal">114</span>
<span class="normal">115</span>
<span class="normal">116</span>
<span class="normal">117</span>
<span class="normal">118</span>
<span class="normal">119</span>
<span class="normal">120</span>
<span class="normal">121</span>
<span class="normal">122</span>
<span class="normal">123</span>
<span class="normal">124</span>
<span class="normal">125</span>
<span class="normal">126</span>
<span class="normal">127</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">MainPage</span><span class="p">(</span><span class="n">BasePage</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Класс для работы с главной страницей приложения.</span>
<span class="sd"> Атрибуты:</span>
<span class="sd"> page (Page): Экземпляр страницы Playwright.</span>
<span class="sd"> navigation_panel (NavigationPanelComponent): Компонент панели навигации.</span>
<span class="sd"> user_button (Button): Кнопка пользователя.</span>
<span class="sd"> user_card (CardComponent): Карточка пользователя.</span>
<span class="sd"> page: Экземпляр страницы Playwright.</span>
<span class="sd"> navigation_panel: Компонент панели навигации.</span>
<span class="sd"> user_button: Кнопка пользователя.</span>
<span class="sd"> user_card: Карточка пользователя.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<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>
@ -2097,6 +2113,7 @@ user_card (CardComponent): Карточка пользователя.</p>
<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>
<span class="bp">self</span><span class="o">.</span><span class="n">navigation_panel</span> <span class="o">=</span> <span class="n">NavigationPanelComponent</span><span class="p">(</span><span class="n">page</span><span class="p">)</span>
@ -2114,45 +2131,53 @@ user_card (CardComponent): Карточка пользователя.</p>
<span class="sd"> Args:</span>
<span class="sd"> item_name: Название элемента для клика.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">navigation_panel</span><span class="o">.</span><span class="n">click_item</span><span class="p">(</span><span class="n">NavigationPanelLocators</span><span class="o">.</span><span class="n">PANEL_MAIN</span><span class="p">,</span> <span class="n">item_name</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">click_configuration_navigation_panel_item</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">item_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;Кликает по элементу подраздела &#39;Конфигурация&#39; в панели навигации.</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Кликает по элементу подраздела &#39;Конфигурация&#39;.</span>
<span class="sd"> Args:</span>
<span class="sd"> item_name: Название элемента для клика.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">navigation_panel</span><span class="o">.</span><span class="n">click_sub_item</span><span class="p">(</span><span class="n">NavigationPanelLocators</span><span class="o">.</span><span class="n">PANEL_MAIN</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">item_name</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">click_maintenance_navigation_panel_item</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">item_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;Кликает по элементу подраздела &#39;Обслуживание&#39; в панели навигации.</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Кликает по элементу подраздела &#39;Обслуживание&#39;.</span>
<span class="sd"> Args:</span>
<span class="sd"> item_name: Название элемента для клика.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">navigation_panel</span><span class="o">.</span><span class="n">click_sub_item</span><span class="p">(</span><span class="n">NavigationPanelLocators</span><span class="o">.</span><span class="n">PANEL_MAIN</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="n">item_name</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">click_user_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;Кликает по кнопке пользователя.&quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">user_button</span><span class="o">.</span><span class="n">click</span><span class="p">()</span>
<span class="k">def</span><span class="w"> </span><span class="nf">do_logout</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;Выполняет выход из системы.&quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">should_be_user_button</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">click_user_button</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">user_card</span><span class="o">.</span><span class="n">click_logout_button</span><span class="p">()</span>
<span class="k">def</span><span class="w"> </span><span class="nf">scroll_navigation_panel_up</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;Прокручивает панель навигации вверх.&quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">navigation_panel</span><span class="o">.</span><span class="n">scroll_up</span><span class="p">(</span><span class="n">NavigationPanelLocators</span><span class="o">.</span><span class="n">PANEL_SCROLL_CONTAINER</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">scroll_navigation_panel_down</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;Прокручивает панель навигации вниз.&quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">navigation_panel</span><span class="o">.</span><span class="n">scroll_down</span><span class="p">(</span><span class="n">NavigationPanelLocators</span><span class="o">.</span><span class="n">PANEL_SCROLL_CONTAINER</span><span class="p">)</span>
<span class="c1"># Проверки:</span>
<span class="k">def</span><span class="w"> </span><span class="nf">should_be_navigation_panel</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;Проверяет наличие панели навигации.&quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">navigation_panel</span><span class="o">.</span><span class="n">check_presence</span><span class="p">(</span>
<span class="n">NavigationPanelLocators</span><span class="o">.</span><span class="n">PANEL_MAIN</span><span class="p">,</span>
<span class="s2">&quot;Navigation panel is missing&quot;</span>
@ -2160,14 +2185,16 @@ user_card (CardComponent): Карточка пользователя.</p>
<span class="k">def</span><span class="w"> </span><span class="nf">should_be_user_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;Проверяет наличие кнопки пользователя.&quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">user_button</span><span class="o">.</span><span class="n">check_presence</span><span class="p">(</span><span class="s2">&quot;User button is missing on event panel&quot;</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">check_navigation_panel_verticall_scrolling</span><span class="p">(</span><span class="bp">self</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="w"> </span><span class="sd">&quot;&quot;&quot;Проверяет возможность вертикальной прокрутки панели.</span>
<span class="sd"> Returns:</span>
<span class="sd"> bool: True если панель можно прокручивать, иначе False.</span>
<span class="sd"> bool: True если прокрутка возможна, иначе False.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">navigation_panel</span><span class="o">.</span><span class="n">is_scrollable_vertically</span><span class="p">(</span>
<span class="n">NavigationPanelLocators</span><span class="o">.</span><span class="n">PANEL_SCROLL_CONTAINER</span>
<span class="p">)</span>
@ -2178,6 +2205,7 @@ user_card (CardComponent): Карточка пользователя.</p>
<span class="sd"> Args:</span>
<span class="sd"> item_name: Название элемента для проверки.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">navigation_panel</span><span class="o">.</span><span class="n">check_item_visibility</span><span class="p">(</span>
<span class="n">NavigationPanelLocators</span><span class="o">.</span><span class="n">PANEL_MAIN</span><span class="p">,</span>
<span class="n">item_name</span>
@ -2244,12 +2272,7 @@ user_card (CardComponent): Карточка пользователя.</p>
<details class="quote">
<summary>Source code in <code>pages\main_page.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">20</span>
<span class="normal">21</span>
<span class="normal">22</span>
<span class="normal">23</span>
<span class="normal">24</span>
<span class="normal">25</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">25</span>
<span class="normal">26</span>
<span class="normal">27</span>
<span class="normal">28</span>
@ -2258,12 +2281,19 @@ user_card (CardComponent): Карточка пользователя.</p>
<span class="normal">31</span>
<span class="normal">32</span>
<span class="normal">33</span>
<span class="normal">34</span></pre></div></td><td class="code"><div><pre><span></span><code><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="normal">34</span>
<span class="normal">35</span>
<span class="normal">36</span>
<span class="normal">37</span>
<span class="normal">38</span>
<span class="normal">39</span>
<span class="normal">40</span></pre></div></td><td class="code"><div><pre><span></span><code><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>
<span class="bp">self</span><span class="o">.</span><span class="n">navigation_panel</span> <span class="o">=</span> <span class="n">NavigationPanelComponent</span><span class="p">(</span><span class="n">page</span><span class="p">)</span>
@ -2326,21 +2356,23 @@ user_card (CardComponent): Карточка пользователя.</p>
<details class="quote">
<summary>Source code in <code>pages\main_page.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">101</span>
<span class="normal">102</span>
<span class="normal">103</span>
<span class="normal">104</span>
<span class="normal">105</span>
<span class="normal">106</span>
<span class="normal">107</span>
<span class="normal">108</span>
<span class="normal">109</span>
<span class="normal">110</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">check_navigation_panel_item_visibility</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">item_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>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">117</span>
<span class="normal">118</span>
<span class="normal">119</span>
<span class="normal">120</span>
<span class="normal">121</span>
<span class="normal">122</span>
<span class="normal">123</span>
<span class="normal">124</span>
<span class="normal">125</span>
<span class="normal">126</span>
<span class="normal">127</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">check_navigation_panel_item_visibility</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">item_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;Проверяет видимость элемента в панели навигации.</span>
<span class="sd"> Args:</span>
<span class="sd"> item_name: Название элемента для проверки.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">navigation_panel</span><span class="o">.</span><span class="n">check_item_visibility</span><span class="p">(</span>
<span class="n">NavigationPanelLocators</span><span class="o">.</span><span class="n">PANEL_MAIN</span><span class="p">,</span>
<span class="n">item_name</span>
@ -2362,7 +2394,7 @@ user_card (CardComponent): Карточка пользователя.</p>
<div class="doc doc-contents ">
<p>Проверяет возможность вертикальной прокрутки панели навигации.</p>
<p>Проверяет возможность вертикальной прокрутки панели.</p>
<p><span class="doc-section-title">Returns:</span></p>
@ -2380,7 +2412,7 @@ user_card (CardComponent): Карточка пользователя.</p>
</td>
<td>
<div class="doc-md-description">
<p>True если панель можно прокручивать, иначе False.</p>
<p>True если прокрутка возможна, иначе False.</p>
</div>
</td>
</tr>
@ -2390,20 +2422,22 @@ user_card (CardComponent): Карточка пользователя.</p>
<details class="quote">
<summary>Source code in <code>pages\main_page.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">91</span>
<span class="normal">92</span>
<span class="normal">93</span>
<span class="normal">94</span>
<span class="normal">95</span>
<span class="normal">96</span>
<span class="normal">97</span>
<span class="normal">98</span>
<span class="normal">99</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">check_navigation_panel_verticall_scrolling</span><span class="p">(</span><span class="bp">self</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>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">106</span>
<span class="normal">107</span>
<span class="normal">108</span>
<span class="normal">109</span>
<span class="normal">110</span>
<span class="normal">111</span>
<span class="normal">112</span>
<span class="normal">113</span>
<span class="normal">114</span>
<span class="normal">115</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">check_navigation_panel_verticall_scrolling</span><span class="p">(</span><span class="bp">self</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"> Returns:</span>
<span class="sd"> bool: True если панель можно прокручивать, иначе False.</span>
<span class="sd"> bool: True если прокрутка возможна, иначе False.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">navigation_panel</span><span class="o">.</span><span class="n">is_scrollable_vertically</span><span class="p">(</span>
<span class="n">NavigationPanelLocators</span><span class="o">.</span><span class="n">PANEL_SCROLL_CONTAINER</span>
<span class="p">)</span>
@ -2424,7 +2458,7 @@ user_card (CardComponent): Карточка пользователя.</p>
<div class="doc doc-contents ">
<p>Кликает по элементу подраздела 'Конфигурация' в панели навигации.</p>
<p>Кликает по элементу подраздела 'Конфигурация'.</p>
<p><span class="doc-section-title">Parameters:</span></p>
@ -2460,18 +2494,20 @@ user_card (CardComponent): Карточка пользователя.</p>
<details class="quote">
<summary>Source code in <code>pages\main_page.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">45</span>
<span class="normal">46</span>
<span class="normal">47</span>
<span class="normal">48</span>
<span class="normal">49</span>
<span class="normal">50</span>
<span class="normal">51</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">click_configuration_navigation_panel_item</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">item_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;Кликает по элементу подраздела &#39;Конфигурация&#39; в панели навигации.</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">52</span>
<span class="normal">53</span>
<span class="normal">54</span>
<span class="normal">55</span>
<span class="normal">56</span>
<span class="normal">57</span>
<span class="normal">58</span>
<span class="normal">59</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">click_configuration_navigation_panel_item</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">item_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;Кликает по элементу подраздела &#39;Конфигурация&#39;.</span>
<span class="sd"> Args:</span>
<span class="sd"> item_name: Название элемента для клика.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">navigation_panel</span><span class="o">.</span><span class="n">click_sub_item</span><span class="p">(</span><span class="n">NavigationPanelLocators</span><span class="o">.</span><span class="n">PANEL_MAIN</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">item_name</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
@ -2526,18 +2562,20 @@ user_card (CardComponent): Карточка пользователя.</p>
<details class="quote">
<summary>Source code in <code>pages\main_page.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">37</span>
<span class="normal">38</span>
<span class="normal">39</span>
<span class="normal">40</span>
<span class="normal">41</span>
<span class="normal">42</span>
<span class="normal">43</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">click_main_navigation_panel_item</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">item_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>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">43</span>
<span class="normal">44</span>
<span class="normal">45</span>
<span class="normal">46</span>
<span class="normal">47</span>
<span class="normal">48</span>
<span class="normal">49</span>
<span class="normal">50</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">click_main_navigation_panel_item</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">item_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;Кликает по элементу основной панели навигации.</span>
<span class="sd"> Args:</span>
<span class="sd"> item_name: Название элемента для клика.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">navigation_panel</span><span class="o">.</span><span class="n">click_item</span><span class="p">(</span><span class="n">NavigationPanelLocators</span><span class="o">.</span><span class="n">PANEL_MAIN</span><span class="p">,</span> <span class="n">item_name</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
@ -2556,7 +2594,7 @@ user_card (CardComponent): Карточка пользователя.</p>
<div class="doc doc-contents ">
<p>Кликает по элементу подраздела 'Обслуживание' в панели навигации.</p>
<p>Кликает по элементу подраздела 'Обслуживание'.</p>
<p><span class="doc-section-title">Parameters:</span></p>
@ -2592,18 +2630,20 @@ user_card (CardComponent): Карточка пользователя.</p>
<details class="quote">
<summary>Source code in <code>pages\main_page.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">53</span>
<span class="normal">54</span>
<span class="normal">55</span>
<span class="normal">56</span>
<span class="normal">57</span>
<span class="normal">58</span>
<span class="normal">59</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">click_maintenance_navigation_panel_item</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">item_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;Кликает по элементу подраздела &#39;Обслуживание&#39; в панели навигации.</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">61</span>
<span class="normal">62</span>
<span class="normal">63</span>
<span class="normal">64</span>
<span class="normal">65</span>
<span class="normal">66</span>
<span class="normal">67</span>
<span class="normal">68</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">click_maintenance_navigation_panel_item</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">item_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;Кликает по элементу подраздела &#39;Обслуживание&#39;.</span>
<span class="sd"> Args:</span>
<span class="sd"> item_name: Название элемента для клика.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">navigation_panel</span><span class="o">.</span><span class="n">click_sub_item</span><span class="p">(</span><span class="n">NavigationPanelLocators</span><span class="o">.</span><span class="n">PANEL_MAIN</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="n">item_name</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
@ -2627,10 +2667,12 @@ user_card (CardComponent): Карточка пользователя.</p>
<details class="quote">
<summary>Source code in <code>pages\main_page.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">61</span>
<span class="normal">62</span>
<span class="normal">63</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">click_user_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>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">70</span>
<span class="normal">71</span>
<span class="normal">72</span>
<span class="normal">73</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">click_user_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;Кликает по кнопке пользователя.&quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">user_button</span><span class="o">.</span><span class="n">click</span><span class="p">()</span>
</code></pre></div></td></tr></table></div>
</details>
@ -2654,12 +2696,14 @@ user_card (CardComponent): Карточка пользователя.</p>
<details class="quote">
<summary>Source code in <code>pages\main_page.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">65</span>
<span class="normal">66</span>
<span class="normal">67</span>
<span class="normal">68</span>
<span class="normal">69</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">do_logout</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>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">75</span>
<span class="normal">76</span>
<span class="normal">77</span>
<span class="normal">78</span>
<span class="normal">79</span>
<span class="normal">80</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">do_logout</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;Выполняет выход из системы.&quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">should_be_user_button</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">click_user_button</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">user_card</span><span class="o">.</span><span class="n">click_logout_button</span><span class="p">()</span>
@ -2685,10 +2729,12 @@ user_card (CardComponent): Карточка пользователя.</p>
<details class="quote">
<summary>Source code in <code>pages\main_page.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">75</span>
<span class="normal">76</span>
<span class="normal">77</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">scroll_navigation_panel_down</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>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">87</span>
<span class="normal">88</span>
<span class="normal">89</span>
<span class="normal">90</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">scroll_navigation_panel_down</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;Прокручивает панель навигации вниз.&quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">navigation_panel</span><span class="o">.</span><span class="n">scroll_down</span><span class="p">(</span><span class="n">NavigationPanelLocators</span><span class="o">.</span><span class="n">PANEL_SCROLL_CONTAINER</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
@ -2712,10 +2758,12 @@ user_card (CardComponent): Карточка пользователя.</p>
<details class="quote">
<summary>Source code in <code>pages\main_page.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">71</span>
<span class="normal">72</span>
<span class="normal">73</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">scroll_navigation_panel_up</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>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">82</span>
<span class="normal">83</span>
<span class="normal">84</span>
<span class="normal">85</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">scroll_navigation_panel_up</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;Прокручивает панель навигации вверх.&quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">navigation_panel</span><span class="o">.</span><span class="n">scroll_up</span><span class="p">(</span><span class="n">NavigationPanelLocators</span><span class="o">.</span><span class="n">PANEL_SCROLL_CONTAINER</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
@ -2739,13 +2787,15 @@ user_card (CardComponent): Карточка пользователя.</p>
<details class="quote">
<summary>Source code in <code>pages\main_page.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">80</span>
<span class="normal">81</span>
<span class="normal">82</span>
<span class="normal">83</span>
<span class="normal">84</span>
<span class="normal">85</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">should_be_navigation_panel</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>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">93</span>
<span class="normal">94</span>
<span class="normal">95</span>
<span class="normal">96</span>
<span class="normal">97</span>
<span class="normal">98</span>
<span class="normal">99</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">should_be_navigation_panel</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;Проверяет наличие панели навигации.&quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">navigation_panel</span><span class="o">.</span><span class="n">check_presence</span><span class="p">(</span>
<span class="n">NavigationPanelLocators</span><span class="o">.</span><span class="n">PANEL_MAIN</span><span class="p">,</span>
<span class="s2">&quot;Navigation panel is missing&quot;</span>
@ -2772,10 +2822,12 @@ user_card (CardComponent): Карточка пользователя.</p>
<details class="quote">
<summary>Source code in <code>pages\main_page.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">87</span>
<span class="normal">88</span>
<span class="normal">89</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">should_be_user_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>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">101</span>
<span class="normal">102</span>
<span class="normal">103</span>
<span class="normal">104</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">should_be_user_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;Проверяет наличие кнопки пользователя.&quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">user_button</span><span class="o">.</span><span class="n">check_presence</span><span class="p">(</span><span class="s2">&quot;User button is missing on event panel&quot;</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>

View File

@ -1912,6 +1912,10 @@
<a id="pages.service_status_tab"></a>
<div class="doc doc-contents first">
<p>Модуль вкладки 'Статус обслуживания'.</p>
<p>Содержит класс ServiceStatusTab для работы с таблицей сервисов.
Позволяет проверять состояние и взаимодействовать с элементами вкладки.</p>
@ -1946,7 +1950,8 @@
<p>Класс для работы с вкладкой 'Статус обслуживания'.</p>
<p>Предоставляет методы для взаимодействия с таблицей сервисов и проверки её состояния.</p>
<p>Предоставляет методы для взаимодействия с таблицей сервисов и проверки
её состояния.</p>
<p><span class="doc-section-title">Parameters:</span></p>
@ -1987,13 +1992,7 @@
<details class="quote">
<summary>Source code in <code>pages\service_status_tab.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal"> 10</span>
<span class="normal"> 11</span>
<span class="normal"> 12</span>
<span class="normal"> 13</span>
<span class="normal"> 14</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 14</span>
<span class="normal"> 15</span>
<span class="normal"> 16</span>
<span class="normal"> 17</span>
@ -2121,24 +2120,44 @@
<span class="normal">139</span>
<span class="normal">140</span>
<span class="normal">141</span>
<span class="normal">142</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">ServiceStatusTab</span><span class="p">(</span><span class="n">BasePage</span><span class="p">):</span>
<span class="normal">142</span>
<span class="normal">143</span>
<span class="normal">144</span>
<span class="normal">145</span>
<span class="normal">146</span>
<span class="normal">147</span>
<span class="normal">148</span>
<span class="normal">149</span>
<span class="normal">150</span>
<span class="normal">151</span>
<span class="normal">152</span>
<span class="normal">153</span>
<span class="normal">154</span>
<span class="normal">155</span>
<span class="normal">156</span>
<span class="normal">157</span>
<span class="normal">158</span>
<span class="normal">159</span>
<span class="normal">160</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">ServiceStatusTab</span><span class="p">(</span><span class="n">BasePage</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Класс для работы с вкладкой &#39;Статус обслуживания&#39;.</span>
<span class="sd"> Предоставляет методы для взаимодействия с таблицей сервисов и проверки её состояния.</span>
<span class="sd"> Предоставляет методы для взаимодействия с таблицей сервисов и проверки</span>
<span class="sd"> её состояния.</span>
<span class="sd"> Args:</span>
<span class="sd"> page (Page): Экземпляр страницы Playwright.</span>
<span class="sd"> page: Экземпляр страницы Playwright.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<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;Инициализация компонентов вкладки &#39;Статус обслуживания&#39;.&quot;&quot;&quot;</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Инициализирует компоненты вкладки &#39;Статус обслуживания&#39;.&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;Статус обслуживания&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">services_table</span> <span class="o">=</span> <span class="n">TableComponent</span><span class="p">(</span><span class="n">page</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">get_rows_count</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Возвращает количество строк в таблице сервисов (без учёта заголовка).</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Возвращает количество строк в таблице (без заголовка).</span>
<span class="sd"> Returns:</span>
<span class="sd"> int: Количество строк с данными.</span>
@ -2146,6 +2165,7 @@
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: Если таблица пуста.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">table_content</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">services_table</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">TableLocators</span><span class="o">.</span><span class="n">TABLE_WORK_AREA</span><span class="p">)</span>
<span class="n">rows_count</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">table_content</span><span class="p">)</span>
@ -2156,29 +2176,32 @@
<span class="k">def</span><span class="w"> </span><span class="nf">scroll_services_table_up</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;Прокручивает таблицу сервисов вверх.&quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">services_table</span><span class="o">.</span><span class="n">scroll_up</span><span class="p">(</span><span class="n">TableLocators</span><span class="o">.</span><span class="n">TABLE_SCROLL_CONTAINER</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">scroll_services_table_down</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;Прокручивает таблицу сервисов вниз.&quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">services_table</span><span class="o">.</span><span class="n">scroll_down</span><span class="p">(</span><span class="n">TableLocators</span><span class="o">.</span><span class="n">TABLE_SCROLL_CONTAINER</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">check_services_table_content</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"> Проверяет:</span>
<span class="sd"> - Наличие заголовков таблицы</span>
<span class="sd"> - Соответствие заголовков ожидаемым значениям</span>
<span class="sd"> - Наличие хотя бы одной строки с данными</span>
<span class="sd"> Проверяет заголовки и наличие данных в таблице.</span>
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: Если таблица пуста или заголовки не соответствуют ожидаемым.</span>
<span class="sd"> AssertionError: Если таблица пуста или заголовки неверны.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">expected_headers</span> <span class="o">=</span> <span class="p">[</span>
<span class="s1">&#39;Контейнер&#39;</span><span class="p">,</span>
<span class="s1">&#39;Время создания&#39;</span><span class="p">,</span>
<span class="s1">&#39;Статус&#39;</span><span class="p">,</span>
<span class="s1">&#39;Время работы&#39;</span><span class="p">,</span>
<span class="s1">&#39;Image ID&#39;</span><span class="p">,</span>
<span class="s1">&#39;Контейнер&#39;</span><span class="p">,</span>
<span class="s1">&#39;Время создания&#39;</span><span class="p">,</span>
<span class="s1">&#39;Статус&#39;</span><span class="p">,</span>
<span class="s1">&#39;Время работы&#39;</span><span class="p">,</span>
<span class="s1">&#39;Image ID&#39;</span><span class="p">,</span>
<span class="s1">&#39;Image ТЭГ&#39;</span>
<span class="p">]</span>
@ -2190,7 +2213,7 @@
<span class="n">actual_headers</span> <span class="o">=</span> <span class="n">table_content</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">check_equals</span><span class="p">(</span>
<span class="n">actual_headers</span><span class="p">,</span>
<span class="n">actual_headers</span><span class="p">,</span>
<span class="n">expected_headers</span><span class="p">,</span>
<span class="sa">f</span><span class="s2">&quot;Expected table headers </span><span class="si">{</span><span class="n">expected_headers</span><span class="si">}</span><span class="s2"> are not equal </span><span class="si">{</span><span class="n">actual_headers</span><span class="si">}</span><span class="s2">&quot;</span>
<span class="p">)</span>
@ -2204,37 +2227,41 @@
<span class="sd"> Returns:</span>
<span class="sd"> bool: True если прокрутка возможна, иначе False.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">services_table</span><span class="o">.</span><span class="n">is_scrollable_vertically</span><span class="p">(</span>
<span class="n">TableLocators</span><span class="o">.</span><span class="n">TABLE_SCROLL_CONTAINER</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">check_services_table_first_row_visibility</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"> AssertionError: Если строка не видна.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">services_table</span><span class="o">.</span><span class="n">check_first_row_visibility</span><span class="p">(</span><span class="n">TableLocators</span><span class="o">.</span><span class="n">TABLE_WORK_AREA</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">check_services_table_last_row_visibility</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"> AssertionError: Если строка не видна.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">services_table</span><span class="o">.</span><span class="n">check_last_row_visibility</span><span class="p">(</span><span class="n">TableLocators</span><span class="o">.</span><span class="n">TABLE_WORK_AREA</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">check_services_table_row_highlighting</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">row_index</span><span class="p">:</span> <span class="nb">int</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"> row_index (int): Индекс проверяемой строки.</span>
<span class="sd"> row_index: Индекс проверяемой строки.</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">services_table</span><span class="o">.</span><span class="n">check_row_highlighting</span><span class="p">(</span>
<span class="n">TableLocators</span><span class="o">.</span><span class="n">TABLE_WORK_AREA</span><span class="p">,</span>
<span class="n">TableLocators</span><span class="o">.</span><span class="n">TABLE_WORK_AREA</span><span class="p">,</span>
<span class="n">row_index</span>
<span class="p">)</span>
@ -2244,7 +2271,8 @@
<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_presence</span><span class="p">(</span><span class="s2">&quot;Toolbar is missing&quot;</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</span><span class="p">(</span><span class="s2">&quot;Toolbar is missing&quot;</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">should_be_services_table</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>
@ -2252,8 +2280,9 @@
<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">services_table</span><span class="o">.</span><span class="n">check_presence</span><span class="p">(</span>
<span class="n">TableLocators</span><span class="o">.</span><span class="n">TABLE_WORK_AREA</span><span class="p">,</span>
<span class="n">TableLocators</span><span class="o">.</span><span class="n">TABLE_WORK_AREA</span><span class="p">,</span>
<span class="s2">&quot;Service statuses table is missing&quot;</span>
<span class="p">)</span>
</code></pre></div></td></tr></table></div>
@ -2282,18 +2311,20 @@
<div class="doc doc-contents ">
<p>Инициализация компонентов вкладки 'Статус обслуживания'.</p>
<p>Инициализирует компоненты вкладки 'Статус обслуживания'.</p>
<details class="quote">
<summary>Source code in <code>pages\service_status_tab.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">17</span>
<span class="normal">18</span>
<span class="normal">19</span>
<span class="normal">20</span>
<span class="normal">21</span>
<span class="normal">22</span></pre></div></td><td class="code"><div><pre><span></span><code><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;Инициализация компонентов вкладки &#39;Статус обслуживания&#39;.&quot;&quot;&quot;</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">24</span>
<span class="normal">25</span>
<span class="normal">26</span>
<span class="normal">27</span>
<span class="normal">28</span>
<span class="normal">29</span>
<span class="normal">30</span></pre></div></td><td class="code"><div><pre><span></span><code><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;Инициализирует компоненты вкладки &#39;Статус обслуживания&#39;.&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;Статус обслуживания&quot;</span><span class="p">)</span>
@ -2316,10 +2347,7 @@
<div class="doc doc-contents ">
<p>Проверяет содержимое таблицы сервисов.</p>
<p>Проверяет:
- Наличие заголовков таблицы
- Соответствие заголовков ожидаемым значениям
- Наличие хотя бы одной строки с данными</p>
<p>Проверяет заголовки и наличие данных в таблице.</p>
<p><span class="doc-section-title">Raises:</span></p>
@ -2337,7 +2365,7 @@
</td>
<td>
<div class="doc-md-description">
<p>Если таблица пуста или заголовки не соответствуют ожидаемым.</p>
<p>Если таблица пуста или заголовки неверны.</p>
</div>
</td>
</tr>
@ -2347,18 +2375,7 @@
<details class="quote">
<summary>Source code in <code>pages\service_status_tab.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">49</span>
<span class="normal">50</span>
<span class="normal">51</span>
<span class="normal">52</span>
<span class="normal">53</span>
<span class="normal">54</span>
<span class="normal">55</span>
<span class="normal">56</span>
<span class="normal">57</span>
<span class="normal">58</span>
<span class="normal">59</span>
<span class="normal">60</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">60</span>
<span class="normal">61</span>
<span class="normal">62</span>
<span class="normal">63</span>
@ -2381,23 +2398,36 @@
<span class="normal">80</span>
<span class="normal">81</span>
<span class="normal">82</span>
<span class="normal">83</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">check_services_table_content</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="normal">83</span>
<span class="normal">84</span>
<span class="normal">85</span>
<span class="normal">86</span>
<span class="normal">87</span>
<span class="normal">88</span>
<span class="normal">89</span>
<span class="normal">90</span>
<span class="normal">91</span>
<span class="normal">92</span>
<span class="normal">93</span>
<span class="normal">94</span>
<span class="normal">95</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">check_services_table_content</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"> Проверяет:</span>
<span class="sd"> - Наличие заголовков таблицы</span>
<span class="sd"> - Соответствие заголовков ожидаемым значениям</span>
<span class="sd"> - Наличие хотя бы одной строки с данными</span>
<span class="sd"> Проверяет заголовки и наличие данных в таблице.</span>
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: Если таблица пуста или заголовки не соответствуют ожидаемым.</span>
<span class="sd"> AssertionError: Если таблица пуста или заголовки неверны.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">expected_headers</span> <span class="o">=</span> <span class="p">[</span>
<span class="s1">&#39;Контейнер&#39;</span><span class="p">,</span>
<span class="s1">&#39;Время создания&#39;</span><span class="p">,</span>
<span class="s1">&#39;Статус&#39;</span><span class="p">,</span>
<span class="s1">&#39;Время работы&#39;</span><span class="p">,</span>
<span class="s1">&#39;Image ID&#39;</span><span class="p">,</span>
<span class="s1">&#39;Контейнер&#39;</span><span class="p">,</span>
<span class="s1">&#39;Время создания&#39;</span><span class="p">,</span>
<span class="s1">&#39;Статус&#39;</span><span class="p">,</span>
<span class="s1">&#39;Время работы&#39;</span><span class="p">,</span>
<span class="s1">&#39;Image ID&#39;</span><span class="p">,</span>
<span class="s1">&#39;Image ТЭГ&#39;</span>
<span class="p">]</span>
@ -2409,7 +2439,7 @@
<span class="n">actual_headers</span> <span class="o">=</span> <span class="n">table_content</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">check_equals</span><span class="p">(</span>
<span class="n">actual_headers</span><span class="p">,</span>
<span class="n">actual_headers</span><span class="p">,</span>
<span class="n">expected_headers</span><span class="p">,</span>
<span class="sa">f</span><span class="s2">&quot;Expected table headers </span><span class="si">{</span><span class="n">expected_headers</span><span class="si">}</span><span class="s2"> are not equal </span><span class="si">{</span><span class="n">actual_headers</span><span class="si">}</span><span class="s2">&quot;</span>
<span class="p">)</span>
@ -2451,7 +2481,7 @@
</td>
<td>
<div class="doc-md-description">
<p>Если первая строка не видна.</p>
<p>Если строка не видна.</p>
</div>
</td>
</tr>
@ -2461,18 +2491,20 @@
<details class="quote">
<summary>Source code in <code>pages\service_status_tab.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 95</span>
<span class="normal"> 96</span>
<span class="normal"> 97</span>
<span class="normal"> 98</span>
<span class="normal"> 99</span>
<span class="normal">100</span>
<span class="normal">101</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">check_services_table_first_row_visibility</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>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">108</span>
<span class="normal">109</span>
<span class="normal">110</span>
<span class="normal">111</span>
<span class="normal">112</span>
<span class="normal">113</span>
<span class="normal">114</span>
<span class="normal">115</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">check_services_table_first_row_visibility</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"> AssertionError: Если строка не видна.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">services_table</span><span class="o">.</span><span class="n">check_first_row_visibility</span><span class="p">(</span><span class="n">TableLocators</span><span class="o">.</span><span class="n">TABLE_WORK_AREA</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
@ -2509,7 +2541,7 @@
</td>
<td>
<div class="doc-md-description">
<p>Если последняя строка не видна.</p>
<p>Если строка не видна.</p>
</div>
</td>
</tr>
@ -2519,18 +2551,20 @@
<details class="quote">
<summary>Source code in <code>pages\service_status_tab.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">103</span>
<span class="normal">104</span>
<span class="normal">105</span>
<span class="normal">106</span>
<span class="normal">107</span>
<span class="normal">108</span>
<span class="normal">109</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">check_services_table_last_row_visibility</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>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">117</span>
<span class="normal">118</span>
<span class="normal">119</span>
<span class="normal">120</span>
<span class="normal">121</span>
<span class="normal">122</span>
<span class="normal">123</span>
<span class="normal">124</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">check_services_table_last_row_visibility</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"> AssertionError: Если строка не видна.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">services_table</span><span class="o">.</span><span class="n">check_last_row_visibility</span><span class="p">(</span><span class="n">TableLocators</span><span class="o">.</span><span class="n">TABLE_WORK_AREA</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
@ -2608,29 +2642,31 @@
<details class="quote">
<summary>Source code in <code>pages\service_status_tab.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">111</span>
<span class="normal">112</span>
<span class="normal">113</span>
<span class="normal">114</span>
<span class="normal">115</span>
<span class="normal">116</span>
<span class="normal">117</span>
<span class="normal">118</span>
<span class="normal">119</span>
<span class="normal">120</span>
<span class="normal">121</span>
<span class="normal">122</span>
<span class="normal">123</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">check_services_table_row_highlighting</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">row_index</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">126</span>
<span class="normal">127</span>
<span class="normal">128</span>
<span class="normal">129</span>
<span class="normal">130</span>
<span class="normal">131</span>
<span class="normal">132</span>
<span class="normal">133</span>
<span class="normal">134</span>
<span class="normal">135</span>
<span class="normal">136</span>
<span class="normal">137</span>
<span class="normal">138</span>
<span class="normal">139</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">check_services_table_row_highlighting</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">row_index</span><span class="p">:</span> <span class="nb">int</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"> row_index (int): Индекс проверяемой строки.</span>
<span class="sd"> row_index: Индекс проверяемой строки.</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">services_table</span><span class="o">.</span><span class="n">check_row_highlighting</span><span class="p">(</span>
<span class="n">TableLocators</span><span class="o">.</span><span class="n">TABLE_WORK_AREA</span><span class="p">,</span>
<span class="n">TableLocators</span><span class="o">.</span><span class="n">TABLE_WORK_AREA</span><span class="p">,</span>
<span class="n">row_index</span>
<span class="p">)</span>
</code></pre></div></td></tr></table></div>
@ -2678,23 +2714,25 @@
<details class="quote">
<summary>Source code in <code>pages\service_status_tab.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">85</span>
<span class="normal">86</span>
<span class="normal">87</span>
<span class="normal">88</span>
<span class="normal">89</span>
<span class="normal">90</span>
<span class="normal">91</span>
<span class="normal">92</span>
<span class="normal">93</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">check_services_table_verticall_scrolling</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 97</span>
<span class="normal"> 98</span>
<span class="normal"> 99</span>
<span class="normal">100</span>
<span class="normal">101</span>
<span class="normal">102</span>
<span class="normal">103</span>
<span class="normal">104</span>
<span class="normal">105</span>
<span class="normal">106</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">check_services_table_verticall_scrolling</span><span class="p">(</span><span class="bp">self</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"> Returns:</span>
<span class="sd"> bool: True если прокрутка возможна, иначе False.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">services_table</span><span class="o">.</span><span class="n">is_scrollable_vertically</span><span class="p">(</span>
<span class="n">TableLocators</span><span class="o">.</span><span class="n">TABLE_SCROLL_CONTAINER</span>
<span class="p">)</span>
<span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
@ -2712,7 +2750,7 @@
<div class="doc doc-contents ">
<p>Возвращает количество строк в таблице сервисов (без учёта заголовка).</p>
<p>Возвращает количество строк в таблице (без заголовка).</p>
<p><span class="doc-section-title">Returns:</span></p>
@ -2763,23 +2801,24 @@
<details class="quote">
<summary>Source code in <code>pages\service_status_tab.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">24</span>
<span class="normal">25</span>
<span class="normal">26</span>
<span class="normal">27</span>
<span class="normal">28</span>
<span class="normal">29</span>
<span class="normal">30</span>
<span class="normal">31</span>
<span class="normal">32</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">32</span>
<span class="normal">33</span>
<span class="normal">34</span>
<span class="normal">35</span>
<span class="normal">36</span>
<span class="normal">37</span>
<span class="normal">38</span>
<span class="normal">39</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">get_rows_count</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Возвращает количество строк в таблице сервисов (без учёта заголовка).</span>
<span class="normal">39</span>
<span class="normal">40</span>
<span class="normal">41</span>
<span class="normal">42</span>
<span class="normal">43</span>
<span class="normal">44</span>
<span class="normal">45</span>
<span class="normal">46</span>
<span class="normal">47</span>
<span class="normal">48</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">get_rows_count</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Возвращает количество строк в таблице (без заголовка).</span>
<span class="sd"> Returns:</span>
<span class="sd"> int: Количество строк с данными.</span>
@ -2787,6 +2826,7 @@
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: Если таблица пуста.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">table_content</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">services_table</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">TableLocators</span><span class="o">.</span><span class="n">TABLE_WORK_AREA</span><span class="p">)</span>
<span class="n">rows_count</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">table_content</span><span class="p">)</span>
@ -2816,10 +2856,12 @@
<details class="quote">
<summary>Source code in <code>pages\service_status_tab.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">45</span>
<span class="normal">46</span>
<span class="normal">47</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">scroll_services_table_down</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>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">55</span>
<span class="normal">56</span>
<span class="normal">57</span>
<span class="normal">58</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">scroll_services_table_down</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;Прокручивает таблицу сервисов вниз.&quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">services_table</span><span class="o">.</span><span class="n">scroll_down</span><span class="p">(</span><span class="n">TableLocators</span><span class="o">.</span><span class="n">TABLE_SCROLL_CONTAINER</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
@ -2843,10 +2885,12 @@
<details class="quote">
<summary>Source code in <code>pages\service_status_tab.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">41</span>
<span class="normal">42</span>
<span class="normal">43</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">scroll_services_table_up</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>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">50</span>
<span class="normal">51</span>
<span class="normal">52</span>
<span class="normal">53</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">scroll_services_table_up</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;Прокручивает таблицу сервисов вверх.&quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">services_table</span><span class="o">.</span><span class="n">scroll_up</span><span class="p">(</span><span class="n">TableLocators</span><span class="o">.</span><span class="n">TABLE_SCROLL_CONTAINER</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
@ -2893,23 +2937,25 @@
<details class="quote">
<summary>Source code in <code>pages\service_status_tab.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">133</span>
<span class="normal">134</span>
<span class="normal">135</span>
<span class="normal">136</span>
<span class="normal">137</span>
<span class="normal">138</span>
<span class="normal">139</span>
<span class="normal">140</span>
<span class="normal">141</span>
<span class="normal">142</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">should_be_services_table</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>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">150</span>
<span class="normal">151</span>
<span class="normal">152</span>
<span class="normal">153</span>
<span class="normal">154</span>
<span class="normal">155</span>
<span class="normal">156</span>
<span class="normal">157</span>
<span class="normal">158</span>
<span class="normal">159</span>
<span class="normal">160</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">should_be_services_table</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">services_table</span><span class="o">.</span><span class="n">check_presence</span><span class="p">(</span>
<span class="n">TableLocators</span><span class="o">.</span><span class="n">TABLE_WORK_AREA</span><span class="p">,</span>
<span class="n">TableLocators</span><span class="o">.</span><span class="n">TABLE_WORK_AREA</span><span class="p">,</span>
<span class="s2">&quot;Service statuses table is missing&quot;</span>
<span class="p">)</span>
</code></pre></div></td></tr></table></div>
@ -2957,19 +3003,21 @@
<details class="quote">
<summary>Source code in <code>pages\service_status_tab.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">125</span>
<span class="normal">126</span>
<span class="normal">127</span>
<span class="normal">128</span>
<span class="normal">129</span>
<span class="normal">130</span>
<span class="normal">131</span></pre></div></td><td class="code"><div><pre><span></span><code><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>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">141</span>
<span class="normal">142</span>
<span class="normal">143</span>
<span class="normal">144</span>
<span class="normal">145</span>
<span class="normal">146</span>
<span class="normal">147</span>
<span class="normal">148</span></pre></div></td><td class="code"><div><pre><span></span><code><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_presence</span><span class="p">(</span><span class="s2">&quot;Toolbar is missing&quot;</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</span><span class="p">(</span><span class="s2">&quot;Toolbar is missing&quot;</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@ -1752,6 +1752,10 @@
<a id="tests.components.test_json_container"></a>
<div class="doc doc-contents first">
<p>Модуль тестов для контейнера с JSON-данными.</p>
<p>Содержит тесты для проверки функциональности контейнера
с JSON-данными на вкладке лицензий.</p>
@ -1793,13 +1797,7 @@
<details class="quote">
<summary>Source code in <code>tests\components\test_json_container.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal">10</span>
<span class="normal">11</span>
<span class="normal">12</span>
<span class="normal">13</span>
<span class="normal">14</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">14</span>
<span class="normal">15</span>
<span class="normal">16</span>
<span class="normal">17</span>
@ -1840,72 +1838,46 @@
<span class="normal">52</span>
<span class="normal">53</span>
<span class="normal">54</span>
<span class="normal">55</span>
<span class="normal">56</span>
<span class="normal">57</span>
<span class="normal">58</span>
<span class="normal">59</span>
<span class="normal">60</span>
<span class="normal">61</span>
<span class="normal">62</span>
<span class="normal">63</span>
<span class="normal">64</span>
<span class="normal">65</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">TestJsonContainer</span><span class="p">:</span>
<span class="normal">55</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">TestJsonContainer</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Тесты для проверки контейнера с JSON-данными на вкладке лицензий.&quot;&quot;&quot;</span>
<span class="nd">@pytest</span><span class="o">.</span><span class="n">fixture</span><span class="p">(</span><span class="n">scope</span><span class="o">=</span><span class="s2">&quot;function&quot;</span><span class="p">,</span> <span class="n">autouse</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">setup</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Фикстура для настройки тестового окружения.</span>
<span class="sd"> Выполняет:</span>
<span class="sd"> 1. Авторизацию в системе</span>
<span class="sd"> 2. Переход на главную страницу</span>
<span class="sd"> 3. Проверку видимости панели навигации</span>
<span class="sd"> 4. Переход на вкладку &#39;Лицензии&#39; через меню настроек</span>
<span class="k">def</span><span class="w"> </span><span class="nf">setup</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</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"> browser: Фикстура браузера</span>
<span class="sd"> browser: Экземпляр страницы Playwright.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">lp</span> <span class="o">=</span> <span class="n">LoginPage</span><span class="p">(</span><span class="n">browser</span><span class="p">)</span>
<span class="n">lp</span><span class="o">.</span><span class="n">do_login</span><span class="p">()</span>
<span class="c1"># Переход на главную страницу</span>
<span class="n">mp</span> <span class="o">=</span> <span class="n">MainPage</span><span class="p">(</span><span class="n">browser</span><span class="p">)</span>
<span class="c1"># Проверка видимости панели навигации</span>
<span class="n">mp</span><span class="o">.</span><span class="n">should_be_navigation_panel</span><span class="p">()</span>
<span class="c1"># Клик по пункту &quot;Настройки&quot; в главном меню</span>
<span class="n">mp</span><span class="o">.</span><span class="n">click_main_navigation_panel_item</span><span class="p">(</span><span class="s2">&quot;Настройки&quot;</span><span class="p">)</span>
<span class="c1"># Клик по пункту &quot;Обслуживание и диагностика&quot; в меню конфигурации</span>
<span class="n">mp</span><span class="o">.</span><span class="n">click_configuration_navigation_panel_item</span><span class="p">(</span><span class="s2">&quot;Обслуживание и диагностика&quot;</span><span class="p">)</span>
<span class="c1"># Клик по пункту &quot;Лицензии&quot; в меню конфигурации</span>
<span class="n">mp</span><span class="o">.</span><span class="n">click_configuration_navigation_panel_item</span><span class="p">(</span><span class="s2">&quot;Лицензии&quot;</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">test_verticall_scrolling</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Тест проверки вертикальной прокрутки в контейнере с JSON-данными.</span>
<span class="sd"> Проверяет:</span>
<span class="sd"> 1. Наличие возможности вертикальной прокрутки</span>
<span class="sd"> 2. Корректность работы прокрутки вниз и вверх</span>
<span class="k">def</span><span class="w"> </span><span class="nf">test_verticall_scrolling</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</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;Проверяет вертикальную прокрутку в контейнере с JSON-данными.</span>
<span class="sd"> Args:</span>
<span class="sd"> browser: Фикстура браузера</span>
<span class="sd"> browser: Экземпляр страницы Playwright.</span>
<span class="sd"> Steps:</span>
<span class="sd"> 1. Проверяет наличие вертикальной прокрутки</span>
<span class="sd"> 2. Прокручивает контейнер вниз</span>
<span class="sd"> 3. Прокручивает контейнер вверх</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># Инициализация страницы с лицензиями</span>
<span class="n">lt</span> <span class="o">=</span> <span class="n">LicenseTab</span><span class="p">(</span><span class="n">browser</span><span class="p">)</span>
<span class="c1"># Проверка наличия вертикальной прокрутки</span>
<span class="n">is_scrollable</span> <span class="o">=</span> <span class="n">lt</span><span class="o">.</span><span class="n">check_json_container_verticall_scrolling</span><span class="p">()</span>
<span class="k">assert</span> <span class="n">is_scrollable</span><span class="p">,</span> <span class="s2">&quot;Should be verticall scrolling&quot;</span>
<span class="c1"># Прокрутка вниз с задержкой</span>
<span class="n">lt</span><span class="o">.</span><span class="n">scroll_json_container_down</span><span class="p">()</span>
<span class="n">lt</span><span class="o">.</span><span class="n">wait_for_timeout</span><span class="p">(</span><span class="mi">3000</span><span class="p">)</span>
<span class="c1"># Прокрутка вверх с задержкой</span>
<span class="n">lt</span><span class="o">.</span><span class="n">scroll_json_container_up</span><span class="p">()</span>
<span class="n">lt</span><span class="o">.</span><span class="n">wait_for_timeout</span><span class="p">(</span><span class="mi">2000</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
@ -1934,12 +1906,7 @@
<div class="doc doc-contents ">
<p>Фикстура для настройки тестового окружения.</p>
<p>Выполняет:
1. Авторизацию в системе
2. Переход на главную страницу
3. Проверку видимости панели навигации
4. Переход на вкладку 'Лицензии' через меню настроек</p>
<p>Настраивает тестовое окружение перед каждым тестом.</p>
<p><span class="doc-section-title">Parameters:</span></p>
@ -1958,10 +1925,11 @@
<code>browser</code>
</td>
<td>
<code><span title="playwright.sync_api.Page">Page</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Фикстура браузера</p>
<p>Экземпляр страницы Playwright.</p>
</div>
</td>
<td>
@ -1974,13 +1942,7 @@
<details class="quote">
<summary>Source code in <code>tests\components\test_json_container.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">11</span>
<span class="normal">12</span>
<span class="normal">13</span>
<span class="normal">14</span>
<span class="normal">15</span>
<span class="normal">16</span>
<span class="normal">17</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">17</span>
<span class="normal">18</span>
<span class="normal">19</span>
<span class="normal">20</span>
@ -1995,43 +1957,21 @@
<span class="normal">29</span>
<span class="normal">30</span>
<span class="normal">31</span>
<span class="normal">32</span>
<span class="normal">33</span>
<span class="normal">34</span>
<span class="normal">35</span>
<span class="normal">36</span>
<span class="normal">37</span>
<span class="normal">38</span>
<span class="normal">39</span>
<span class="normal">40</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="nd">@pytest</span><span class="o">.</span><span class="n">fixture</span><span class="p">(</span><span class="n">scope</span><span class="o">=</span><span class="s2">&quot;function&quot;</span><span class="p">,</span> <span class="n">autouse</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">setup</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Фикстура для настройки тестового окружения.</span>
<span class="sd"> Выполняет:</span>
<span class="sd"> 1. Авторизацию в системе</span>
<span class="sd"> 2. Переход на главную страницу</span>
<span class="sd"> 3. Проверку видимости панели навигации</span>
<span class="sd"> 4. Переход на вкладку &#39;Лицензии&#39; через меню настроек</span>
<span class="normal">32</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="nd">@pytest</span><span class="o">.</span><span class="n">fixture</span><span class="p">(</span><span class="n">scope</span><span class="o">=</span><span class="s2">&quot;function&quot;</span><span class="p">,</span> <span class="n">autouse</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">setup</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</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"> browser: Фикстура браузера</span>
<span class="sd"> browser: Экземпляр страницы Playwright.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">lp</span> <span class="o">=</span> <span class="n">LoginPage</span><span class="p">(</span><span class="n">browser</span><span class="p">)</span>
<span class="n">lp</span><span class="o">.</span><span class="n">do_login</span><span class="p">()</span>
<span class="c1"># Переход на главную страницу</span>
<span class="n">mp</span> <span class="o">=</span> <span class="n">MainPage</span><span class="p">(</span><span class="n">browser</span><span class="p">)</span>
<span class="c1"># Проверка видимости панели навигации</span>
<span class="n">mp</span><span class="o">.</span><span class="n">should_be_navigation_panel</span><span class="p">()</span>
<span class="c1"># Клик по пункту &quot;Настройки&quot; в главном меню</span>
<span class="n">mp</span><span class="o">.</span><span class="n">click_main_navigation_panel_item</span><span class="p">(</span><span class="s2">&quot;Настройки&quot;</span><span class="p">)</span>
<span class="c1"># Клик по пункту &quot;Обслуживание и диагностика&quot; в меню конфигурации</span>
<span class="n">mp</span><span class="o">.</span><span class="n">click_configuration_navigation_panel_item</span><span class="p">(</span><span class="s2">&quot;Обслуживание и диагностика&quot;</span><span class="p">)</span>
<span class="c1"># Клик по пункту &quot;Лицензии&quot; в меню конфигурации</span>
<span class="n">mp</span><span class="o">.</span><span class="n">click_configuration_navigation_panel_item</span><span class="p">(</span><span class="s2">&quot;Лицензии&quot;</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
@ -2050,10 +1990,7 @@
<div class="doc doc-contents ">
<p>Тест проверки вертикальной прокрутки в контейнере с JSON-данными.</p>
<p>Проверяет:
1. Наличие возможности вертикальной прокрутки
2. Корректность работы прокрутки вниз и вверх</p>
<p>Проверяет вертикальную прокрутку в контейнере с JSON-данными.</p>
<p><span class="doc-section-title">Parameters:</span></p>
@ -2072,10 +2009,11 @@
<code>browser</code>
</td>
<td>
<code><span title="playwright.sync_api.Page">Page</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Фикстура браузера</p>
<p>Экземпляр страницы Playwright.</p>
</div>
</td>
<td>
@ -2086,9 +2024,26 @@
</table>
<details class="steps" open>
<summary>Steps</summary>
<ol>
<li>Проверяет наличие вертикальной прокрутки</li>
<li>Прокручивает контейнер вниз</li>
<li>Прокручивает контейнер вверх</li>
</ol>
</details>
<details class="quote">
<summary>Source code in <code>tests\components\test_json_container.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">42</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">34</span>
<span class="normal">35</span>
<span class="normal">36</span>
<span class="normal">37</span>
<span class="normal">38</span>
<span class="normal">39</span>
<span class="normal">40</span>
<span class="normal">41</span>
<span class="normal">42</span>
<span class="normal">43</span>
<span class="normal">44</span>
<span class="normal">45</span>
@ -2101,38 +2056,26 @@
<span class="normal">52</span>
<span class="normal">53</span>
<span class="normal">54</span>
<span class="normal">55</span>
<span class="normal">56</span>
<span class="normal">57</span>
<span class="normal">58</span>
<span class="normal">59</span>
<span class="normal">60</span>
<span class="normal">61</span>
<span class="normal">62</span>
<span class="normal">63</span>
<span class="normal">64</span>
<span class="normal">65</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">test_verticall_scrolling</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Тест проверки вертикальной прокрутки в контейнере с JSON-данными.</span>
<span class="sd"> Проверяет:</span>
<span class="sd"> 1. Наличие возможности вертикальной прокрутки</span>
<span class="sd"> 2. Корректность работы прокрутки вниз и вверх</span>
<span class="normal">55</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">test_verticall_scrolling</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</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;Проверяет вертикальную прокрутку в контейнере с JSON-данными.</span>
<span class="sd"> Args:</span>
<span class="sd"> browser: Фикстура браузера</span>
<span class="sd"> browser: Экземпляр страницы Playwright.</span>
<span class="sd"> Steps:</span>
<span class="sd"> 1. Проверяет наличие вертикальной прокрутки</span>
<span class="sd"> 2. Прокручивает контейнер вниз</span>
<span class="sd"> 3. Прокручивает контейнер вверх</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># Инициализация страницы с лицензиями</span>
<span class="n">lt</span> <span class="o">=</span> <span class="n">LicenseTab</span><span class="p">(</span><span class="n">browser</span><span class="p">)</span>
<span class="c1"># Проверка наличия вертикальной прокрутки</span>
<span class="n">is_scrollable</span> <span class="o">=</span> <span class="n">lt</span><span class="o">.</span><span class="n">check_json_container_verticall_scrolling</span><span class="p">()</span>
<span class="k">assert</span> <span class="n">is_scrollable</span><span class="p">,</span> <span class="s2">&quot;Should be verticall scrolling&quot;</span>
<span class="c1"># Прокрутка вниз с задержкой</span>
<span class="n">lt</span><span class="o">.</span><span class="n">scroll_json_container_down</span><span class="p">()</span>
<span class="n">lt</span><span class="o">.</span><span class="n">wait_for_timeout</span><span class="p">(</span><span class="mi">3000</span><span class="p">)</span>
<span class="c1"># Прокрутка вверх с задержкой</span>
<span class="n">lt</span><span class="o">.</span><span class="n">scroll_json_container_up</span><span class="p">()</span>
<span class="n">lt</span><span class="o">.</span><span class="n">wait_for_timeout</span><span class="p">(</span><span class="mi">2000</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>

View File

@ -1734,6 +1734,10 @@
<a id="tests.components.test_navigation_panel"></a>
<div class="doc doc-contents first">
<p>Модуль тестов панели навигации.</p>
<p>Содержит тесты для проверки функциональности и прокрутки
панели навигации в приложении.</p>
@ -1770,7 +1774,7 @@
<details class="атрибуты" open>
<summary>Атрибуты</summary>
<p>browser: фикстура для работы с браузером</p>
<p>browser: Фикстура для работы с браузером.</p>
</details>
@ -1780,13 +1784,7 @@
<details class="quote">
<summary>Source code in <code>tests\components\test_navigation_panel.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal">10</span>
<span class="normal">11</span>
<span class="normal">12</span>
<span class="normal">13</span>
<span class="normal">14</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">14</span>
<span class="normal">15</span>
<span class="normal">16</span>
<span class="normal">17</span>
@ -1830,25 +1828,27 @@
<span class="normal">55</span>
<span class="normal">56</span>
<span class="normal">57</span>
<span class="normal">58</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">TestNavigationPanel</span><span class="p">:</span>
<span class="normal">58</span>
<span class="normal">59</span>
<span class="normal">60</span>
<span class="normal">61</span>
<span class="normal">62</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">TestNavigationPanel</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Класс тестов для проверки панели навигации.</span>
<span class="sd"> Атрибуты:</span>
<span class="sd"> browser: фикстура для работы с браузером</span>
<span class="sd"> browser: Фикстура для работы с браузером.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span><span class="w"> </span><span class="nf">test_verticall_scrolling</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Тест вертикальной прокрутки панели навигации.</span>
<span class="k">def</span><span class="w"> </span><span class="nf">test_verticall_scrolling</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</span><span class="p">:</span> <span class="n">Page</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Проверяет вертикальную прокрутку панели навигации.</span>
<span class="sd"> Аргументы:</span>
<span class="sd"> browser: фикстура для работы с браузером</span>
<span class="sd"> Args:</span>
<span class="sd"> browser: Фикстура для работы с браузером.</span>
<span class="sd"> Возвращает:</span>
<span class="sd"> None</span>
<span class="sd"> Исключения:</span>
<span class="sd"> AssertionError: если панель навигации не поддерживает вертикальную прокрутку</span>
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: Если панель не поддерживает прокрутку.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># Действия:</span>
<span class="n">lp</span> <span class="o">=</span> <span class="n">LoginPage</span><span class="p">(</span><span class="n">browser</span><span class="p">)</span>
<span class="n">lp</span><span class="o">.</span><span class="n">do_login</span><span class="p">()</span>
@ -1862,8 +1862,8 @@
<span class="c1"># Открываем все пункты панели</span>
<span class="n">mp</span><span class="o">.</span><span class="n">click_main_navigation_panel_item</span><span class="p">(</span><span class="s2">&quot;Настройки&quot;</span><span class="p">)</span>
<span class="n">mp</span><span class="o">.</span><span class="n">click_configuration_navigation_panel_item</span><span class="p">(</span><span class="s2">&quot;Аутентификация&quot;</span><span class="p">)</span>
<span class="n">mp</span><span class="o">.</span><span class="n">click_configuration_navigation_panel_item</span><span class="p">(</span><span class="s2">&quot;Уведомления&quot;</span><span class="p">)</span>
<span class="n">mp</span><span class="o">.</span><span class="n">click_configuration_navigation_panel_item</span><span class="p">(</span><span class="s2">&quot;Аутентификация&quot;</span><span class="p">)</span>
<span class="n">mp</span><span class="o">.</span><span class="n">click_configuration_navigation_panel_item</span><span class="p">(</span><span class="s2">&quot;Уведомления&quot;</span><span class="p">)</span>
<span class="n">mp</span><span class="o">.</span><span class="n">click_configuration_navigation_panel_item</span><span class="p">(</span><span class="s2">&quot;Обслуживание и диагностика&quot;</span><span class="p">)</span>
<span class="n">mp</span><span class="o">.</span><span class="n">click_configuration_navigation_panel_item</span><span class="p">(</span><span class="s2">&quot;Zero Touch Provisioning&quot;</span><span class="p">)</span>
@ -1877,9 +1877,9 @@
<span class="n">mp</span><span class="o">.</span><span class="n">check_navigation_panel_item_visibility</span><span class="p">(</span><span class="s2">&quot;Панель приборов&quot;</span><span class="p">)</span>
<span class="n">mp</span><span class="o">.</span><span class="n">wait_for_timeout</span><span class="p">(</span><span class="mi">3000</span><span class="p">)</span>
<span class="c1"># Прокручиваем вниз и проверяем видимость элемента</span>
<span class="c1"># Прокручиваем вниз и проверяем видимость элемента Настройки/ZTP/Шаблоны</span>
<span class="n">mp</span><span class="o">.</span><span class="n">scroll_navigation_panel_down</span><span class="p">()</span>
<span class="n">mp</span><span class="o">.</span><span class="n">check_navigation_panel_item_visibility</span><span class="p">(</span><span class="s2">&quot;Шаблоны&quot;</span><span class="p">)</span>
<span class="n">mp</span><span class="o">.</span><span class="n">check_navigation_panel_item_visibility</span><span class="p">(</span><span class="s2">&quot;Шаблоны_2&quot;</span><span class="p">)</span>
<span class="n">mp</span><span class="o">.</span><span class="n">wait_for_timeout</span><span class="p">(</span><span class="mi">2000</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
@ -1907,33 +1907,66 @@
<div class="doc doc-contents ">
<p>Тест вертикальной прокрутки панели навигации.</p>
<p>Проверяет вертикальную прокрутку панели навигации.</p>
<details class="аргументы" open>
<summary>Аргументы</summary>
<p>browser: фикстура для работы с браузером</p>
</details>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>browser</code>
</td>
<td>
<code><span title="playwright.sync_api.Page">Page</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Фикстура для работы с браузером.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<details class="возвращает" open>
<summary>Возвращает</summary>
<p>None</p>
</details>
<details class="исключения" open>
<summary>Исключения</summary>
<p>AssertionError: если панель навигации не поддерживает вертикальную прокрутку</p>
</details>
<p><span class="doc-section-title">Raises:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="AssertionError">AssertionError</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Если панель не поддерживает прокрутку.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>tests\components\test_navigation_panel.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">15</span>
<span class="normal">16</span>
<span class="normal">17</span>
<span class="normal">18</span>
<span class="normal">19</span>
<span class="normal">20</span>
<span class="normal">21</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">21</span>
<span class="normal">22</span>
<span class="normal">23</span>
<span class="normal">24</span>
@ -1970,18 +2003,20 @@
<span class="normal">55</span>
<span class="normal">56</span>
<span class="normal">57</span>
<span class="normal">58</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">test_verticall_scrolling</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Тест вертикальной прокрутки панели навигации.</span>
<span class="normal">58</span>
<span class="normal">59</span>
<span class="normal">60</span>
<span class="normal">61</span>
<span class="normal">62</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">test_verticall_scrolling</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</span><span class="p">:</span> <span class="n">Page</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Проверяет вертикальную прокрутку панели навигации.</span>
<span class="sd"> Аргументы:</span>
<span class="sd"> browser: фикстура для работы с браузером</span>
<span class="sd"> Args:</span>
<span class="sd"> browser: Фикстура для работы с браузером.</span>
<span class="sd"> Возвращает:</span>
<span class="sd"> None</span>
<span class="sd"> Исключения:</span>
<span class="sd"> AssertionError: если панель навигации не поддерживает вертикальную прокрутку</span>
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: Если панель не поддерживает прокрутку.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># Действия:</span>
<span class="n">lp</span> <span class="o">=</span> <span class="n">LoginPage</span><span class="p">(</span><span class="n">browser</span><span class="p">)</span>
<span class="n">lp</span><span class="o">.</span><span class="n">do_login</span><span class="p">()</span>
@ -1995,8 +2030,8 @@
<span class="c1"># Открываем все пункты панели</span>
<span class="n">mp</span><span class="o">.</span><span class="n">click_main_navigation_panel_item</span><span class="p">(</span><span class="s2">&quot;Настройки&quot;</span><span class="p">)</span>
<span class="n">mp</span><span class="o">.</span><span class="n">click_configuration_navigation_panel_item</span><span class="p">(</span><span class="s2">&quot;Аутентификация&quot;</span><span class="p">)</span>
<span class="n">mp</span><span class="o">.</span><span class="n">click_configuration_navigation_panel_item</span><span class="p">(</span><span class="s2">&quot;Уведомления&quot;</span><span class="p">)</span>
<span class="n">mp</span><span class="o">.</span><span class="n">click_configuration_navigation_panel_item</span><span class="p">(</span><span class="s2">&quot;Аутентификация&quot;</span><span class="p">)</span>
<span class="n">mp</span><span class="o">.</span><span class="n">click_configuration_navigation_panel_item</span><span class="p">(</span><span class="s2">&quot;Уведомления&quot;</span><span class="p">)</span>
<span class="n">mp</span><span class="o">.</span><span class="n">click_configuration_navigation_panel_item</span><span class="p">(</span><span class="s2">&quot;Обслуживание и диагностика&quot;</span><span class="p">)</span>
<span class="n">mp</span><span class="o">.</span><span class="n">click_configuration_navigation_panel_item</span><span class="p">(</span><span class="s2">&quot;Zero Touch Provisioning&quot;</span><span class="p">)</span>
@ -2010,9 +2045,9 @@
<span class="n">mp</span><span class="o">.</span><span class="n">check_navigation_panel_item_visibility</span><span class="p">(</span><span class="s2">&quot;Панель приборов&quot;</span><span class="p">)</span>
<span class="n">mp</span><span class="o">.</span><span class="n">wait_for_timeout</span><span class="p">(</span><span class="mi">3000</span><span class="p">)</span>
<span class="c1"># Прокручиваем вниз и проверяем видимость элемента</span>
<span class="c1"># Прокручиваем вниз и проверяем видимость элемента Настройки/ZTP/Шаблоны</span>
<span class="n">mp</span><span class="o">.</span><span class="n">scroll_navigation_panel_down</span><span class="p">()</span>
<span class="n">mp</span><span class="o">.</span><span class="n">check_navigation_panel_item_visibility</span><span class="p">(</span><span class="s2">&quot;Шаблоны&quot;</span><span class="p">)</span>
<span class="n">mp</span><span class="o">.</span><span class="n">check_navigation_panel_item_visibility</span><span class="p">(</span><span class="s2">&quot;Шаблоны_2&quot;</span><span class="p">)</span>
<span class="n">mp</span><span class="o">.</span><span class="n">wait_for_timeout</span><span class="p">(</span><span class="mi">2000</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>

View File

@ -1752,6 +1752,10 @@
<a id="tests.components.test_services_table"></a>
<div class="doc doc-contents first">
<p>Модуль тестов таблицы статусов сервисов.</p>
<p>Содержит тесты для проверки функциональности и прокрутки
таблицы статусов сервисов на вкладке обслуживания.</p>
@ -1783,11 +1787,7 @@
<div class="doc doc-contents ">
<p>Тесты для проверки таблицы статусов сервисов.</p>
<p>Содержит тесты для проверки:
- Отображения таблицы статусов сервисов
- Содержимого таблицы
- Возможности вертикальной прокрутки</p>
<p>Класс тестов для проверки таблицы статусов сервисов.</p>
@ -1797,12 +1797,7 @@
<details class="quote">
<summary>Source code in <code>tests\components\test_services_table.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal">10</span>
<span class="normal">11</span>
<span class="normal">12</span>
<span class="normal">13</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">13</span>
<span class="normal">14</span>
<span class="normal">15</span>
<span class="normal">16</span>
@ -1849,102 +1844,51 @@
<span class="normal">57</span>
<span class="normal">58</span>
<span class="normal">59</span>
<span class="normal">60</span>
<span class="normal">61</span>
<span class="normal">62</span>
<span class="normal">63</span>
<span class="normal">64</span>
<span class="normal">65</span>
<span class="normal">66</span>
<span class="normal">67</span>
<span class="normal">68</span>
<span class="normal">69</span>
<span class="normal">70</span>
<span class="normal">71</span>
<span class="normal">72</span>
<span class="normal">73</span>
<span class="normal">74</span>
<span class="normal">75</span>
<span class="normal">76</span>
<span class="normal">77</span>
<span class="normal">78</span>
<span class="normal">79</span>
<span class="normal">80</span>
<span class="normal">81</span>
<span class="normal">82</span>
<span class="normal">83</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">TestServiceStatusTable</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Тесты для проверки таблицы статусов сервисов.</span>
<span class="normal">60</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">TestServiceStatusTable</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Класс тестов для проверки таблицы статусов сервисов.&quot;&quot;&quot;</span>
<span class="sd"> Содержит тесты для проверки:</span>
<span class="sd"> - Отображения таблицы статусов сервисов</span>
<span class="sd"> - Содержимого таблицы</span>
<span class="sd"> - Возможности вертикальной прокрутки</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># @pytest.mark.smoke</span>
<span class="nd">@pytest</span><span class="o">.</span><span class="n">fixture</span><span class="p">(</span><span class="n">scope</span><span class="o">=</span><span class="s2">&quot;function&quot;</span><span class="p">,</span> <span class="n">autouse</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">setup</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Фикстура для настройки тестового окружения.</span>
<span class="sd"> Выполняет:</span>
<span class="sd"> 1. Авторизацию в системе</span>
<span class="sd"> 2. Переход на главную страницу</span>
<span class="sd"> 3. Проверку видимости панели навигации</span>
<span class="sd"> 4. Переход на вкладку &#39;Статус обслуживания&#39;</span>
<span class="k">def</span><span class="w"> </span><span class="nf">setup</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</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"> browser: Фикстура браузера</span>
<span class="sd"> browser: Экземпляр страницы Playwright.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># Авторизация в системе</span>
<span class="n">lp</span> <span class="o">=</span> <span class="n">LoginPage</span><span class="p">(</span><span class="n">browser</span><span class="p">)</span>
<span class="n">lp</span><span class="o">.</span><span class="n">do_login</span><span class="p">()</span>
<span class="c1"># Переход на главную страницу</span>
<span class="n">mp</span> <span class="o">=</span> <span class="n">MainPage</span><span class="p">(</span><span class="n">browser</span><span class="p">)</span>
<span class="c1"># Проверка видимости панели навигации</span>
<span class="n">mp</span><span class="o">.</span><span class="n">should_be_navigation_panel</span><span class="p">()</span>
<span class="c1"># Клик по пункту &quot;Настройки&quot; в главном меню</span>
<span class="n">mp</span><span class="o">.</span><span class="n">click_main_navigation_panel_item</span><span class="p">(</span><span class="s2">&quot;Настройки&quot;</span><span class="p">)</span>
<span class="c1"># Клик по пункту &quot;Обслуживание и диагностика&quot; в меню конфигурации</span>
<span class="n">mp</span><span class="o">.</span><span class="n">click_configuration_navigation_panel_item</span><span class="p">(</span><span class="s2">&quot;Обслуживание и диагностика&quot;</span><span class="p">)</span>
<span class="c1"># Клик по пункту &quot;Статус обслуживания&quot; в меню обслуживания</span>
<span class="n">mp</span><span class="o">.</span><span class="n">click_maintenance_navigation_panel_item</span><span class="p">(</span><span class="s2">&quot;Статус обслуживания&quot;</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">test_scrolling</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Тест проверки прокрутки таблицы статусов сервисов.</span>
<span class="sd"> Проверяет:</span>
<span class="sd"> 1. Наличие таблицы статусов сервисов</span>
<span class="sd"> 2. Содержимое таблицы</span>
<span class="sd"> 3. Возможность вертикальной прокрутки</span>
<span class="sd"> 4. Видимость строк после прокрутки</span>
<span class="k">def</span><span class="w"> </span><span class="nf">test_scrolling</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</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"> browser: Фикстура браузера</span>
<span class="sd"> browser: Экземпляр страницы Playwright.</span>
<span class="sd"> Steps:</span>
<span class="sd"> 1. Проверяет наличие и содержимое таблицы</span>
<span class="sd"> 2. Проверяет возможность вертикальной прокрутки</span>
<span class="sd"> 3. Прокручивает вниз и проверяет видимость последней строки</span>
<span class="sd"> 4. Прокручивает вверх и проверяет видимость первой строки</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># Инициализация страницы с таблицей статусов сервисов</span>
<span class="n">sst</span> <span class="o">=</span> <span class="n">ServiceStatusTab</span><span class="p">(</span><span class="n">browser</span><span class="p">)</span>
<span class="c1"># Проверка наличия таблицы</span>
<span class="n">sst</span><span class="o">.</span><span class="n">should_be_services_table</span><span class="p">()</span>
<span class="c1"># Проверка содержимого таблицы</span>
<span class="n">sst</span><span class="o">.</span><span class="n">check_services_table_content</span><span class="p">()</span>
<span class="c1"># Проверка возможности вертикальной прокрутки</span>
<span class="n">is_scrollable_vertically</span> <span class="o">=</span> <span class="n">sst</span><span class="o">.</span><span class="n">check_services_table_verticall_scrolling</span><span class="p">()</span>
<span class="k">assert</span> <span class="n">is_scrollable_vertically</span><span class="p">,</span> <span class="s2">&quot;Should be verticall scrolling&quot;</span>
<span class="k">assert</span> <span class="n">is_scrollable_vertically</span><span class="p">,</span> <span class="s2">&quot;Should be vertical scrolling&quot;</span>
<span class="c1"># Прокрутка вниз и проверка видимости последней строки</span>
<span class="n">sst</span><span class="o">.</span><span class="n">scroll_services_table_down</span><span class="p">()</span>
<span class="n">sst</span><span class="o">.</span><span class="n">check_services_table_last_row_visibility</span><span class="p">()</span>
<span class="n">sst</span><span class="o">.</span><span class="n">wait_for_timeout</span><span class="p">(</span><span class="mi">3000</span><span class="p">)</span>
<span class="c1"># Прокрутка вверх и проверка видимости первой строки</span>
<span class="n">sst</span><span class="o">.</span><span class="n">scroll_services_table_up</span><span class="p">()</span>
<span class="n">sst</span><span class="o">.</span><span class="n">check_services_table_first_row_visibility</span><span class="p">()</span>
<span class="n">sst</span><span class="o">.</span><span class="n">wait_for_timeout</span><span class="p">(</span><span class="mi">2000</span><span class="p">)</span>
@ -1974,12 +1918,7 @@
<div class="doc doc-contents ">
<p>Фикстура для настройки тестового окружения.</p>
<p>Выполняет:
1. Авторизацию в системе
2. Переход на главную страницу
3. Проверку видимости панели навигации
4. Переход на вкладку 'Статус обслуживания'</p>
<p>Настраивает тестовое окружение перед каждым тестом.</p>
<p><span class="doc-section-title">Parameters:</span></p>
@ -1998,10 +1937,11 @@
<code>browser</code>
</td>
<td>
<code><span title="playwright.sync_api.Page">Page</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Фикстура браузера</p>
<p>Экземпляр страницы Playwright.</p>
</div>
</td>
<td>
@ -2014,7 +1954,9 @@
<details class="quote">
<summary>Source code in <code>tests\components\test_services_table.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">18</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">16</span>
<span class="normal">17</span>
<span class="normal">18</span>
<span class="normal">19</span>
<span class="normal">20</span>
<span class="normal">21</span>
@ -2027,53 +1969,21 @@
<span class="normal">28</span>
<span class="normal">29</span>
<span class="normal">30</span>
<span class="normal">31</span>
<span class="normal">32</span>
<span class="normal">33</span>
<span class="normal">34</span>
<span class="normal">35</span>
<span class="normal">36</span>
<span class="normal">37</span>
<span class="normal">38</span>
<span class="normal">39</span>
<span class="normal">40</span>
<span class="normal">41</span>
<span class="normal">42</span>
<span class="normal">43</span>
<span class="normal">44</span>
<span class="normal">45</span>
<span class="normal">46</span>
<span class="normal">47</span>
<span class="normal">48</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="nd">@pytest</span><span class="o">.</span><span class="n">fixture</span><span class="p">(</span><span class="n">scope</span><span class="o">=</span><span class="s2">&quot;function&quot;</span><span class="p">,</span> <span class="n">autouse</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">setup</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Фикстура для настройки тестового окружения.</span>
<span class="sd"> Выполняет:</span>
<span class="sd"> 1. Авторизацию в системе</span>
<span class="sd"> 2. Переход на главную страницу</span>
<span class="sd"> 3. Проверку видимости панели навигации</span>
<span class="sd"> 4. Переход на вкладку &#39;Статус обслуживания&#39;</span>
<span class="normal">31</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="nd">@pytest</span><span class="o">.</span><span class="n">fixture</span><span class="p">(</span><span class="n">scope</span><span class="o">=</span><span class="s2">&quot;function&quot;</span><span class="p">,</span> <span class="n">autouse</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">setup</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</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"> browser: Фикстура браузера</span>
<span class="sd"> browser: Экземпляр страницы Playwright.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># Авторизация в системе</span>
<span class="n">lp</span> <span class="o">=</span> <span class="n">LoginPage</span><span class="p">(</span><span class="n">browser</span><span class="p">)</span>
<span class="n">lp</span><span class="o">.</span><span class="n">do_login</span><span class="p">()</span>
<span class="c1"># Переход на главную страницу</span>
<span class="n">mp</span> <span class="o">=</span> <span class="n">MainPage</span><span class="p">(</span><span class="n">browser</span><span class="p">)</span>
<span class="c1"># Проверка видимости панели навигации</span>
<span class="n">mp</span><span class="o">.</span><span class="n">should_be_navigation_panel</span><span class="p">()</span>
<span class="c1"># Клик по пункту &quot;Настройки&quot; в главном меню</span>
<span class="n">mp</span><span class="o">.</span><span class="n">click_main_navigation_panel_item</span><span class="p">(</span><span class="s2">&quot;Настройки&quot;</span><span class="p">)</span>
<span class="c1"># Клик по пункту &quot;Обслуживание и диагностика&quot; в меню конфигурации</span>
<span class="n">mp</span><span class="o">.</span><span class="n">click_configuration_navigation_panel_item</span><span class="p">(</span><span class="s2">&quot;Обслуживание и диагностика&quot;</span><span class="p">)</span>
<span class="c1"># Клик по пункту &quot;Статус обслуживания&quot; в меню обслуживания</span>
<span class="n">mp</span><span class="o">.</span><span class="n">click_maintenance_navigation_panel_item</span><span class="p">(</span><span class="s2">&quot;Статус обслуживания&quot;</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
@ -2092,12 +2002,7 @@
<div class="doc doc-contents ">
<p>Тест проверки прокрутки таблицы статусов сервисов.</p>
<p>Проверяет:
1. Наличие таблицы статусов сервисов
2. Содержимое таблицы
3. Возможность вертикальной прокрутки
4. Видимость строк после прокрутки</p>
<p>Проверяет прокрутку таблицы статусов сервисов.</p>
<p><span class="doc-section-title">Parameters:</span></p>
@ -2116,10 +2021,11 @@
<code>browser</code>
</td>
<td>
<code><span title="playwright.sync_api.Page">Page</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Фикстура браузера</p>
<p>Экземпляр страницы Playwright.</p>
</div>
</td>
<td>
@ -2130,9 +2036,36 @@
</table>
<details class="steps" open>
<summary>Steps</summary>
<ol>
<li>Проверяет наличие и содержимое таблицы</li>
<li>Проверяет возможность вертикальной прокрутки</li>
<li>Прокручивает вниз и проверяет видимость последней строки</li>
<li>Прокручивает вверх и проверяет видимость первой строки</li>
</ol>
</details>
<details class="quote">
<summary>Source code in <code>tests\components\test_services_table.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">50</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">33</span>
<span class="normal">34</span>
<span class="normal">35</span>
<span class="normal">36</span>
<span class="normal">37</span>
<span class="normal">38</span>
<span class="normal">39</span>
<span class="normal">40</span>
<span class="normal">41</span>
<span class="normal">42</span>
<span class="normal">43</span>
<span class="normal">44</span>
<span class="normal">45</span>
<span class="normal">46</span>
<span class="normal">47</span>
<span class="normal">48</span>
<span class="normal">49</span>
<span class="normal">50</span>
<span class="normal">51</span>
<span class="normal">52</span>
<span class="normal">53</span>
@ -2142,60 +2075,31 @@
<span class="normal">57</span>
<span class="normal">58</span>
<span class="normal">59</span>
<span class="normal">60</span>
<span class="normal">61</span>
<span class="normal">62</span>
<span class="normal">63</span>
<span class="normal">64</span>
<span class="normal">65</span>
<span class="normal">66</span>
<span class="normal">67</span>
<span class="normal">68</span>
<span class="normal">69</span>
<span class="normal">70</span>
<span class="normal">71</span>
<span class="normal">72</span>
<span class="normal">73</span>
<span class="normal">74</span>
<span class="normal">75</span>
<span class="normal">76</span>
<span class="normal">77</span>
<span class="normal">78</span>
<span class="normal">79</span>
<span class="normal">80</span>
<span class="normal">81</span>
<span class="normal">82</span>
<span class="normal">83</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">test_scrolling</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Тест проверки прокрутки таблицы статусов сервисов.</span>
<span class="sd"> Проверяет:</span>
<span class="sd"> 1. Наличие таблицы статусов сервисов</span>
<span class="sd"> 2. Содержимое таблицы</span>
<span class="sd"> 3. Возможность вертикальной прокрутки</span>
<span class="sd"> 4. Видимость строк после прокрутки</span>
<span class="normal">60</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">test_scrolling</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</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"> browser: Фикстура браузера</span>
<span class="sd"> browser: Экземпляр страницы Playwright.</span>
<span class="sd"> Steps:</span>
<span class="sd"> 1. Проверяет наличие и содержимое таблицы</span>
<span class="sd"> 2. Проверяет возможность вертикальной прокрутки</span>
<span class="sd"> 3. Прокручивает вниз и проверяет видимость последней строки</span>
<span class="sd"> 4. Прокручивает вверх и проверяет видимость первой строки</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># Инициализация страницы с таблицей статусов сервисов</span>
<span class="n">sst</span> <span class="o">=</span> <span class="n">ServiceStatusTab</span><span class="p">(</span><span class="n">browser</span><span class="p">)</span>
<span class="c1"># Проверка наличия таблицы</span>
<span class="n">sst</span><span class="o">.</span><span class="n">should_be_services_table</span><span class="p">()</span>
<span class="c1"># Проверка содержимого таблицы</span>
<span class="n">sst</span><span class="o">.</span><span class="n">check_services_table_content</span><span class="p">()</span>
<span class="c1"># Проверка возможности вертикальной прокрутки</span>
<span class="n">is_scrollable_vertically</span> <span class="o">=</span> <span class="n">sst</span><span class="o">.</span><span class="n">check_services_table_verticall_scrolling</span><span class="p">()</span>
<span class="k">assert</span> <span class="n">is_scrollable_vertically</span><span class="p">,</span> <span class="s2">&quot;Should be verticall scrolling&quot;</span>
<span class="k">assert</span> <span class="n">is_scrollable_vertically</span><span class="p">,</span> <span class="s2">&quot;Should be vertical scrolling&quot;</span>
<span class="c1"># Прокрутка вниз и проверка видимости последней строки</span>
<span class="n">sst</span><span class="o">.</span><span class="n">scroll_services_table_down</span><span class="p">()</span>
<span class="n">sst</span><span class="o">.</span><span class="n">check_services_table_last_row_visibility</span><span class="p">()</span>
<span class="n">sst</span><span class="o">.</span><span class="n">wait_for_timeout</span><span class="p">(</span><span class="mi">3000</span><span class="p">)</span>
<span class="c1"># Прокрутка вверх и проверка видимости первой строки</span>
<span class="n">sst</span><span class="o">.</span><span class="n">scroll_services_table_up</span><span class="p">()</span>
<span class="n">sst</span><span class="o">.</span><span class="n">check_services_table_first_row_visibility</span><span class="p">()</span>
<span class="n">sst</span><span class="o">.</span><span class="n">wait_for_timeout</span><span class="p">(</span><span class="mi">2000</span><span class="p">)</span>

File diff suppressed because it is too large Load Diff

View File

@ -1245,17 +1245,17 @@
</li>
<li class="md-nav__item">
<a href="#tests.e2e.test_license_tab.TestLisenceTab" class="md-nav__link">
<a href="#tests.e2e.test_license_tab.TestLicenseTab" class="md-nav__link">
<span class="md-ellipsis">
TestLisenceTab
TestLicenseTab
</span>
</a>
<nav class="md-nav" aria-label="TestLisenceTab">
<nav class="md-nav" aria-label="TestLicenseTab">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#tests.e2e.test_license_tab.TestLisenceTab.setup" class="md-nav__link">
<a href="#tests.e2e.test_license_tab.TestLicenseTab.setup" class="md-nav__link">
<span class="md-ellipsis">
setup
</span>
@ -1264,7 +1264,7 @@
</li>
<li class="md-nav__item">
<a href="#tests.e2e.test_license_tab.TestLisenceTab.test_license_tab_input_form_and_check_alert" class="md-nav__link">
<a href="#tests.e2e.test_license_tab.TestLicenseTab.test_license_tab_input_form_and_check_alert" class="md-nav__link">
<span class="md-ellipsis">
test_license_tab_input_form_and_check_alert
</span>
@ -1273,7 +1273,7 @@
</li>
<li class="md-nav__item">
<a href="#tests.e2e.test_license_tab.TestLisenceTab.test_lisence_tab_content" class="md-nav__link">
<a href="#tests.e2e.test_license_tab.TestLicenseTab.test_lisence_tab_content" class="md-nav__link">
<span class="md-ellipsis">
test_lisence_tab_content
</span>
@ -1704,17 +1704,17 @@
</li>
<li class="md-nav__item">
<a href="#tests.e2e.test_license_tab.TestLisenceTab" class="md-nav__link">
<a href="#tests.e2e.test_license_tab.TestLicenseTab" class="md-nav__link">
<span class="md-ellipsis">
TestLisenceTab
TestLicenseTab
</span>
</a>
<nav class="md-nav" aria-label="TestLisenceTab">
<nav class="md-nav" aria-label="TestLicenseTab">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#tests.e2e.test_license_tab.TestLisenceTab.setup" class="md-nav__link">
<a href="#tests.e2e.test_license_tab.TestLicenseTab.setup" class="md-nav__link">
<span class="md-ellipsis">
setup
</span>
@ -1723,7 +1723,7 @@
</li>
<li class="md-nav__item">
<a href="#tests.e2e.test_license_tab.TestLisenceTab.test_license_tab_input_form_and_check_alert" class="md-nav__link">
<a href="#tests.e2e.test_license_tab.TestLicenseTab.test_license_tab_input_form_and_check_alert" class="md-nav__link">
<span class="md-ellipsis">
test_license_tab_input_form_and_check_alert
</span>
@ -1732,7 +1732,7 @@
</li>
<li class="md-nav__item">
<a href="#tests.e2e.test_license_tab.TestLisenceTab.test_lisence_tab_content" class="md-nav__link">
<a href="#tests.e2e.test_license_tab.TestLicenseTab.test_lisence_tab_content" class="md-nav__link">
<span class="md-ellipsis">
test_lisence_tab_content
</span>
@ -1770,6 +1770,10 @@
<a id="tests.e2e.test_license_tab"></a>
<div class="doc doc-contents first">
<p>Модуль тестов вкладки 'Лицензии'.</p>
<p>Содержит тесты для проверки функциональности
и содержимого вкладки лицензий.</p>
@ -1791,8 +1795,8 @@
<h2 id="tests.e2e.test_license_tab.TestLisenceTab" class="doc doc-heading">
<code>TestLisenceTab</code>
<h2 id="tests.e2e.test_license_tab.TestLicenseTab" class="doc doc-heading">
<code>TestLicenseTab</code>
</h2>
@ -1801,14 +1805,9 @@
<div class="doc doc-contents ">
<p>Тесты для вкладки 'Лицензии'.</p>
<p>Класс тестов для проверки вкладки 'Лицензии'.</p>
<details class="атрибуты" open>
<summary>Атрибуты</summary>
<p>browser: фикстура для работы с браузером.</p>
</details>
@ -1816,254 +1815,9 @@
<details class="quote">
<summary>Source code in <code>tests\e2e\test_license_tab.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 10</span>
<span class="normal"> 11</span>
<span class="normal"> 12</span>
<span class="normal"> 13</span>
<span class="normal"> 14</span>
<span class="normal"> 15</span>
<span class="normal"> 16</span>
<span class="normal"> 17</span>
<span class="normal"> 18</span>
<span class="normal"> 19</span>
<span class="normal"> 20</span>
<span class="normal"> 21</span>
<span class="normal"> 22</span>
<span class="normal"> 23</span>
<span class="normal"> 24</span>
<span class="normal"> 25</span>
<span class="normal"> 26</span>
<span class="normal"> 27</span>
<span class="normal"> 28</span>
<span class="normal"> 29</span>
<span class="normal"> 30</span>
<span class="normal"> 31</span>
<span class="normal"> 32</span>
<span class="normal"> 33</span>
<span class="normal"> 34</span>
<span class="normal"> 35</span>
<span class="normal"> 36</span>
<span class="normal"> 37</span>
<span class="normal"> 38</span>
<span class="normal"> 39</span>
<span class="normal"> 40</span>
<span class="normal"> 41</span>
<span class="normal"> 42</span>
<span class="normal"> 43</span>
<span class="normal"> 44</span>
<span class="normal"> 45</span>
<span class="normal"> 46</span>
<span class="normal"> 47</span>
<span class="normal"> 48</span>
<span class="normal"> 49</span>
<span class="normal"> 50</span>
<span class="normal"> 51</span>
<span class="normal"> 52</span>
<span class="normal"> 53</span>
<span class="normal"> 54</span>
<span class="normal"> 55</span>
<span class="normal"> 56</span>
<span class="normal"> 57</span>
<span class="normal"> 58</span>
<span class="normal"> 59</span>
<span class="normal"> 60</span>
<span class="normal"> 61</span>
<span class="normal"> 62</span>
<span class="normal"> 63</span>
<span class="normal"> 64</span>
<span class="normal"> 65</span>
<span class="normal"> 66</span>
<span class="normal"> 67</span>
<span class="normal"> 68</span>
<span class="normal"> 69</span>
<span class="normal"> 70</span>
<span class="normal"> 71</span>
<span class="normal"> 72</span>
<span class="normal"> 73</span>
<span class="normal"> 74</span>
<span class="normal"> 75</span>
<span class="normal"> 76</span>
<span class="normal"> 77</span>
<span class="normal"> 78</span>
<span class="normal"> 79</span>
<span class="normal"> 80</span>
<span class="normal"> 81</span>
<span class="normal"> 82</span>
<span class="normal"> 83</span>
<span class="normal"> 84</span>
<span class="normal"> 85</span>
<span class="normal"> 86</span>
<span class="normal"> 87</span>
<span class="normal"> 88</span>
<span class="normal"> 89</span>
<span class="normal"> 90</span>
<span class="normal"> 91</span>
<span class="normal"> 92</span>
<span class="normal"> 93</span>
<span class="normal"> 94</span>
<span class="normal"> 95</span>
<span class="normal"> 96</span>
<span class="normal"> 97</span>
<span class="normal"> 98</span>
<span class="normal"> 99</span>
<span class="normal">100</span>
<span class="normal">101</span>
<span class="normal">102</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">TestLisenceTab</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Тесты для вкладки &#39;Лицензии&#39;.</span>
<span class="sd"> Атрибуты:</span>
<span class="sd"> browser: фикстура для работы с браузером.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="nd">@pytest</span><span class="o">.</span><span class="n">fixture</span><span class="p">(</span><span class="n">scope</span><span class="o">=</span><span class="s2">&quot;function&quot;</span><span class="p">,</span> <span class="n">autouse</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">setup</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Подготовка тестового окружения.</span>
<span class="sd"> Выполняет вход в систему и переход на вкладку &#39;Лицензии&#39;.</span>
<span class="sd"> Args:</span>
<span class="sd"> browser: фикстура для работы с браузером.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">lp</span> <span class="o">=</span> <span class="n">LoginPage</span><span class="p">(</span><span class="n">browser</span><span class="p">)</span>
<span class="n">lp</span><span class="o">.</span><span class="n">do_login</span><span class="p">()</span>
<span class="c1"># Переход на главную страницу</span>
<span class="n">mp</span> <span class="o">=</span> <span class="n">MainPage</span><span class="p">(</span><span class="n">browser</span><span class="p">)</span>
<span class="c1"># Проверка наличия панели навигации</span>
<span class="n">mp</span><span class="o">.</span><span class="n">should_be_navigation_panel</span><span class="p">()</span>
<span class="c1"># Клик по кнопке &quot;Настройки&quot; в главной панели навигации</span>
<span class="n">mp</span><span class="o">.</span><span class="n">click_main_navigation_panel_item</span><span class="p">(</span><span class="s2">&quot;Настройки&quot;</span><span class="p">)</span>
<span class="c1"># Клик по кнопке &quot;Обслуживание и диагностика&quot; в панели навигации настроек</span>
<span class="n">mp</span><span class="o">.</span><span class="n">click_configuration_navigation_panel_item</span><span class="p">(</span><span class="s2">&quot;Обслуживание и диагностика&quot;</span><span class="p">)</span>
<span class="c1"># Клик по кнопке &quot;Лицензии&quot; в панели навигации настроек</span>
<span class="n">mp</span><span class="o">.</span><span class="n">click_configuration_navigation_panel_item</span><span class="p">(</span><span class="s2">&quot;Лицензии&quot;</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">test_lisence_tab_content</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Тест содержимого вкладки &#39;Лицензии&#39;.</span>
<span class="sd"> Проверяет корректность отображения содержимого вкладки.</span>
<span class="sd"> Args:</span>
<span class="sd"> browser: фикстура для работы с браузером.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># Вкладка лицензий открыта</span>
<span class="n">lt</span> <span class="o">=</span> <span class="n">LicenseTab</span><span class="p">(</span><span class="n">browser</span><span class="p">)</span>
<span class="c1"># Проверка содержимого таблицы статусов сервисов</span>
<span class="n">lt</span><span class="o">.</span><span class="n">check_content</span><span class="p">()</span>
<span class="k">def</span><span class="w"> </span><span class="nf">test_license_tab_input_form_and_check_alert</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</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"> browser: фикстура для работы с браузером.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span><span class="w"> </span><span class="nf">gen_test_data</span><span class="p">():</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Генерация тестовых данных для проверки формы ввода лицензии.</span>
<span class="sd"> Returns:</span>
<span class="sd"> list: Список тестовых строк для проверки.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">data</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">3</span><span class="p">):</span>
<span class="n">data</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">uuid</span><span class="o">.</span><span class="n">uuid4</span><span class="p">()</span><span class="o">.</span><span class="n">hex</span><span class="p">)</span>
<span class="n">lowercase_str</span> <span class="o">=</span> <span class="n">uuid</span><span class="o">.</span><span class="n">uuid4</span><span class="p">()</span><span class="o">.</span><span class="n">hex</span>
<span class="n">data</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">lowercase_str</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
<span class="n">data</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">lowercase_str</span> <span class="o">+</span> <span class="s2">&quot;fffffffff&quot;</span><span class="p">)</span>
<span class="n">data</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;0&quot;</span><span class="p">)</span>
<span class="n">data</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;000000000000000000000000000000000000000000000000&quot;</span><span class="p">)</span>
<span class="n">data</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;-1&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">data</span>
<span class="c1"># Вкладка лицензий открыта</span>
<span class="n">lt</span> <span class="o">=</span> <span class="n">LicenseTab</span><span class="p">(</span><span class="n">browser</span><span class="p">)</span>
<span class="c1"># Проверка наличия пустой формы ввода лицензии</span>
<span class="n">lt</span><span class="o">.</span><span class="n">should_be_empty_input_form</span><span class="p">()</span>
<span class="c1"># Ввод пустой строки</span>
<span class="n">lt</span><span class="o">.</span><span class="n">fill_license_input_form</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
<span class="c1"># Проверка окна с ошибкой</span>
<span class="n">lt</span><span class="o">.</span><span class="n">should_be_error_alert_window_with_text</span><span class="p">(</span><span class="s2">&quot;Неверный лицензионный ключ&quot;</span><span class="p">)</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">gen_test_data</span><span class="p">()</span>
<span class="k">for</span> <span class="n">data_string</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span>
<span class="c1"># Ввод некорректного значения</span>
<span class="n">lt</span><span class="o">.</span><span class="n">fill_license_input_form</span><span class="p">(</span><span class="n">data_string</span><span class="p">)</span>
<span class="c1"># Проверка окна с ошибкой</span>
<span class="n">lt</span><span class="o">.</span><span class="n">should_be_error_alert_window_with_text</span><span class="p">(</span><span class="s2">&quot;Ошибка обновления лицензии&quot;</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
<div class="doc doc-children">
<div class="doc doc-object doc-function">
<h3 id="tests.e2e.test_license_tab.TestLisenceTab.setup" class="doc doc-heading">
<code class="highlight language-python"><span class="n">setup</span><span class="p">(</span><span class="n">browser</span><span class="p">)</span></code>
</h3>
<div class="doc doc-contents ">
<p>Подготовка тестового окружения.</p>
<p>Выполняет вход в систему и переход на вкладку 'Лицензии'.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>browser</code>
</td>
<td>
</td>
<td>
<div class="doc-md-description">
<p>фикстура для работы с браузером.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>tests\e2e\test_license_tab.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">17</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">15</span>
<span class="normal">16</span>
<span class="normal">17</span>
<span class="normal">18</span>
<span class="normal">19</span>
<span class="normal">20</span>
@ -2088,228 +1842,9 @@
<span class="normal">39</span>
<span class="normal">40</span>
<span class="normal">41</span>
<span class="normal">42</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="nd">@pytest</span><span class="o">.</span><span class="n">fixture</span><span class="p">(</span><span class="n">scope</span><span class="o">=</span><span class="s2">&quot;function&quot;</span><span class="p">,</span> <span class="n">autouse</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">setup</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Подготовка тестового окружения.</span>
<span class="sd"> Выполняет вход в систему и переход на вкладку &#39;Лицензии&#39;.</span>
<span class="sd"> Args:</span>
<span class="sd"> browser: фикстура для работы с браузером.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">lp</span> <span class="o">=</span> <span class="n">LoginPage</span><span class="p">(</span><span class="n">browser</span><span class="p">)</span>
<span class="n">lp</span><span class="o">.</span><span class="n">do_login</span><span class="p">()</span>
<span class="c1"># Переход на главную страницу</span>
<span class="n">mp</span> <span class="o">=</span> <span class="n">MainPage</span><span class="p">(</span><span class="n">browser</span><span class="p">)</span>
<span class="c1"># Проверка наличия панели навигации</span>
<span class="n">mp</span><span class="o">.</span><span class="n">should_be_navigation_panel</span><span class="p">()</span>
<span class="c1"># Клик по кнопке &quot;Настройки&quot; в главной панели навигации</span>
<span class="n">mp</span><span class="o">.</span><span class="n">click_main_navigation_panel_item</span><span class="p">(</span><span class="s2">&quot;Настройки&quot;</span><span class="p">)</span>
<span class="c1"># Клик по кнопке &quot;Обслуживание и диагностика&quot; в панели навигации настроек</span>
<span class="n">mp</span><span class="o">.</span><span class="n">click_configuration_navigation_panel_item</span><span class="p">(</span><span class="s2">&quot;Обслуживание и диагностика&quot;</span><span class="p">)</span>
<span class="c1"># Клик по кнопке &quot;Лицензии&quot; в панели навигации настроек</span>
<span class="n">mp</span><span class="o">.</span><span class="n">click_configuration_navigation_panel_item</span><span class="p">(</span><span class="s2">&quot;Лицензии&quot;</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="tests.e2e.test_license_tab.TestLisenceTab.test_license_tab_input_form_and_check_alert" class="doc doc-heading">
<code class="highlight language-python"><span class="n">test_license_tab_input_form_and_check_alert</span><span class="p">(</span><span class="n">browser</span><span class="p">)</span></code>
</h3>
<div class="doc doc-contents ">
<p>Тест формы ввода лицензии и проверки алертов.</p>
<p>Проверяет обработку различных вариантов ввода в форму лицензии.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>browser</code>
</td>
<td>
</td>
<td>
<div class="doc-md-description">
<p>фикстура для работы с браузером.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>tests\e2e\test_license_tab.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 58</span>
<span class="normal"> 59</span>
<span class="normal"> 60</span>
<span class="normal"> 61</span>
<span class="normal"> 62</span>
<span class="normal"> 63</span>
<span class="normal"> 64</span>
<span class="normal"> 65</span>
<span class="normal"> 66</span>
<span class="normal"> 67</span>
<span class="normal"> 68</span>
<span class="normal"> 69</span>
<span class="normal"> 70</span>
<span class="normal"> 71</span>
<span class="normal"> 72</span>
<span class="normal"> 73</span>
<span class="normal"> 74</span>
<span class="normal"> 75</span>
<span class="normal"> 76</span>
<span class="normal"> 77</span>
<span class="normal"> 78</span>
<span class="normal"> 79</span>
<span class="normal"> 80</span>
<span class="normal"> 81</span>
<span class="normal"> 82</span>
<span class="normal"> 83</span>
<span class="normal"> 84</span>
<span class="normal"> 85</span>
<span class="normal"> 86</span>
<span class="normal"> 87</span>
<span class="normal"> 88</span>
<span class="normal"> 89</span>
<span class="normal"> 90</span>
<span class="normal"> 91</span>
<span class="normal"> 92</span>
<span class="normal"> 93</span>
<span class="normal"> 94</span>
<span class="normal"> 95</span>
<span class="normal"> 96</span>
<span class="normal"> 97</span>
<span class="normal"> 98</span>
<span class="normal"> 99</span>
<span class="normal">100</span>
<span class="normal">101</span>
<span class="normal">102</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">test_license_tab_input_form_and_check_alert</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</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"> browser: фикстура для работы с браузером.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span><span class="w"> </span><span class="nf">gen_test_data</span><span class="p">():</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Генерация тестовых данных для проверки формы ввода лицензии.</span>
<span class="sd"> Returns:</span>
<span class="sd"> list: Список тестовых строк для проверки.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">data</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">3</span><span class="p">):</span>
<span class="n">data</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">uuid</span><span class="o">.</span><span class="n">uuid4</span><span class="p">()</span><span class="o">.</span><span class="n">hex</span><span class="p">)</span>
<span class="n">lowercase_str</span> <span class="o">=</span> <span class="n">uuid</span><span class="o">.</span><span class="n">uuid4</span><span class="p">()</span><span class="o">.</span><span class="n">hex</span>
<span class="n">data</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">lowercase_str</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
<span class="n">data</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">lowercase_str</span> <span class="o">+</span> <span class="s2">&quot;fffffffff&quot;</span><span class="p">)</span>
<span class="n">data</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;0&quot;</span><span class="p">)</span>
<span class="n">data</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;000000000000000000000000000000000000000000000000&quot;</span><span class="p">)</span>
<span class="n">data</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;-1&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">data</span>
<span class="c1"># Вкладка лицензий открыта</span>
<span class="n">lt</span> <span class="o">=</span> <span class="n">LicenseTab</span><span class="p">(</span><span class="n">browser</span><span class="p">)</span>
<span class="c1"># Проверка наличия пустой формы ввода лицензии</span>
<span class="n">lt</span><span class="o">.</span><span class="n">should_be_empty_input_form</span><span class="p">()</span>
<span class="c1"># Ввод пустой строки</span>
<span class="n">lt</span><span class="o">.</span><span class="n">fill_license_input_form</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
<span class="c1"># Проверка окна с ошибкой</span>
<span class="n">lt</span><span class="o">.</span><span class="n">should_be_error_alert_window_with_text</span><span class="p">(</span><span class="s2">&quot;Неверный лицензионный ключ&quot;</span><span class="p">)</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">gen_test_data</span><span class="p">()</span>
<span class="k">for</span> <span class="n">data_string</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span>
<span class="c1"># Ввод некорректного значения</span>
<span class="n">lt</span><span class="o">.</span><span class="n">fill_license_input_form</span><span class="p">(</span><span class="n">data_string</span><span class="p">)</span>
<span class="c1"># Проверка окна с ошибкой</span>
<span class="n">lt</span><span class="o">.</span><span class="n">should_be_error_alert_window_with_text</span><span class="p">(</span><span class="s2">&quot;Ошибка обновления лицензии&quot;</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="tests.e2e.test_license_tab.TestLisenceTab.test_lisence_tab_content" class="doc doc-heading">
<code class="highlight language-python"><span class="n">test_lisence_tab_content</span><span class="p">(</span><span class="n">browser</span><span class="p">)</span></code>
</h3>
<div class="doc doc-contents ">
<p>Тест содержимого вкладки 'Лицензии'.</p>
<p>Проверяет корректность отображения содержимого вкладки.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>browser</code>
</td>
<td>
</td>
<td>
<div class="doc-md-description">
<p>фикстура для работы с браузером.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>tests\e2e\test_license_tab.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">44</span>
<span class="normal">42</span>
<span class="normal">43</span>
<span class="normal">44</span>
<span class="normal">45</span>
<span class="normal">46</span>
<span class="normal">47</span>
@ -2321,18 +1856,390 @@
<span class="normal">53</span>
<span class="normal">54</span>
<span class="normal">55</span>
<span class="normal">56</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">test_lisence_tab_content</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Тест содержимого вкладки &#39;Лицензии&#39;.</span>
<span class="normal">56</span>
<span class="normal">57</span>
<span class="normal">58</span>
<span class="normal">59</span>
<span class="normal">60</span>
<span class="normal">61</span>
<span class="normal">62</span>
<span class="normal">63</span>
<span class="normal">64</span>
<span class="normal">65</span>
<span class="normal">66</span>
<span class="normal">67</span>
<span class="normal">68</span>
<span class="normal">69</span>
<span class="normal">70</span>
<span class="normal">71</span>
<span class="normal">72</span>
<span class="normal">73</span>
<span class="normal">74</span>
<span class="normal">75</span>
<span class="normal">76</span>
<span class="normal">77</span>
<span class="normal">78</span>
<span class="normal">79</span>
<span class="normal">80</span>
<span class="normal">81</span>
<span class="normal">82</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">TestLicenseTab</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Класс тестов для проверки вкладки &#39;Лицензии&#39;.&quot;&quot;&quot;</span>
<span class="sd"> Проверяет корректность отображения содержимого вкладки.</span>
<span class="nd">@pytest</span><span class="o">.</span><span class="n">fixture</span><span class="p">(</span><span class="n">scope</span><span class="o">=</span><span class="s2">&quot;function&quot;</span><span class="p">,</span> <span class="n">autouse</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">setup</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</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"> browser: Экземпляр страницы Playwright.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">lp</span> <span class="o">=</span> <span class="n">LoginPage</span><span class="p">(</span><span class="n">browser</span><span class="p">)</span>
<span class="n">lp</span><span class="o">.</span><span class="n">do_login</span><span class="p">()</span>
<span class="n">mp</span> <span class="o">=</span> <span class="n">MainPage</span><span class="p">(</span><span class="n">browser</span><span class="p">)</span>
<span class="n">mp</span><span class="o">.</span><span class="n">should_be_navigation_panel</span><span class="p">()</span>
<span class="n">mp</span><span class="o">.</span><span class="n">click_main_navigation_panel_item</span><span class="p">(</span><span class="s2">&quot;Настройки&quot;</span><span class="p">)</span>
<span class="n">mp</span><span class="o">.</span><span class="n">click_configuration_navigation_panel_item</span><span class="p">(</span><span class="s2">&quot;Обслуживание и диагностика&quot;</span><span class="p">)</span>
<span class="n">mp</span><span class="o">.</span><span class="n">click_configuration_navigation_panel_item</span><span class="p">(</span><span class="s2">&quot;Лицензии&quot;</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">test_lisence_tab_content</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</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;Проверяет содержимое вкладки &#39;Лицензии&#39;.</span>
<span class="sd"> Args:</span>
<span class="sd"> browser: Экземпляр страницы Playwright.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">lt</span> <span class="o">=</span> <span class="n">LicenseTab</span><span class="p">(</span><span class="n">browser</span><span class="p">)</span>
<span class="n">lt</span><span class="o">.</span><span class="n">check_content</span><span class="p">()</span>
<span class="k">def</span><span class="w"> </span><span class="nf">test_license_tab_input_form_and_check_alert</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</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"> browser: Экземпляр страницы Playwright.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span><span class="w"> </span><span class="nf">gen_test_data</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">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;Генерирует тестовые данные для проверки формы.</span>
<span class="sd"> Returns:</span>
<span class="sd"> List[str]: Список тестовых строк лицензий.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">data</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">3</span><span class="p">):</span>
<span class="n">data</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">uuid</span><span class="o">.</span><span class="n">uuid4</span><span class="p">()</span><span class="o">.</span><span class="n">hex</span><span class="p">)</span>
<span class="n">lowercase_str</span> <span class="o">=</span> <span class="n">uuid</span><span class="o">.</span><span class="n">uuid4</span><span class="p">()</span><span class="o">.</span><span class="n">hex</span>
<span class="n">data</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">lowercase_str</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
<span class="n">data</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">lowercase_str</span> <span class="o">+</span> <span class="s2">&quot;fffffffff&quot;</span><span class="p">)</span>
<span class="n">data</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;0&quot;</span><span class="p">)</span>
<span class="n">data</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;000000000000000000000000000000000000000000000000&quot;</span><span class="p">)</span>
<span class="n">data</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;-1&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">data</span>
<span class="n">lt</span> <span class="o">=</span> <span class="n">LicenseTab</span><span class="p">(</span><span class="n">browser</span><span class="p">)</span>
<span class="n">lt</span><span class="o">.</span><span class="n">should_be_empty_input_form</span><span class="p">()</span>
<span class="n">lt</span><span class="o">.</span><span class="n">fill_license_input_form</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
<span class="n">lt</span><span class="o">.</span><span class="n">should_be_error_alert_window_with_text</span><span class="p">(</span><span class="s2">&quot;Неверный лицензионный ключ&quot;</span><span class="p">)</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">gen_test_data</span><span class="p">()</span>
<span class="k">for</span> <span class="n">data_string</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span>
<span class="n">lt</span><span class="o">.</span><span class="n">fill_license_input_form</span><span class="p">(</span><span class="n">data_string</span><span class="p">)</span>
<span class="n">lt</span><span class="o">.</span><span class="n">should_be_error_alert_window_with_text</span><span class="p">(</span><span class="s2">&quot;Ошибка обновления лицензии&quot;</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
<div class="doc doc-children">
<div class="doc doc-object doc-function">
<h3 id="tests.e2e.test_license_tab.TestLicenseTab.setup" class="doc doc-heading">
<code class="highlight language-python"><span class="n">setup</span><span class="p">(</span><span class="n">browser</span><span class="p">)</span></code>
</h3>
<div class="doc doc-contents ">
<p>Настраивает тестовое окружение перед каждым тестом.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>browser</code>
</td>
<td>
<code><span title="playwright.sync_api.Page">Page</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Экземпляр страницы Playwright.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>tests\e2e\test_license_tab.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">18</span>
<span class="normal">19</span>
<span class="normal">20</span>
<span class="normal">21</span>
<span class="normal">22</span>
<span class="normal">23</span>
<span class="normal">24</span>
<span class="normal">25</span>
<span class="normal">26</span>
<span class="normal">27</span>
<span class="normal">28</span>
<span class="normal">29</span>
<span class="normal">30</span>
<span class="normal">31</span>
<span class="normal">32</span>
<span class="normal">33</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="nd">@pytest</span><span class="o">.</span><span class="n">fixture</span><span class="p">(</span><span class="n">scope</span><span class="o">=</span><span class="s2">&quot;function&quot;</span><span class="p">,</span> <span class="n">autouse</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">setup</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</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"> browser: фикстура для работы с браузером.</span>
<span class="sd"> browser: Экземпляр страницы Playwright.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># Вкладка лицензий открыта</span>
<span class="n">lt</span> <span class="o">=</span> <span class="n">LicenseTab</span><span class="p">(</span><span class="n">browser</span><span class="p">)</span>
<span class="c1"># Проверка содержимого таблицы статусов сервисов</span>
<span class="n">lp</span> <span class="o">=</span> <span class="n">LoginPage</span><span class="p">(</span><span class="n">browser</span><span class="p">)</span>
<span class="n">lp</span><span class="o">.</span><span class="n">do_login</span><span class="p">()</span>
<span class="n">mp</span> <span class="o">=</span> <span class="n">MainPage</span><span class="p">(</span><span class="n">browser</span><span class="p">)</span>
<span class="n">mp</span><span class="o">.</span><span class="n">should_be_navigation_panel</span><span class="p">()</span>
<span class="n">mp</span><span class="o">.</span><span class="n">click_main_navigation_panel_item</span><span class="p">(</span><span class="s2">&quot;Настройки&quot;</span><span class="p">)</span>
<span class="n">mp</span><span class="o">.</span><span class="n">click_configuration_navigation_panel_item</span><span class="p">(</span><span class="s2">&quot;Обслуживание и диагностика&quot;</span><span class="p">)</span>
<span class="n">mp</span><span class="o">.</span><span class="n">click_configuration_navigation_panel_item</span><span class="p">(</span><span class="s2">&quot;Лицензии&quot;</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="tests.e2e.test_license_tab.TestLicenseTab.test_license_tab_input_form_and_check_alert" class="doc doc-heading">
<code class="highlight language-python"><span class="n">test_license_tab_input_form_and_check_alert</span><span class="p">(</span><span class="n">browser</span><span class="p">)</span></code>
</h3>
<div class="doc doc-contents ">
<p>Проверяет форму ввода лицензии и отображение алертов.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>browser</code>
</td>
<td>
<code><span title="playwright.sync_api.Page">Page</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Экземпляр страницы Playwright.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>tests\e2e\test_license_tab.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">45</span>
<span class="normal">46</span>
<span class="normal">47</span>
<span class="normal">48</span>
<span class="normal">49</span>
<span class="normal">50</span>
<span class="normal">51</span>
<span class="normal">52</span>
<span class="normal">53</span>
<span class="normal">54</span>
<span class="normal">55</span>
<span class="normal">56</span>
<span class="normal">57</span>
<span class="normal">58</span>
<span class="normal">59</span>
<span class="normal">60</span>
<span class="normal">61</span>
<span class="normal">62</span>
<span class="normal">63</span>
<span class="normal">64</span>
<span class="normal">65</span>
<span class="normal">66</span>
<span class="normal">67</span>
<span class="normal">68</span>
<span class="normal">69</span>
<span class="normal">70</span>
<span class="normal">71</span>
<span class="normal">72</span>
<span class="normal">73</span>
<span class="normal">74</span>
<span class="normal">75</span>
<span class="normal">76</span>
<span class="normal">77</span>
<span class="normal">78</span>
<span class="normal">79</span>
<span class="normal">80</span>
<span class="normal">81</span>
<span class="normal">82</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">test_license_tab_input_form_and_check_alert</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</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"> browser: Экземпляр страницы Playwright.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span><span class="w"> </span><span class="nf">gen_test_data</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">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;Генерирует тестовые данные для проверки формы.</span>
<span class="sd"> Returns:</span>
<span class="sd"> List[str]: Список тестовых строк лицензий.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">data</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">3</span><span class="p">):</span>
<span class="n">data</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">uuid</span><span class="o">.</span><span class="n">uuid4</span><span class="p">()</span><span class="o">.</span><span class="n">hex</span><span class="p">)</span>
<span class="n">lowercase_str</span> <span class="o">=</span> <span class="n">uuid</span><span class="o">.</span><span class="n">uuid4</span><span class="p">()</span><span class="o">.</span><span class="n">hex</span>
<span class="n">data</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">lowercase_str</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
<span class="n">data</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">lowercase_str</span> <span class="o">+</span> <span class="s2">&quot;fffffffff&quot;</span><span class="p">)</span>
<span class="n">data</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;0&quot;</span><span class="p">)</span>
<span class="n">data</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;000000000000000000000000000000000000000000000000&quot;</span><span class="p">)</span>
<span class="n">data</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;-1&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">data</span>
<span class="n">lt</span> <span class="o">=</span> <span class="n">LicenseTab</span><span class="p">(</span><span class="n">browser</span><span class="p">)</span>
<span class="n">lt</span><span class="o">.</span><span class="n">should_be_empty_input_form</span><span class="p">()</span>
<span class="n">lt</span><span class="o">.</span><span class="n">fill_license_input_form</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
<span class="n">lt</span><span class="o">.</span><span class="n">should_be_error_alert_window_with_text</span><span class="p">(</span><span class="s2">&quot;Неверный лицензионный ключ&quot;</span><span class="p">)</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">gen_test_data</span><span class="p">()</span>
<span class="k">for</span> <span class="n">data_string</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span>
<span class="n">lt</span><span class="o">.</span><span class="n">fill_license_input_form</span><span class="p">(</span><span class="n">data_string</span><span class="p">)</span>
<span class="n">lt</span><span class="o">.</span><span class="n">should_be_error_alert_window_with_text</span><span class="p">(</span><span class="s2">&quot;Ошибка обновления лицензии&quot;</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="tests.e2e.test_license_tab.TestLicenseTab.test_lisence_tab_content" class="doc doc-heading">
<code class="highlight language-python"><span class="n">test_lisence_tab_content</span><span class="p">(</span><span class="n">browser</span><span class="p">)</span></code>
</h3>
<div class="doc doc-contents ">
<p>Проверяет содержимое вкладки 'Лицензии'.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>browser</code>
</td>
<td>
<code><span title="playwright.sync_api.Page">Page</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Экземпляр страницы Playwright.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>tests\e2e\test_license_tab.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">35</span>
<span class="normal">36</span>
<span class="normal">37</span>
<span class="normal">38</span>
<span class="normal">39</span>
<span class="normal">40</span>
<span class="normal">41</span>
<span class="normal">42</span>
<span class="normal">43</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">test_lisence_tab_content</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</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;Проверяет содержимое вкладки &#39;Лицензии&#39;.</span>
<span class="sd"> Args:</span>
<span class="sd"> browser: Экземпляр страницы Playwright.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">lt</span> <span class="o">=</span> <span class="n">LicenseTab</span><span class="p">(</span><span class="n">browser</span><span class="p">)</span>
<span class="n">lt</span><span class="o">.</span><span class="n">check_content</span><span class="p">()</span>
</code></pre></div></td></tr></table></div>
</details>

View File

@ -1770,6 +1770,10 @@
<a id="tests.e2e.test_login"></a>
<div class="doc doc-contents first">
<p>Модуль тестов авторизации.</p>
<p>Содержит тесты для проверки функционала
входа и выхода из системы.</p>
@ -1801,14 +1805,9 @@
<div class="doc doc-contents ">
<p>Тесты для функционала входа и выхода из системы.</p>
<p>Класс тестов для проверки авторизации.</p>
<details class="атрибуты" open>
<summary>Атрибуты</summary>
<p>browser: фикстура для работы с браузером.</p>
</details>
@ -1816,11 +1815,7 @@
<details class="quote">
<summary>Source code in <code>tests\e2e\test_login.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal">10</span>
<span class="normal">11</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">11</span>
<span class="normal">12</span>
<span class="normal">13</span>
<span class="normal">14</span>
@ -1854,56 +1849,40 @@
<span class="normal">42</span>
<span class="normal">43</span>
<span class="normal">44</span>
<span class="normal">45</span>
<span class="normal">46</span>
<span class="normal">47</span>
<span class="normal">48</span>
<span class="normal">49</span>
<span class="normal">50</span>
<span class="normal">51</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">TestLogin</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Тесты для функционала входа и выхода из системы.</span>
<span class="normal">45</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">TestLogin</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Класс тестов для проверки авторизации.&quot;&quot;&quot;</span>
<span class="sd"> Атрибуты:</span>
<span class="sd"> browser: фикстура для работы с браузером.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span><span class="w"> </span><span class="nf">test_successful_login</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Тест успешного входа в систему.</span>
<span class="sd"> Проверяет корректность авторизации с валидными данными.</span>
<span class="k">def</span><span class="w"> </span><span class="nf">test_successful_login</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</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"> browser: фикстура для работы с браузером.</span>
<span class="sd"> browser: Экземпляр страницы Playwright.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">lp</span> <span class="o">=</span> <span class="n">LoginPage</span><span class="p">(</span><span class="n">browser</span><span class="p">)</span>
<span class="n">lp</span><span class="o">.</span><span class="n">do_login</span><span class="p">()</span>
<span class="k">def</span><span class="w"> </span><span class="nf">test_unsuccessful_login</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Тест неудачного входа в систему.</span>
<span class="sd"> Проверяет обработку невалидных данных при авторизации.</span>
<span class="k">def</span><span class="w"> </span><span class="nf">test_unsuccessful_login</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</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"> browser: фикстура для работы с браузером.</span>
<span class="sd"> browser: Экземпляр страницы Playwright.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">lp</span> <span class="o">=</span> <span class="n">LoginPage</span><span class="p">(</span><span class="n">browser</span><span class="p">)</span>
<span class="n">lp</span><span class="o">.</span><span class="n">do_unsuccessful_login</span><span class="p">()</span>
<span class="k">def</span><span class="w"> </span><span class="nf">test_successful_login_and_logout</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Тест успешного входа и выхода из системы.</span>
<span class="sd"> Проверяет полный цикл авторизации и деавторизации.</span>
<span class="k">def</span><span class="w"> </span><span class="nf">test_successful_login_and_logout</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</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"> browser: фикстура для работы с браузером.</span>
<span class="sd"> browser: Экземпляр страницы Playwright.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">lp</span> <span class="o">=</span> <span class="n">LoginPage</span><span class="p">(</span><span class="n">browser</span><span class="p">)</span>
<span class="n">lp</span><span class="o">.</span><span class="n">do_login</span><span class="p">()</span>
<span class="c1"># Переход на главную страницу</span>
<span class="n">mp</span> <span class="o">=</span> <span class="n">MainPage</span><span class="p">(</span><span class="n">browser</span><span class="p">)</span>
<span class="c1"># Выполнение выхода из системы</span>
<span class="n">mp</span><span class="o">.</span><span class="n">do_logout</span><span class="p">()</span>
</code></pre></div></td></tr></table></div>
</details>
@ -1931,8 +1910,7 @@
<div class="doc doc-contents ">
<p>Тест успешного входа в систему.</p>
<p>Проверяет корректность авторизации с валидными данными.</p>
<p>Проверяет успешный вход в систему.</p>
<p><span class="doc-section-title">Parameters:</span></p>
@ -1951,10 +1929,11 @@
<code>browser</code>
</td>
<td>
<code><span title="playwright.sync_api.Page">Page</span></code>
</td>
<td>
<div class="doc-md-description">
<p>фикстура для работы с браузером.</p>
<p>Экземпляр страницы Playwright.</p>
</div>
</td>
<td>
@ -1975,15 +1954,13 @@
<span class="normal">19</span>
<span class="normal">20</span>
<span class="normal">21</span>
<span class="normal">22</span>
<span class="normal">23</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">test_successful_login</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Тест успешного входа в систему.</span>
<span class="sd"> Проверяет корректность авторизации с валидными данными.</span>
<span class="normal">22</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">test_successful_login</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</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"> browser: фикстура для работы с браузером.</span>
<span class="sd"> browser: Экземпляр страницы Playwright.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">lp</span> <span class="o">=</span> <span class="n">LoginPage</span><span class="p">(</span><span class="n">browser</span><span class="p">)</span>
<span class="n">lp</span><span class="o">.</span><span class="n">do_login</span><span class="p">()</span>
</code></pre></div></td></tr></table></div>
@ -2003,8 +1980,7 @@
<div class="doc doc-contents ">
<p>Тест успешного входа и выхода из системы.</p>
<p>Проверяет полный цикл авторизации и деавторизации.</p>
<p>Проверяет успешный вход и выход из системы.</p>
<p><span class="doc-section-title">Parameters:</span></p>
@ -2023,10 +1999,11 @@
<code>browser</code>
</td>
<td>
<code><span title="playwright.sync_api.Page">Page</span></code>
</td>
<td>
<div class="doc-md-description">
<p>фикстура для работы с браузером.</p>
<p>Экземпляр страницы Playwright.</p>
</div>
</td>
<td>
@ -2039,7 +2016,9 @@
<details class="quote">
<summary>Source code in <code>tests\e2e\test_login.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">36</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">34</span>
<span class="normal">35</span>
<span class="normal">36</span>
<span class="normal">37</span>
<span class="normal">38</span>
<span class="normal">39</span>
@ -2048,27 +2027,17 @@
<span class="normal">42</span>
<span class="normal">43</span>
<span class="normal">44</span>
<span class="normal">45</span>
<span class="normal">46</span>
<span class="normal">47</span>
<span class="normal">48</span>
<span class="normal">49</span>
<span class="normal">50</span>
<span class="normal">51</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">test_successful_login_and_logout</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Тест успешного входа и выхода из системы.</span>
<span class="sd"> Проверяет полный цикл авторизации и деавторизации.</span>
<span class="normal">45</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">test_successful_login_and_logout</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</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"> browser: фикстура для работы с браузером.</span>
<span class="sd"> browser: Экземпляр страницы Playwright.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">lp</span> <span class="o">=</span> <span class="n">LoginPage</span><span class="p">(</span><span class="n">browser</span><span class="p">)</span>
<span class="n">lp</span><span class="o">.</span><span class="n">do_login</span><span class="p">()</span>
<span class="c1"># Переход на главную страницу</span>
<span class="n">mp</span> <span class="o">=</span> <span class="n">MainPage</span><span class="p">(</span><span class="n">browser</span><span class="p">)</span>
<span class="c1"># Выполнение выхода из системы</span>
<span class="n">mp</span><span class="o">.</span><span class="n">do_logout</span><span class="p">()</span>
</code></pre></div></td></tr></table></div>
</details>
@ -2087,8 +2056,7 @@
<div class="doc doc-contents ">
<p>Тест неудачного входа в систему.</p>
<p>Проверяет обработку невалидных данных при авторизации.</p>
<p>Проверяет вход с неверными учетными данными.</p>
<p><span class="doc-section-title">Parameters:</span></p>
@ -2107,10 +2075,11 @@
<code>browser</code>
</td>
<td>
<code><span title="playwright.sync_api.Page">Page</span></code>
</td>
<td>
<div class="doc-md-description">
<p>фикстура для работы с браузером.</p>
<p>Экземпляр страницы Playwright.</p>
</div>
</td>
<td>
@ -2123,23 +2092,21 @@
<details class="quote">
<summary>Source code in <code>tests\e2e\test_login.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">25</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">24</span>
<span class="normal">25</span>
<span class="normal">26</span>
<span class="normal">27</span>
<span class="normal">28</span>
<span class="normal">29</span>
<span class="normal">30</span>
<span class="normal">31</span>
<span class="normal">32</span>
<span class="normal">33</span>
<span class="normal">34</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">test_unsuccessful_login</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Тест неудачного входа в систему.</span>
<span class="sd"> Проверяет обработку невалидных данных при авторизации.</span>
<span class="normal">32</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">test_unsuccessful_login</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</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"> browser: фикстура для работы с браузером.</span>
<span class="sd"> browser: Экземпляр страницы Playwright.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">lp</span> <span class="o">=</span> <span class="n">LoginPage</span><span class="p">(</span><span class="n">browser</span><span class="p">)</span>
<span class="n">lp</span><span class="o">.</span><span class="n">do_unsuccessful_login</span><span class="p">()</span>
</code></pre></div></td></tr></table></div>

View File

@ -1770,6 +1770,10 @@
<a id="tests.e2e.test_service_status_tab"></a>
<div class="doc doc-contents first">
<p>Модуль тестов вкладки 'Статус обслуживания'.</p>
<p>Содержит тесты для проверки отображения и функциональности
элементов вкладки статусов сервисов.</p>
@ -1801,8 +1805,7 @@
<div class="doc doc-contents ">
<p>Набор тестов для вкладки 'Статус обслуживания'.</p>
<p>Проверяет корректность отображения и функциональность элементов вкладки.</p>
<p>Класс тестов для проверки вкладки 'Статус обслуживания'.</p>
@ -1812,15 +1815,7 @@
<details class="quote">
<summary>Source code in <code>tests\e2e\test_service_status_tab.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal">10</span>
<span class="normal">11</span>
<span class="normal">12</span>
<span class="normal">13</span>
<span class="normal">14</span>
<span class="normal">15</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">15</span>
<span class="normal">16</span>
<span class="normal">17</span>
<span class="normal">18</span>
@ -1885,20 +1880,20 @@
<span class="normal">77</span>
<span class="normal">78</span>
<span class="normal">79</span>
<span class="normal">80</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">TestServiceStatusTab</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Набор тестов для вкладки &#39;Статус обслуживания&#39;.</span>
<span class="sd"> Проверяет корректность отображения и функциональность элементов вкладки.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="normal">80</span>
<span class="normal">81</span>
<span class="normal">82</span>
<span class="normal">83</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">TestServiceStatusTab</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Класс тестов для проверки вкладки &#39;Статус обслуживания&#39;.&quot;&quot;&quot;</span>
<span class="nd">@pytest</span><span class="o">.</span><span class="n">fixture</span><span class="p">(</span><span class="n">scope</span><span class="o">=</span><span class="s2">&quot;function&quot;</span><span class="p">,</span> <span class="n">autouse</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">setup</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Фикстура для подготовки тестового окружения.</span>
<span class="k">def</span><span class="w"> </span><span class="nf">setup</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</span><span class="p">:</span> <span class="n">Page</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Подготавливает тестовое окружение.</span>
<span class="sd"> Выполняет:</span>
<span class="sd"> 1. Авторизацию в системе</span>
<span class="sd"> 2. Переход на вкладку &#39;Статус обслуживания&#39;</span>
<span class="sd"> Args:</span>
<span class="sd"> browser: Экземпляр страницы Playwright.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">lp</span> <span class="o">=</span> <span class="n">LoginPage</span><span class="p">(</span><span class="n">browser</span><span class="p">)</span>
<span class="n">lp</span><span class="o">.</span><span class="n">do_login</span><span class="p">()</span>
@ -1917,14 +1912,13 @@
<span class="c1"># Клик по пункту &#39;Статус обслуживания&#39; в панели навигации обслуживания</span>
<span class="n">mp</span><span class="o">.</span><span class="n">click_maintenance_navigation_panel_item</span><span class="p">(</span><span class="s2">&quot;Статус обслуживания&quot;</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">test_service_status_tab_content</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Тест содержимого вкладки &#39;Статус обслуживания&#39;.</span>
<span class="k">def</span><span class="w"> </span><span class="nf">test_service_status_tab_content</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</span><span class="p">:</span> <span class="n">Page</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Проверяет содержимое вкладки &#39;Статус обслуживания&#39;.</span>
<span class="sd"> Проверяет:</span>
<span class="sd"> 1. Наличие тулбара</span>
<span class="sd"> 2. Наличие таблицы сервисов</span>
<span class="sd"> 3. Корректность содержимого таблицы</span>
<span class="sd"> Args:</span>
<span class="sd"> browser: Экземпляр страницы Playwright.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">sst</span> <span class="o">=</span> <span class="n">ServiceStatusTab</span><span class="p">(</span><span class="n">browser</span><span class="p">)</span>
<span class="c1"># Проверка тулбара вкладки</span>
@ -1936,14 +1930,13 @@
<span class="c1"># Проверка содержимого таблицы сервисов</span>
<span class="n">sst</span><span class="o">.</span><span class="n">check_services_table_content</span><span class="p">()</span>
<span class="k">def</span><span class="w"> </span><span class="nf">test_service_status_table_row_highlighting</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Тест выделения строк в таблице сервисов.</span>
<span class="k">def</span><span class="w"> </span><span class="nf">test_service_status_table_row_highlighting</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</span><span class="p">:</span> <span class="n">Page</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Проверяет выделение строк в таблице сервисов.</span>
<span class="sd"> Проверяет выделение строк:</span>
<span class="sd"> 1. Первой строки</span>
<span class="sd"> 2. Последней строки</span>
<span class="sd"> 3. Строки в середине таблицы</span>
<span class="sd"> Args:</span>
<span class="sd"> browser: Экземпляр страницы Playwright.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">sst</span> <span class="o">=</span> <span class="n">ServiceStatusTab</span><span class="p">(</span><span class="n">browser</span><span class="p">)</span>
<span class="c1"># Проверка тулбара вкладки</span>
@ -1985,20 +1978,43 @@
<div class="doc doc-contents ">
<p>Фикстура для подготовки тестового окружения.</p>
<p>Выполняет:
1. Авторизацию в системе
2. Переход на вкладку 'Статус обслуживания'</p>
<p>Подготавливает тестовое окружение.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>browser</code>
</td>
<td>
<code><span title="playwright.sync_api.Page">Page</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Экземпляр страницы Playwright.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>tests\e2e\test_service_status_tab.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">13</span>
<span class="normal">14</span>
<span class="normal">15</span>
<span class="normal">16</span>
<span class="normal">17</span>
<span class="normal">18</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">18</span>
<span class="normal">19</span>
<span class="normal">20</span>
<span class="normal">21</span>
@ -2017,14 +2033,19 @@
<span class="normal">34</span>
<span class="normal">35</span>
<span class="normal">36</span>
<span class="normal">37</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="nd">@pytest</span><span class="o">.</span><span class="n">fixture</span><span class="p">(</span><span class="n">scope</span><span class="o">=</span><span class="s2">&quot;function&quot;</span><span class="p">,</span> <span class="n">autouse</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">setup</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Фикстура для подготовки тестового окружения.</span>
<span class="normal">37</span>
<span class="normal">38</span>
<span class="normal">39</span>
<span class="normal">40</span>
<span class="normal">41</span>
<span class="normal">42</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="nd">@pytest</span><span class="o">.</span><span class="n">fixture</span><span class="p">(</span><span class="n">scope</span><span class="o">=</span><span class="s2">&quot;function&quot;</span><span class="p">,</span> <span class="n">autouse</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">setup</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</span><span class="p">:</span> <span class="n">Page</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Подготавливает тестовое окружение.</span>
<span class="sd"> Выполняет:</span>
<span class="sd"> 1. Авторизацию в системе</span>
<span class="sd"> 2. Переход на вкладку &#39;Статус обслуживания&#39;</span>
<span class="sd"> Args:</span>
<span class="sd"> browser: Экземпляр страницы Playwright.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">lp</span> <span class="o">=</span> <span class="n">LoginPage</span><span class="p">(</span><span class="n">browser</span><span class="p">)</span>
<span class="n">lp</span><span class="o">.</span><span class="n">do_login</span><span class="p">()</span>
@ -2059,21 +2080,43 @@
<div class="doc doc-contents ">
<p>Тест содержимого вкладки 'Статус обслуживания'.</p>
<p>Проверяет:
1. Наличие тулбара
2. Наличие таблицы сервисов
3. Корректность содержимого таблицы</p>
<p>Проверяет содержимое вкладки 'Статус обслуживания'.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>browser</code>
</td>
<td>
<code><span title="playwright.sync_api.Page">Page</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Экземпляр страницы Playwright.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>tests\e2e\test_service_status_tab.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">39</span>
<span class="normal">40</span>
<span class="normal">41</span>
<span class="normal">42</span>
<span class="normal">43</span>
<span class="normal">44</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">44</span>
<span class="normal">45</span>
<span class="normal">46</span>
<span class="normal">47</span>
@ -2085,14 +2128,17 @@
<span class="normal">53</span>
<span class="normal">54</span>
<span class="normal">55</span>
<span class="normal">56</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">test_service_status_tab_content</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Тест содержимого вкладки &#39;Статус обслуживания&#39;.</span>
<span class="normal">56</span>
<span class="normal">57</span>
<span class="normal">58</span>
<span class="normal">59</span>
<span class="normal">60</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">test_service_status_tab_content</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</span><span class="p">:</span> <span class="n">Page</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Проверяет содержимое вкладки &#39;Статус обслуживания&#39;.</span>
<span class="sd"> Проверяет:</span>
<span class="sd"> 1. Наличие тулбара</span>
<span class="sd"> 2. Наличие таблицы сервисов</span>
<span class="sd"> 3. Корректность содержимого таблицы</span>
<span class="sd"> Args:</span>
<span class="sd"> browser: Экземпляр страницы Playwright.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">sst</span> <span class="o">=</span> <span class="n">ServiceStatusTab</span><span class="p">(</span><span class="n">browser</span><span class="p">)</span>
<span class="c1"># Проверка тулбара вкладки</span>
@ -2120,20 +2166,43 @@
<div class="doc doc-contents ">
<p>Тест выделения строк в таблице сервисов.</p>
<p>Проверяет выделение строк:
1. Первой строки
2. Последней строки
3. Строки в середине таблицы</p>
<p>Проверяет выделение строк в таблице сервисов.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>browser</code>
</td>
<td>
<code><span title="playwright.sync_api.Page">Page</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Экземпляр страницы Playwright.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>tests\e2e\test_service_status_tab.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">58</span>
<span class="normal">59</span>
<span class="normal">60</span>
<span class="normal">61</span>
<span class="normal">62</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">62</span>
<span class="normal">63</span>
<span class="normal">64</span>
<span class="normal">65</span>
@ -2151,14 +2220,16 @@
<span class="normal">77</span>
<span class="normal">78</span>
<span class="normal">79</span>
<span class="normal">80</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">test_service_status_table_row_highlighting</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Тест выделения строк в таблице сервисов.</span>
<span class="normal">80</span>
<span class="normal">81</span>
<span class="normal">82</span>
<span class="normal">83</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">test_service_status_table_row_highlighting</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">browser</span><span class="p">:</span> <span class="n">Page</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Проверяет выделение строк в таблице сервисов.</span>
<span class="sd"> Проверяет выделение строк:</span>
<span class="sd"> 1. Первой строки</span>
<span class="sd"> 2. Последней строки</span>
<span class="sd"> 3. Строки в середине таблицы</span>
<span class="sd"> Args:</span>
<span class="sd"> browser: Экземпляр страницы Playwright.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">sst</span> <span class="o">=</span> <span class="n">ServiceStatusTab</span><span class="p">(</span><span class="n">browser</span><span class="p">)</span>
<span class="c1"># Проверка тулбара вкладки</span>

File diff suppressed because it is too large Load Diff

View File

@ -1541,21 +1541,6 @@
</span>
</a>
<nav class="md-nav" aria-label="fix_python_project">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#tools.fix_python_project--python-project-fixer-fix_python_projectpy" class="md-nav__link">
<span class="md-ellipsis">
Python Project Fixer (fix_python_project.py)
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
@ -1748,21 +1733,6 @@
</span>
</a>
<nav class="md-nav" aria-label="fix_python_project">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#tools.fix_python_project--python-project-fixer-fix_python_projectpy" class="md-nav__link">
<span class="md-ellipsis">
Python Project Fixer (fix_python_project.py)
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
@ -1868,11 +1838,11 @@
<a id="tools.fix_python_project"></a>
<div class="doc doc-contents first">
<h3 id="tools.fix_python_project--python-project-fixer-fix_python_projectpy">Python Project Fixer (fix_python_project.py)</h3>
<p>Автоматически исправляет структуру Python-проекта:
1. Удаляет BOM-маркеры из текстовых файлов (.py, .json, .txt)
2. Создаёт недостающие <strong>init</strong>.py файлы (игнорируя служебные папки)
3. Сохраняет подробный лог всех выполненных операций</p>
<p>Модуль исправления структуры Python-проекта.</p>
<p>Автоматически выполняет:
1. Удаление BOM-маркеров из файлов
2. Создание недостающих <strong>init</strong>.py
3. Логирование всех операций</p>
<p>Использование: python fix_python_project.py [путь_к_проекту]</p>
@ -1906,13 +1876,13 @@
<div class="doc doc-contents ">
<p>Основной класс для исправления структуры Python-проекта.</p>
<p>Исправляет структуру Python-проекта.</p>
<details class="атрибуты" open>
<summary>Атрибуты</summary>
<p>root_dir (str): Корневая директория проекта.
log (List[str]): Список записей лога выполненных операций.</p>
<p>root_dir: Корневая директория проекта.
log: Лог выполненных операций.</p>
</details>
@ -1922,7 +1892,8 @@ log (List[str]): Список записей лога выполненных о
<details class="quote">
<summary>Source code in <code>tools\fix_python_project.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 26</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 25</span>
<span class="normal"> 26</span>
<span class="normal"> 27</span>
<span class="normal"> 28</span>
<span class="normal"> 29</span>
@ -2042,37 +2013,39 @@ log (List[str]): Список записей лога выполненных о
<span class="normal">143</span>
<span class="normal">144</span>
<span class="normal">145</span>
<span class="normal">146</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">ProjectFixer</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Основной класс для исправления структуры Python-проекта.</span>
<span class="normal">146</span>
<span class="normal">147</span>
<span class="normal">148</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">ProjectFixer</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Исправляет структуру Python-проекта.</span>
<span class="sd"> Атрибуты:</span>
<span class="sd"> root_dir (str): Корневая директория проекта.</span>
<span class="sd"> log (List[str]): Список записей лога выполненных операций.</span>
<span class="sd"> root_dir: Корневая директория проекта.</span>
<span class="sd"> log: Лог выполненных операций.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<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">root_dir</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s1">&#39;.&#39;</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Инициализирует экземпляр ProjectFixer.</span>
<span class="sd"> Args:</span>
<span class="sd"> root_dir (str): Корневая директория проекта. По умолчанию текущая директория (&#39;.&#39;).</span>
<span class="sd"> root_dir: Корневая директория проекта. По умолчанию &#39;.&#39;.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">root_dir</span> <span class="o">=</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="n">root_dir</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">def</span><span class="w"> </span><span class="nf">remove_bom</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filepath</span><span class="p">:</span> <span class="nb">str</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;Удаляет BOM-маркер из файла, если он присутствует.</span>
<span class="sd"> Обрабатывает все файлы, включая находящиеся в tests/.</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Удаляет BOM-маркер из файла.</span>
<span class="sd"> Args:</span>
<span class="sd"> filepath (str): Путь к файлу для обработки.</span>
<span class="sd"> filepath: Путь к файлу.</span>
<span class="sd"> Returns:</span>
<span class="sd"> bool: True, если BOM был удалён, False в противном случае.</span>
<span class="sd"> bool: True если BOM был удалён.</span>
<span class="sd"> Raises:</span>
<span class="sd"> Exception: Если произошла ошибка при чтении/записи файла.</span>
<span class="sd"> Exception: При ошибке чтения/записи.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">filepath</span><span class="p">,</span> <span class="s1">&#39;rb&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
<span class="n">content</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
@ -2087,29 +2060,29 @@ log (List[str]): Список записей лога выполненных о
<span class="k">return</span> <span class="kc">False</span>
<span class="k">def</span><span class="w"> </span><span class="nf">should_skip_init</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dir_path</span><span class="p">:</span> <span class="nb">str</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;Проверяет, нужно ли пропустить создание __init__.py в директории.</span>
<span class="sd"> Игнорирует служебные папки (tests/, .git/ и др.).</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Проверяет нужно ли пропустить директорию.</span>
<span class="sd"> Args:</span>
<span class="sd"> dir_path (str): Путь к проверяемой директории.</span>
<span class="sd"> dir_path: Путь к директории.</span>
<span class="sd"> Returns:</span>
<span class="sd"> bool: True, если директорию следует пропустить.</span>
<span class="sd"> bool: True если директорию нужно пропустить.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">dir_name</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">dir_path</span><span class="p">)</span>
<span class="k">return</span> <span class="p">(</span><span class="n">dir_name</span> <span class="ow">in</span> <span class="n">INIT_IGNORED_DIRS</span> <span class="ow">or</span>
<span class="k">return</span> <span class="p">(</span><span class="n">dir_name</span> <span class="ow">in</span> <span class="n">INIT_IGNORED_DIRS</span> <span class="ow">or</span>
<span class="n">dir_name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">&#39;.&#39;</span><span class="p">))</span>
<span class="k">def</span><span class="w"> </span><span class="nf">needs_init_py</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dir_path</span><span class="p">:</span> <span class="nb">str</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;Определяет, требуется ли создание __init__.py в директории.</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Проверяет нужно ли создать __init__.py.</span>
<span class="sd"> Args:</span>
<span class="sd"> dir_path (str): Путь к проверяемой директории.</span>
<span class="sd"> dir_path: Путь к директории.</span>
<span class="sd"> Returns:</span>
<span class="sd"> bool: True, если __init__.py отсутствует, но требуется.</span>
<span class="sd"> bool: True если __init__.py требуется.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">should_skip_init</span><span class="p">(</span><span class="n">dir_path</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">False</span>
@ -2122,17 +2095,18 @@ log (List[str]): Список записей лога выполненных о
<span class="k">return</span> <span class="kc">False</span>
<span class="k">def</span><span class="w"> </span><span class="nf">create_init_py</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dir_path</span><span class="p">:</span> <span class="nb">str</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;Создаёт файл __init__.py в указанной директории.</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Создаёт файл __init__.py.</span>
<span class="sd"> Args:</span>
<span class="sd"> dir_path (str): Путь к директории для создания __init__.py.</span>
<span class="sd"> dir_path: Путь к директории.</span>
<span class="sd"> Returns:</span>
<span class="sd"> bool: True, если файл был успешно создан.</span>
<span class="sd"> bool: True если файл создан.</span>
<span class="sd"> Raises:</span>
<span class="sd"> Exception: Если произошла ошибка при создании файла.</span>
<span class="sd"> Exception: При ошибке создания.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">init_path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">dir_path</span><span class="p">,</span> <span class="s1">&#39;__init__.py&#39;</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">init_path</span><span class="p">,</span> <span class="s1">&#39;w&#39;</span><span class="p">,</span> <span class="n">encoding</span><span class="o">=</span><span class="s1">&#39;utf-8&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
@ -2144,7 +2118,8 @@ log (List[str]): Список записей лога выполненных о
<span class="k">return</span> <span class="kc">False</span>
<span class="k">def</span><span class="w"> </span><span class="nf">process_directory</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="w"> </span><span class="sd">&quot;&quot;&quot;Рекурсивно обрабатывает проект.&quot;&quot;&quot;</span>
<span class="k">for</span> <span class="n">root</span><span class="p">,</span> <span class="n">dirs</span><span class="p">,</span> <span class="n">files</span> <span class="ow">in</span> <span class="n">os</span><span class="o">.</span><span class="n">walk</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">root_dir</span><span class="p">):</span>
<span class="c1"># Обработка файлов с целевыми расширениями</span>
<span class="k">for</span> <span class="n">file</span> <span class="ow">in</span> <span class="n">files</span><span class="p">:</span>
@ -2156,11 +2131,12 @@ log (List[str]): Список записей лога выполненных о
<span class="bp">self</span><span class="o">.</span><span class="n">create_init_py</span><span class="p">(</span><span class="n">root</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">save_log</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">log_file</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s1">&#39;project_fix.log&#39;</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Сохраняет лог выполненных операций в файл.</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Сохраняет лог операций в файл.</span>
<span class="sd"> Args:</span>
<span class="sd"> log_file (str): Имя файла для сохранения лога. По умолчанию &#39;project_fix.log&#39;.</span>
<span class="sd"> log_file: Имя файла лога. По умолчанию &#39;project_fix.log&#39;.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">log_file</span><span class="p">,</span> <span class="s1">&#39;w&#39;</span><span class="p">,</span> <span class="n">encoding</span><span class="o">=</span><span class="s1">&#39;utf-8&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
<span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="p">))</span>
</code></pre></div></td></tr></table></div>
@ -2212,7 +2188,7 @@ log (List[str]): Список записей лога выполненных о
</td>
<td>
<div class="doc-md-description">
<p>Корневая директория проекта. По умолчанию текущая директория ('.').</p>
<p>Корневая директория проекта. По умолчанию '.'.</p>
</div>
</td>
<td>
@ -2225,7 +2201,8 @@ log (List[str]): Список записей лога выполненных о
<details class="quote">
<summary>Source code in <code>tools\fix_python_project.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">34</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">33</span>
<span class="normal">34</span>
<span class="normal">35</span>
<span class="normal">36</span>
<span class="normal">37</span>
@ -2236,8 +2213,9 @@ log (List[str]): Список записей лога выполненных о
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Инициализирует экземпляр ProjectFixer.</span>
<span class="sd"> Args:</span>
<span class="sd"> root_dir (str): Корневая директория проекта. По умолчанию текущая директория (&#39;.&#39;).</span>
<span class="sd"> root_dir: Корневая директория проекта. По умолчанию &#39;.&#39;.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">root_dir</span> <span class="o">=</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="n">root_dir</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
</code></pre></div></td></tr></table></div>
@ -2257,7 +2235,7 @@ log (List[str]): Список записей лога выполненных о
<div class="doc doc-contents ">
<p>Создаёт файл <strong>init</strong>.py в указанной директории.</p>
<p>Создаёт файл <strong>init</strong>.py.</p>
<p><span class="doc-section-title">Parameters:</span></p>
@ -2280,7 +2258,7 @@ log (List[str]): Список записей лога выполненных о
</td>
<td>
<div class="doc-md-description">
<p>Путь к директории для создания <strong>init</strong>.py.</p>
<p>Путь к директории.</p>
</div>
</td>
<td>
@ -2306,7 +2284,7 @@ log (List[str]): Список записей лога выполненных о
</td>
<td>
<div class="doc-md-description">
<p>True, если файл был успешно создан.</p>
<p>True если файл создан.</p>
</div>
</td>
</tr>
@ -2329,7 +2307,7 @@ log (List[str]): Список записей лога выполненных о
</td>
<td>
<div class="doc-md-description">
<p>Если произошла ошибка при создании файла.</p>
<p>При ошибке создания.</p>
</div>
</td>
</tr>
@ -2339,7 +2317,8 @@ log (List[str]): Список записей лога выполненных о
<details class="quote">
<summary>Source code in <code>tools\fix_python_project.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">105</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">104</span>
<span class="normal">105</span>
<span class="normal">106</span>
<span class="normal">107</span>
<span class="normal">108</span>
@ -2360,17 +2339,18 @@ log (List[str]): Список записей лога выполненных о
<span class="normal">123</span>
<span class="normal">124</span>
<span class="normal">125</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">create_init_py</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dir_path</span><span class="p">:</span> <span class="nb">str</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;Создаёт файл __init__.py в указанной директории.</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Создаёт файл __init__.py.</span>
<span class="sd"> Args:</span>
<span class="sd"> dir_path (str): Путь к директории для создания __init__.py.</span>
<span class="sd"> dir_path: Путь к директории.</span>
<span class="sd"> Returns:</span>
<span class="sd"> bool: True, если файл был успешно создан.</span>
<span class="sd"> bool: True если файл создан.</span>
<span class="sd"> Raises:</span>
<span class="sd"> Exception: Если произошла ошибка при создании файла.</span>
<span class="sd"> Exception: При ошибке создания.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">init_path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">dir_path</span><span class="p">,</span> <span class="s1">&#39;__init__.py&#39;</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">init_path</span><span class="p">,</span> <span class="s1">&#39;w&#39;</span><span class="p">,</span> <span class="n">encoding</span><span class="o">=</span><span class="s1">&#39;utf-8&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
@ -2397,7 +2377,7 @@ log (List[str]): Список записей лога выполненных о
<div class="doc doc-contents ">
<p>Определяет, требуется ли создание <strong>init</strong>.py в директории.</p>
<p>Проверяет нужно ли создать <strong>init</strong>.py.</p>
<p><span class="doc-section-title">Parameters:</span></p>
@ -2420,7 +2400,7 @@ log (List[str]): Список записей лога выполненных о
</td>
<td>
<div class="doc-md-description">
<p>Путь к проверяемой директории.</p>
<p>Путь к директории.</p>
</div>
</td>
<td>
@ -2446,7 +2426,7 @@ log (List[str]): Список записей лога выполненных о
</td>
<td>
<div class="doc-md-description">
<p>True, если <strong>init</strong>.py отсутствует, но требуется.</p>
<p>True если <strong>init</strong>.py требуется.</p>
</div>
</td>
</tr>
@ -2456,7 +2436,9 @@ log (List[str]): Список записей лога выполненных о
<details class="quote">
<summary>Source code in <code>tools\fix_python_project.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 85</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 83</span>
<span class="normal"> 84</span>
<span class="normal"> 85</span>
<span class="normal"> 86</span>
<span class="normal"> 87</span>
<span class="normal"> 88</span>
@ -2473,16 +2455,16 @@ log (List[str]): Список записей лога выполненных о
<span class="normal"> 99</span>
<span class="normal">100</span>
<span class="normal">101</span>
<span class="normal">102</span>
<span class="normal">103</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">needs_init_py</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dir_path</span><span class="p">:</span> <span class="nb">str</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;Определяет, требуется ли создание __init__.py в директории.</span>
<span class="normal">102</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">needs_init_py</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dir_path</span><span class="p">:</span> <span class="nb">str</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;Проверяет нужно ли создать __init__.py.</span>
<span class="sd"> Args:</span>
<span class="sd"> dir_path (str): Путь к проверяемой директории.</span>
<span class="sd"> dir_path: Путь к директории.</span>
<span class="sd"> Returns:</span>
<span class="sd"> bool: True, если __init__.py отсутствует, но требуется.</span>
<span class="sd"> bool: True если __init__.py требуется.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">should_skip_init</span><span class="p">(</span><span class="n">dir_path</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">False</span>
@ -2510,7 +2492,7 @@ log (List[str]): Список записей лога выполненных о
<div class="doc doc-contents ">
<p>Рекурсивно обрабатывает проект, применяя все исправления.</p>
<p>Рекурсивно обрабатывает проект.</p>
<details class="quote">
@ -2525,8 +2507,10 @@ log (List[str]): Список записей лога выполненных о
<span class="normal">134</span>
<span class="normal">135</span>
<span class="normal">136</span>
<span class="normal">137</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">process_directory</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="normal">137</span>
<span class="normal">138</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">process_directory</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="k">for</span> <span class="n">root</span><span class="p">,</span> <span class="n">dirs</span><span class="p">,</span> <span class="n">files</span> <span class="ow">in</span> <span class="n">os</span><span class="o">.</span><span class="n">walk</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">root_dir</span><span class="p">):</span>
<span class="c1"># Обработка файлов с целевыми расширениями</span>
<span class="k">for</span> <span class="n">file</span> <span class="ow">in</span> <span class="n">files</span><span class="p">:</span>
@ -2553,8 +2537,7 @@ log (List[str]): Список записей лога выполненных о
<div class="doc doc-contents ">
<p>Удаляет BOM-маркер из файла, если он присутствует.</p>
<p>Обрабатывает все файлы, включая находящиеся в tests/.</p>
<p>Удаляет BOM-маркер из файла.</p>
<p><span class="doc-section-title">Parameters:</span></p>
@ -2577,7 +2560,7 @@ log (List[str]): Список записей лога выполненных о
</td>
<td>
<div class="doc-md-description">
<p>Путь к файлу для обработки.</p>
<p>Путь к файлу.</p>
</div>
</td>
<td>
@ -2603,7 +2586,7 @@ log (List[str]): Список записей лога выполненных о
</td>
<td>
<div class="doc-md-description">
<p>True, если BOM был удалён, False в противном случае.</p>
<p>True если BOM был удалён.</p>
</div>
</td>
</tr>
@ -2626,7 +2609,7 @@ log (List[str]): Список записей лога выполненных о
</td>
<td>
<div class="doc-md-description">
<p>Если произошла ошибка при чтении/записи файла.</p>
<p>При ошибке чтения/записи.</p>
</div>
</td>
</tr>
@ -2660,21 +2643,19 @@ log (List[str]): Список записей лога выполненных о
<span class="normal">64</span>
<span class="normal">65</span>
<span class="normal">66</span>
<span class="normal">67</span>
<span class="normal">68</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">remove_bom</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filepath</span><span class="p">:</span> <span class="nb">str</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;Удаляет BOM-маркер из файла, если он присутствует.</span>
<span class="sd"> Обрабатывает все файлы, включая находящиеся в tests/.</span>
<span class="normal">67</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">remove_bom</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filepath</span><span class="p">:</span> <span class="nb">str</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;Удаляет BOM-маркер из файла.</span>
<span class="sd"> Args:</span>
<span class="sd"> filepath (str): Путь к файлу для обработки.</span>
<span class="sd"> filepath: Путь к файлу.</span>
<span class="sd"> Returns:</span>
<span class="sd"> bool: True, если BOM был удалён, False в противном случае.</span>
<span class="sd"> bool: True если BOM был удалён.</span>
<span class="sd"> Raises:</span>
<span class="sd"> Exception: Если произошла ошибка при чтении/записи файла.</span>
<span class="sd"> Exception: При ошибке чтения/записи.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">filepath</span><span class="p">,</span> <span class="s1">&#39;rb&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
<span class="n">content</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
@ -2704,7 +2685,7 @@ log (List[str]): Список записей лога выполненных о
<div class="doc doc-contents ">
<p>Сохраняет лог выполненных операций в файл.</p>
<p>Сохраняет лог операций в файл.</p>
<p><span class="doc-section-title">Parameters:</span></p>
@ -2727,7 +2708,7 @@ log (List[str]): Список записей лога выполненных о
</td>
<td>
<div class="doc-md-description">
<p>Имя файла для сохранения лога. По умолчанию 'project_fix.log'.</p>
<p>Имя файла лога. По умолчанию 'project_fix.log'.</p>
</div>
</td>
<td>
@ -2740,19 +2721,21 @@ log (List[str]): Список записей лога выполненных о
<details class="quote">
<summary>Source code in <code>tools\fix_python_project.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">139</span>
<span class="normal">140</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">140</span>
<span class="normal">141</span>
<span class="normal">142</span>
<span class="normal">143</span>
<span class="normal">144</span>
<span class="normal">145</span>
<span class="normal">146</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">save_log</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">log_file</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s1">&#39;project_fix.log&#39;</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Сохраняет лог выполненных операций в файл.</span>
<span class="normal">146</span>
<span class="normal">147</span>
<span class="normal">148</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">save_log</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">log_file</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s1">&#39;project_fix.log&#39;</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Сохраняет лог операций в файл.</span>
<span class="sd"> Args:</span>
<span class="sd"> log_file (str): Имя файла для сохранения лога. По умолчанию &#39;project_fix.log&#39;.</span>
<span class="sd"> log_file: Имя файла лога. По умолчанию &#39;project_fix.log&#39;.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">log_file</span><span class="p">,</span> <span class="s1">&#39;w&#39;</span><span class="p">,</span> <span class="n">encoding</span><span class="o">=</span><span class="s1">&#39;utf-8&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
<span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="p">))</span>
</code></pre></div></td></tr></table></div>
@ -2772,8 +2755,7 @@ log (List[str]): Список записей лога выполненных о
<div class="doc doc-contents ">
<p>Проверяет, нужно ли пропустить создание <strong>init</strong>.py в директории.</p>
<p>Игнорирует служебные папки (tests/, .git/ и др.).</p>
<p>Проверяет нужно ли пропустить директорию.</p>
<p><span class="doc-section-title">Parameters:</span></p>
@ -2796,7 +2778,7 @@ log (List[str]): Список записей лога выполненных о
</td>
<td>
<div class="doc-md-description">
<p>Путь к проверяемой директории.</p>
<p>Путь к директории.</p>
</div>
</td>
<td>
@ -2822,7 +2804,7 @@ log (List[str]): Список записей лога выполненных о
</td>
<td>
<div class="doc-md-description">
<p>True, если директорию следует пропустить.</p>
<p>True если директорию нужно пропустить.</p>
</div>
</td>
</tr>
@ -2832,7 +2814,8 @@ log (List[str]): Список записей лога выполненных о
<details class="quote">
<summary>Source code in <code>tools\fix_python_project.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">70</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">69</span>
<span class="normal">70</span>
<span class="normal">71</span>
<span class="normal">72</span>
<span class="normal">73</span>
@ -2843,21 +2826,18 @@ log (List[str]): Список записей лога выполненных о
<span class="normal">78</span>
<span class="normal">79</span>
<span class="normal">80</span>
<span class="normal">81</span>
<span class="normal">82</span>
<span class="normal">83</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">should_skip_init</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dir_path</span><span class="p">:</span> <span class="nb">str</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;Проверяет, нужно ли пропустить создание __init__.py в директории.</span>
<span class="sd"> Игнорирует служебные папки (tests/, .git/ и др.).</span>
<span class="normal">81</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">should_skip_init</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dir_path</span><span class="p">:</span> <span class="nb">str</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"> Args:</span>
<span class="sd"> dir_path (str): Путь к проверяемой директории.</span>
<span class="sd"> dir_path: Путь к директории.</span>
<span class="sd"> Returns:</span>
<span class="sd"> bool: True, если директорию следует пропустить.</span>
<span class="sd"> bool: True если директорию нужно пропустить.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">dir_name</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">dir_path</span><span class="p">)</span>
<span class="k">return</span> <span class="p">(</span><span class="n">dir_name</span> <span class="ow">in</span> <span class="n">INIT_IGNORED_DIRS</span> <span class="ow">or</span>
<span class="k">return</span> <span class="p">(</span><span class="n">dir_name</span> <span class="ow">in</span> <span class="n">INIT_IGNORED_DIRS</span> <span class="ow">or</span>
<span class="n">dir_name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">&#39;.&#39;</span><span class="p">))</span>
</code></pre></div></td></tr></table></div>
</details>

View File

@ -1702,7 +1702,9 @@
<a id="tools.logger"></a>
<div class="doc doc-contents first">
<p>Модуль для настройки и получения логгера.</p>
<p>Модуль настройки логгера.</p>
<p>Содержит функцию для создания и настройки логгера
с выводом в стандартный поток.</p>
@ -1733,11 +1735,7 @@
<div class="doc doc-contents ">
<p>Создаёт и настраивает логгер с заданным именем.</p>
<p>Настройки логгера:
- Уровень логирования: DEBUG
- Формат вывода: время | имя логгера | уровень | сообщение
- Вывод: в стандартный поток (stdout)</p>
<p>Создаёт и настраивает логгер.</p>
<p><span class="doc-section-title">Parameters:</span></p>
@ -1760,7 +1758,7 @@
</td>
<td>
<div class="doc-md-description">
<p>Имя логгера. Обычно используется <strong>name</strong> модуля.</p>
<p>Имя логгера (обычно <strong>name</strong> модуля).</p>
</div>
</td>
<td>
@ -1794,25 +1792,15 @@
</table>
<details class="пример-использования" open>
<summary>Пример использования</summary>
<blockquote>
<blockquote>
<blockquote>
<p>logger = get_logger(<strong>name</strong>)
<details class="пример" open>
<summary>Пример</summary>
<p>logger = get_logger(<strong>name</strong>)
logger.debug("Тестовое сообщение")</p>
</blockquote>
</blockquote>
</blockquote>
</details>
<details class="quote">
<summary>Source code in <code>tools\logger.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 6</span>
<span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal">10</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">10</span>
<span class="normal">11</span>
<span class="normal">12</span>
<span class="normal">13</span>
@ -1840,23 +1828,19 @@ logger.debug("Тестовое сообщение")</p>
<span class="normal">35</span>
<span class="normal">36</span>
<span class="normal">37</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">get_logger</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">logging</span><span class="o">.</span><span class="n">Logger</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Создаёт и настраивает логгер с заданным именем.</span>
<span class="sd"> Настройки логгера:</span>
<span class="sd"> - Уровень логирования: DEBUG</span>
<span class="sd"> - Формат вывода: время | имя логгера | уровень | сообщение</span>
<span class="sd"> - Вывод: в стандартный поток (stdout)</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Создаёт и настраивает логгер.</span>
<span class="sd"> Args:</span>
<span class="sd"> name (str): Имя логгера. Обычно используется __name__ модуля.</span>
<span class="sd"> name: Имя логгера (обычно __name__ модуля).</span>
<span class="sd"> Returns:</span>
<span class="sd"> logging.Logger: Настроенный экземпляр логгера.</span>
<span class="sd"> Пример использования:</span>
<span class="sd"> &gt;&gt;&gt; logger = get_logger(__name__)</span>
<span class="sd"> &gt;&gt;&gt; logger.debug(&quot;Тестовое сообщение&quot;)</span>
<span class="sd"> Пример:</span>
<span class="sd"> logger = get_logger(__name__)</span>
<span class="sd"> logger.debug(&quot;Тестовое сообщение&quot;)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
<span class="n">logger</span><span class="o">.</span><span class="n">setLevel</span><span class="p">(</span><span class="n">logging</span><span class="o">.</span><span class="n">DEBUG</span><span class="p">)</span>

View File

@ -1,3 +1,9 @@
"""Модуль тестов для контейнера с JSON-данными.
Содержит тесты для проверки функциональности контейнера
с JSON-данными на вкладке лицензий.
"""
import pytest
from playwright.sync_api import Page
from pages.main_page import MainPage
@ -10,7 +16,12 @@ class TestJsonContainer:
@pytest.fixture(scope="function", autouse=True)
def setup(self, browser: Page) -> None:
"""Фикстура для настройки тестового окружения."""
"""Настраивает тестовое окружение перед каждым тестом.
Args:
browser: Экземпляр страницы Playwright.
"""
lp = LoginPage(browser)
lp.do_login()
@ -21,7 +32,17 @@ class TestJsonContainer:
mp.click_configuration_navigation_panel_item("Лицензии")
def test_verticall_scrolling(self, browser: Page) -> None:
"""Тест проверки вертикальной прокрутки в контейнере с JSON-данными."""
"""Проверяет вертикальную прокрутку в контейнере с JSON-данными.
Args:
browser: Экземпляр страницы Playwright.
Steps:
1. Проверяет наличие вертикальной прокрутки
2. Прокручивает контейнер вниз
3. Прокручивает контейнер вверх
"""
lt = LicenseTab(browser)
is_scrollable = lt.check_json_container_verticall_scrolling()

View File

@ -1,3 +1,10 @@
"""Модуль тестов панели навигации.
Содержит тесты для проверки функциональности и прокрутки
панели навигации в приложении.
"""
from playwright.sync_api import Page
from pages.main_page import MainPage
from pages.login_page import LoginPage
@ -8,21 +15,19 @@ class TestNavigationPanel:
"""Класс тестов для проверки панели навигации.
Атрибуты:
browser: фикстура для работы с браузером
browser: Фикстура для работы с браузером.
"""
def test_verticall_scrolling(self, browser):
"""Тест вертикальной прокрутки панели навигации.
def test_verticall_scrolling(self, browser: Page):
"""Проверяет вертикальную прокрутку панели навигации.
Аргументы:
browser: фикстура для работы с браузером
Args:
browser: Фикстура для работы с браузером.
Возвращает:
None
Исключения:
AssertionError: если панель навигации не поддерживает вертикальную прокрутку
Raises:
AssertionError: Если панель не поддерживает прокрутку.
"""
# Действия:
lp = LoginPage(browser)
lp.do_login()

View File

@ -1,3 +1,9 @@
"""Модуль тестов таблицы статусов сервисов.
Содержит тесты для проверки функциональности и прокрутки
таблицы статусов сервисов на вкладке обслуживания.
"""
import pytest
from playwright.sync_api import Page
from pages.service_status_tab import ServiceStatusTab
@ -5,11 +11,16 @@ from pages.main_page import MainPage
from pages.login_page import LoginPage
class TestServiceStatusTable:
"""Тесты для проверки таблицы статусов сервисов."""
"""Класс тестов для проверки таблицы статусов сервисов."""
@pytest.fixture(scope="function", autouse=True)
def setup(self, browser: Page) -> None:
"""Фикстура для настройки тестового окружения."""
"""Настраивает тестовое окружение перед каждым тестом.
Args:
browser: Экземпляр страницы Playwright.
"""
lp = LoginPage(browser)
lp.do_login()
@ -20,7 +31,18 @@ class TestServiceStatusTable:
mp.click_maintenance_navigation_panel_item("Статус обслуживания")
def test_scrolling(self, browser: Page) -> None:
"""Тест проверки прокрутки таблицы статусов сервисов."""
"""Проверяет прокрутку таблицы статусов сервисов.
Args:
browser: Экземпляр страницы Playwright.
Steps:
1. Проверяет наличие и содержимое таблицы
2. Проверяет возможность вертикальной прокрутки
3. Прокручивает вниз и проверяет видимость последней строки
4. Прокручивает вверх и проверяет видимость первой строки
"""
sst = ServiceStatusTab(browser)
sst.should_be_services_table()

View File

@ -1,3 +1,9 @@
"""Модуль тестов модальных окон пользователей.
Содержит тесты для проверки функциональности и прокрутки
модальных окон работы с пользователями.
"""
import pytest
from playwright.sync_api import Page
from pages.users_tab import UsersTab
@ -5,11 +11,16 @@ from pages.main_page import MainPage
from pages.login_page import LoginPage
class TestUsersModalWindow:
"""Тесты для проверки модальных окон работы с пользователями."""
"""Класс тестов для проверки модальных окон пользователей."""
@pytest.fixture(scope="function", autouse=True)
def setup(self, browser: Page) -> None:
"""Фикстура для настройки тестового окружения."""
"""Настраивает тестовое окружение перед каждым тестом.
Args:
browser: Экземпляр страницы Playwright.
"""
lp = LoginPage(browser)
lp.do_login()
@ -20,7 +31,17 @@ class TestUsersModalWindow:
@pytest.mark.develop
def test_edit_user_window_scrolling(self, browser: Page) -> None:
"""Тест проверки прокрутки окна редактирования пользователя."""
"""Проверяет прокрутку окна редактирования пользователя.
Args:
browser: Экземпляр страницы Playwright.
Steps:
1. Открывает окно редактирования
2. Проверяет вертикальную прокрутку
3. Проверяет горизонтальную прокрутку
"""
ut = UsersTab(browser)
user_name, role = ut.open_edit_user_page_by_index(0)
modal_window = ut.get_modal_window(user_name)
@ -45,7 +66,16 @@ class TestUsersModalWindow:
ut.wait_for_timeout(2000)
def test_add_user_window_scrolling(self, browser: Page) -> None:
"""Тест проверки прокрутки окна добавления пользователя."""
"""Проверяет прокрутку окна добавления пользователя.
Args:
browser: Экземпляр страницы Playwright.
Steps:
1. Открывает окно добавления
2. Проверяет вертикальную прокрутку
"""
ut = UsersTab(browser)
ut.open_add_user_window()
modal_window = ut.get_modal_window("add_user")

View File

@ -1,3 +1,9 @@
"""Модуль тестов вкладки 'Лицензии'.
Содержит тесты для проверки функциональности
и содержимого вкладки лицензий.
"""
import uuid
from typing import List
import pytest
@ -7,11 +13,16 @@ from pages.login_page import LoginPage
from pages.license_tab import LicenseTab
class TestLicenseTab:
"""Тесты для вкладки 'Лицензии'."""
"""Класс тестов для проверки вкладки 'Лицензии'."""
@pytest.fixture(scope="function", autouse=True)
def setup(self, browser: Page) -> None:
"""Подготовка тестового окружения."""
"""Настраивает тестовое окружение перед каждым тестом.
Args:
browser: Экземпляр страницы Playwright.
"""
lp = LoginPage(browser)
lp.do_login()
@ -22,14 +33,29 @@ class TestLicenseTab:
mp.click_configuration_navigation_panel_item("Лицензии")
def test_lisence_tab_content(self, browser: Page) -> None:
"""Тест содержимого вкладки 'Лицензии'."""
"""Проверяет содержимое вкладки 'Лицензии'.
Args:
browser: Экземпляр страницы Playwright.
"""
lt = LicenseTab(browser)
lt.check_content()
def test_license_tab_input_form_and_check_alert(self, browser: Page) -> None:
"""Тест формы ввода лицензии и проверки алертов."""
"""Проверяет форму ввода лицензии и отображение алертов.
Args:
browser: Экземпляр страницы Playwright.
"""
def gen_test_data() -> List[str]:
"""Генерация тестовых данных для проверки формы ввода лицензии."""
"""Генерирует тестовые данные для проверки формы.
Returns:
List[str]: Список тестовых строк лицензий.
"""
data = []
for i in range(3):
data.append(uuid.uuid4().hex)

View File

@ -1,22 +1,43 @@
"""Модуль тестов авторизации.
Содержит тесты для проверки функционала
входа и выхода из системы.
"""
from playwright.sync_api import Page
from pages.main_page import MainPage
from pages.login_page import LoginPage
class TestLogin:
"""Тесты для функционала входа и выхода из системы."""
"""Класс тестов для проверки авторизации."""
def test_successful_login(self, browser: Page) -> None:
"""Тест успешного входа в систему."""
"""Проверяет успешный вход в систему.
Args:
browser: Экземпляр страницы Playwright.
"""
lp = LoginPage(browser)
lp.do_login()
def test_unsuccessful_login(self, browser: Page) -> None:
"""Тест неудачного входа в систему."""
"""Проверяет вход с неверными учетными данными.
Args:
browser: Экземпляр страницы Playwright.
"""
lp = LoginPage(browser)
lp.do_unsuccessful_login()
def test_successful_login_and_logout(self, browser: Page) -> None:
"""Тест успешного входа и выхода из системы."""
"""Проверяет успешный вход и выход из системы.
Args:
browser: Экземпляр страницы Playwright.
"""
lp = LoginPage(browser)
lp.do_login()

View File

@ -1,22 +1,28 @@
"""Модуль тестов вкладки 'Статус обслуживания'.
Содержит тесты для проверки отображения и функциональности
элементов вкладки статусов сервисов.
"""
import pytest
from playwright.sync_api import Page
from pages.service_status_tab import ServiceStatusTab
from pages.main_page import MainPage
from pages.login_page import LoginPage
class TestServiceStatusTab:
"""Набор тестов для вкладки 'Статус обслуживания'.
Проверяет корректность отображения и функциональность элементов вкладки.
"""
class TestServiceStatusTab:
"""Класс тестов для проверки вкладки 'Статус обслуживания'."""
@pytest.fixture(scope="function", autouse=True)
def setup(self, browser):
"""Фикстура для подготовки тестового окружения.
def setup(self, browser: Page):
"""Подготавливает тестовое окружение.
Выполняет:
1. Авторизацию в системе
2. Переход на вкладку 'Статус обслуживания'
Args:
browser: Экземпляр страницы Playwright.
"""
lp = LoginPage(browser)
lp.do_login()
@ -35,14 +41,13 @@ class TestServiceStatusTab:
# Клик по пункту 'Статус обслуживания' в панели навигации обслуживания
mp.click_maintenance_navigation_panel_item("Статус обслуживания")
def test_service_status_tab_content(self, browser):
"""Тест содержимого вкладки 'Статус обслуживания'.
def test_service_status_tab_content(self, browser: Page):
"""Проверяет содержимое вкладки 'Статус обслуживания'.
Проверяет:
1. Наличие тулбара
2. Наличие таблицы сервисов
3. Корректность содержимого таблицы
Args:
browser: Экземпляр страницы Playwright.
"""
sst = ServiceStatusTab(browser)
# Проверка тулбара вкладки
@ -54,14 +59,13 @@ class TestServiceStatusTab:
# Проверка содержимого таблицы сервисов
sst.check_services_table_content()
def test_service_status_table_row_highlighting(self, browser):
"""Тест выделения строк в таблице сервисов.
def test_service_status_table_row_highlighting(self, browser: Page):
"""Проверяет выделение строк в таблице сервисов.
Проверяет выделение строк:
1. Первой строки
2. Последней строки
3. Строки в середине таблицы
Args:
browser: Экземпляр страницы Playwright.
"""
sst = ServiceStatusTab(browser)
# Проверка тулбара вкладки

View File

@ -1,22 +1,26 @@
"""Модуль тестов вкладки 'Сеансы'.
Содержит тесты для проверки отображения и функциональности
элементов вкладки сеансов пользователей.
"""
import pytest
from pages.session_tab import SessionsTab
from pages.main_page import MainPage
from pages.login_page import LoginPage
class TestSessionsTab:
"""Набор тестов для вкладки 'Сеансы'.
Проверяет корректность отображения и функциональность элементов вкладки сеансов.
"""
class TestSessionsTab:
"""Класс тестов для проверки вкладки 'Сеансы'."""
@pytest.fixture(scope="function", autouse=True)
def setup(self, browser):
"""Фикстура для подготовки тестового окружения.
"""Подготавливает тестовое окружение.
Выполняет:
1. Авторизацию в системе
2. Переход на вкладку 'Сеансы' через панель навигации
Args:
browser: Экземпляр страницы Playwright.
"""
# Авторизация в системе
login_page = LoginPage(browser)
login_page.do_login()
@ -31,13 +35,12 @@ class TestSessionsTab:
main_page.click_maintenance_navigation_panel_item("Сеансы")
def test_sessions_tab_content(self, browser):
"""Тест содержимого вкладки 'Сеансы'.
"""Проверяет содержимое вкладки 'Сеансы'.
Проверяет:
1. Наличие и корректность тулбара
2. Наличие таблицы сеансов
3. Соответствие содержимого таблицы данным из БД
Args:
browser: Экземпляр страницы Playwright.
"""
# Инициализация страницы сеансов
sessions_tab = SessionsTab(browser)

View File

@ -1,3 +1,9 @@
"""Модуль тестов вкладки 'Пользователи'.
Содержит тесты для проверки функциональности
работы с пользователями системы.
"""
from typing import Dict
import pytest
from playwright.sync_api import Page
@ -6,11 +12,16 @@ from pages.main_page import MainPage
from pages.login_page import LoginPage
class TestUsersTab:
"""Тесты для вкладки 'Пользователи'."""
"""Класс тестов для проверки вкладки 'Пользователи'."""
@pytest.fixture(scope="function", autouse=True)
def setup(self, browser: Page) -> None:
"""Подготовка тестового окружения."""
"""Настраивает тестовое окружение.
Args:
browser: Экземпляр страницы Playwright.
"""
lp = LoginPage(browser)
lp.do_login()
@ -20,25 +31,45 @@ class TestUsersTab:
mp.click_configuration_navigation_panel_item("Пользователи")
def test_users_tab_content(self, browser: Page) -> None:
"""Тест содержимого вкладки 'Пользователи'."""
"""Проверяет содержимое вкладки 'Пользователи'.
Args:
browser: Экземпляр страницы Playwright.
"""
ut = UsersTab(browser)
ut.should_be_toolbar()
ut.should_be_users_table()
ut.check_users_table_content(True)
def test_users_tab_toolbar_buttons(self, browser: Page) -> None:
"""Тест кнопок на панели инструментов."""
"""Проверяет кнопки на панели инструментов.
Args:
browser: Экземпляр страницы Playwright.
"""
ut = UsersTab(browser)
ut.should_be_toolbar_buttons()
def test_add_user_window_content(self, browser: Page) -> None:
"""Тест содержимого окна добавления пользователя."""
"""Проверяет содержимое окна добавления пользователя.
Args:
browser: Экземпляр страницы Playwright.
"""
ut = UsersTab(browser)
ut.open_add_user_window()
ut.check_add_user_window_content()
def test_add_user_window_close_buttons(self, browser: Page) -> None:
"""Тест кнопок закрытия окна добавления пользователя."""
"""Проверяет кнопки закрытия окна добавления.
Args:
browser: Экземпляр страницы Playwright.
"""
ut = UsersTab(browser)
ut.open_add_user_window()
ut.close_add_user_window_by_toolbar_button()
@ -47,13 +78,23 @@ class TestUsersTab:
ut.close_add_user_window()
def test_edit_user_window_content(self, browser: Page) -> None:
"""Тест содержимого окна редактирования пользователя."""
"""Проверяет содержимое окна редактирования.
Args:
browser: Экземпляр страницы Playwright.
"""
ut = UsersTab(browser)
user_name, role = ut.open_edit_user_page_by_index(0)
ut.check_edit_user_window_content(user_name, role)
def test_edit_user_window_close_buttons(self, browser: Page) -> None:
"""Тест кнопок закрытия окна редактирования пользователя."""
"""Проверяет кнопки закрытия окна редактирования.
Args:
browser: Экземпляр страницы Playwright.
"""
ut = UsersTab(browser)
user_name, role = ut.open_edit_user_page_by_index(0)
ut.close_edit_user_window_by_toolbar_button(user_name)
@ -61,7 +102,12 @@ class TestUsersTab:
ut.close_edit_user_window(user_name)
def test_add_and_delete_user(self, browser: Page) -> None:
"""Тест добавления и удаления пользователя."""
"""Проверяет добавление и удаление пользователя.
Args:
browser: Экземпляр страницы Playwright.
"""
user_data: Dict[str, str] = {"name": "User", "role": "Администратор", "password": "987654"}
mp = MainPage(browser)
@ -79,7 +125,12 @@ class TestUsersTab:
ut.should_not_be_user_in_table(user_data["name"], user_data["role"])
def test_reset_password(self, browser: Page) -> None:
"""Тест сброса пароля пользователя."""
"""Проверяет сброс пароля пользователя.
Args:
browser: Экземпляр страницы Playwright.
"""
user_data: Dict[str, str] = {"name": "autoadmin", "role": "Администратор", "password": "123456"}
mp = MainPage(browser)
@ -113,7 +164,12 @@ class TestUsersTab:
ut_1.should_not_be_user_in_table(user_data["name"], user_data["role"])
def test_edit_user_role(self, browser: Page) -> None:
"""Тест изменения роли пользователя."""
"""Проверяет изменение роли пользователя.
Args:
browser: Экземпляр страницы Playwright.
"""
user_data: Dict[str, str] = {"name": "autooperator", "role": "Оператор", "password": "123245"}
mp = MainPage(browser)

View File

@ -1,11 +1,10 @@
#!/usr/bin/env python3
"""
Python Project Fixer (fix_python_project.py)
--------------------------------------------
Автоматически исправляет структуру Python-проекта:
1. Удаляет BOM-маркеры из текстовых файлов (.py, .json, .txt)
2. Создаёт недостающие __init__.py файлы (игнорируя служебные папки)
3. Сохраняет подробный лог всех выполненных операций
"""Модуль исправления структуры Python-проекта.
Автоматически выполняет:
1. Удаление BOM-маркеров из файлов
2. Создание недостающих __init__.py
3. Логирование всех операций
Использование: python fix_python_project.py [путь_к_проекту]
"""
@ -24,36 +23,36 @@ INIT_TEMPLATE: str = """# Auto-generated by fix_python_project.py
class ProjectFixer:
"""Основной класс для исправления структуры Python-проекта.
"""Исправляет структуру Python-проекта.
Атрибуты:
root_dir (str): Корневая директория проекта.
log (List[str]): Список записей лога выполненных операций.
root_dir: Корневая директория проекта.
log: Лог выполненных операций.
"""
def __init__(self, root_dir: str = '.'):
"""Инициализирует экземпляр ProjectFixer.
Args:
root_dir (str): Корневая директория проекта. По умолчанию текущая директория ('.').
root_dir: Корневая директория проекта. По умолчанию '.'.
"""
self.root_dir = os.path.abspath(root_dir)
self.log: List[str] = []
def remove_bom(self, filepath: str) -> bool:
"""Удаляет BOM-маркер из файла, если он присутствует.
Обрабатывает все файлы, включая находящиеся в tests/.
"""Удаляет BOM-маркер из файла.
Args:
filepath (str): Путь к файлу для обработки.
filepath: Путь к файлу.
Returns:
bool: True, если BOM был удалён, False в противном случае.
bool: True если BOM был удалён.
Raises:
Exception: Если произошла ошибка при чтении/записи файла.
Exception: При ошибке чтения/записи.
"""
try:
with open(filepath, 'rb') as f:
content = f.read()
@ -68,29 +67,29 @@ class ProjectFixer:
return False
def should_skip_init(self, dir_path: str) -> bool:
"""Проверяет, нужно ли пропустить создание __init__.py в директории.
Игнорирует служебные папки (tests/, .git/ и др.).
"""Проверяет нужно ли пропустить директорию.
Args:
dir_path (str): Путь к проверяемой директории.
dir_path: Путь к директории.
Returns:
bool: True, если директорию следует пропустить.
bool: True если директорию нужно пропустить.
"""
dir_name = os.path.basename(dir_path)
return (dir_name in INIT_IGNORED_DIRS or
dir_name.startswith('.'))
def needs_init_py(self, dir_path: str) -> bool:
"""Определяет, требуется ли создание __init__.py в директории.
"""Проверяет нужно ли создать __init__.py.
Args:
dir_path (str): Путь к проверяемой директории.
dir_path: Путь к директории.
Returns:
bool: True, если __init__.py отсутствует, но требуется.
bool: True если __init__.py требуется.
"""
if self.should_skip_init(dir_path):
return False
@ -103,17 +102,18 @@ class ProjectFixer:
return False
def create_init_py(self, dir_path: str) -> bool:
"""Создаёт файл __init__.py в указанной директории.
"""Создаёт файл __init__.py.
Args:
dir_path (str): Путь к директории для создания __init__.py.
dir_path: Путь к директории.
Returns:
bool: True, если файл был успешно создан.
bool: True если файл создан.
Raises:
Exception: Если произошла ошибка при создании файла.
Exception: При ошибке создания.
"""
init_path = os.path.join(dir_path, '__init__.py')
try:
with open(init_path, 'w', encoding='utf-8') as f:
@ -125,7 +125,8 @@ class ProjectFixer:
return False
def process_directory(self):
"""Рекурсивно обрабатывает проект, применяя все исправления."""
"""Рекурсивно обрабатывает проект."""
for root, dirs, files in os.walk(self.root_dir):
# Обработка файлов с целевыми расширениями
for file in files:
@ -137,11 +138,12 @@ class ProjectFixer:
self.create_init_py(root)
def save_log(self, log_file: str = 'project_fix.log'):
"""Сохраняет лог выполненных операций в файл.
"""Сохраняет лог операций в файл.
Args:
log_file (str): Имя файла для сохранения лога. По умолчанию 'project_fix.log'.
log_file: Имя файла лога. По умолчанию 'project_fix.log'.
"""
with open(log_file, 'w', encoding='utf-8') as f:
f.write("\n".join(self.log))

View File

@ -1,26 +1,26 @@
"""Модуль для настройки и получения логгера."""
"""Модуль настройки логгера.
Содержит функцию для создания и настройки логгера
с выводом в стандартный поток.
"""
import logging
def get_logger(name: str) -> logging.Logger:
"""Создаёт и настраивает логгер с заданным именем.
Настройки логгера:
- Уровень логирования: DEBUG
- Формат вывода: время | имя логгера | уровень | сообщение
- Вывод: в стандартный поток (stdout)
"""Создаёт и настраивает логгер.
Args:
name (str): Имя логгера. Обычно используется __name__ модуля.
name: Имя логгера (обычно __name__ модуля).
Returns:
logging.Logger: Настроенный экземпляр логгера.
Пример использования:
>>> logger = get_logger(__name__)
>>> logger.debug("Тестовое сообщение")
Пример:
logger = get_logger(__name__)
logger.debug("Тестовое сообщение")
"""
logger = logging.getLogger(name)
logger.setLevel(logging.DEBUG)