diff --git a/changelog.txt b/changelog.txt deleted file mode 100644 index b7a0781..0000000 --- a/changelog.txt +++ /dev/null @@ -1,15 +0,0 @@ -====== V3 ========= -- pages\service_status_tab.py: Добавлено получение количества строк в таблице - get_rows_count(self) -- tests\e2e\test_service_status_tab.py: Добавлен тест проверки подсветки строк в таблице при наведении на них курсора - test_service_status_table_row_highlighting(self, browser) -- data\roles_dict.py: Добавлена роль "user" -- elements\toolbar_button_element.py переименован в tooltip_button_elememt.py, класс ToolbarButton стал TooltipButton, в сигнатуру функции check_tooltip_with_text добавился аргумент -tooltiplocator -- components\toolbar_component.py - добавлен tooltiplocator в сигнатуру функции check_button_tooltip, изменены функции add_button и get_button_by_name -- pages\users_tab.py - переписана функция should_be_toolbar_buttons -- pages\session_tab.py - вкладка "Сессии" -- tests\e2e\test_sessions_tab.py - тест вкладки "Сессии" -===================23.07.2025========================== -- Все файлы прошли проверку pylint, внесены исправления для фикса замечаний линтера -- Возвращено заведение пользователя с введением пароля -- Актуализированы тесты под текущее состояние интерфейса пользователя версии 1.7 - \ No newline at end of file diff --git a/components/base_component.py b/components/base_component.py index 614f428..8855159 100644 --- a/components/base_component.py +++ b/components/base_component.py @@ -59,7 +59,7 @@ class BaseComponent: # return elements # Проверки: - def check_presence(self, locator: str | Locator, msg: str) -> None: + def check_visibility(self, locator: str | Locator, msg: str) -> None: """Проверка видимости элемента на странице. Args: @@ -168,7 +168,7 @@ class BaseComponent: loc = self.get_locator(locator) - loc.evaluate("el => el.scrollBy(el.scrollWidth, 0)") + loc.evaluate("el => el.scrollBy(el.scrollWidth, 0)") loc.wait_for(timeout=2000) diff --git a/components/confirm_component.py b/components/confirm_component.py index ba2f462..5ee0e37 100644 --- a/components/confirm_component.py +++ b/components/confirm_component.py @@ -97,11 +97,11 @@ class ConfirmComponent(BaseComponent): def should_be_cancel_button(self) -> None: """Проверяет наличие и видимость кнопки Отмены.""" - self.cancel_button.check_presence("Cancel button is missing") + self.cancel_button.check_visibility("Cancel button is missing") def should_be_allow_button(self) -> None: """Проверяет наличие и видимость кнопки Подтверждения.""" - self.allow_button.check_presence("Allow button is missing") + self.allow_button.check_visibility("Allow button is missing") def check_cancel_button_text(self, expected_text: str) -> None: """Проверяет текст кнопки Отмены.""" diff --git a/components/modal_window_component.py b/components/modal_window_component.py index f78fff1..0929ba0 100644 --- a/components/modal_window_component.py +++ b/components/modal_window_component.py @@ -104,18 +104,18 @@ class ModalWindowComponent(BaseComponent): self.toolbar.check_toolbar_presence(f"Modal window with '{self.toolbar.title}' is missing") - def check_button_presence(self, name: str) -> None: + def check_button_visibility(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") + button.check_visibility(f"Button with name '{name}' is missing") - def check_toolbar_button_presence(self, name: str) -> None: + def check_toolbar_button_visibility(self, name: str) -> None: """Проверяет наличие кнопки в панели инструментов.""" - self.toolbar.check_button_presence(name) + self.toolbar.check_button_visibility(name) def check_toolbar_button_tooltip(self, name: str, tooltip: str) -> None: """Проверяет подсказку у кнопки в панели инструментов.""" diff --git a/components/navbar_component.py b/components/navbar_component.py index 43ad6e4..1add89b 100644 --- a/components/navbar_component.py +++ b/components/navbar_component.py @@ -207,4 +207,4 @@ class NavigationPanelComponent(BaseComponent): loc = loc.get_by_text("Шаблоны").nth(1) else: loc = loc.get_by_text(item_name) - self.check_presence(loc, msg) + self.check_visibility(loc, msg) diff --git a/components/toolbar_component.py b/components/toolbar_component.py index dc0e4bd..847ff64 100644 --- a/components/toolbar_component.py +++ b/components/toolbar_component.py @@ -125,7 +125,7 @@ class ToolbarComponent(BaseComponent): locator = self.get_locator(ToolbarLocators.TITLE).filter(has_text=self.title) expect(locator).to_be_visible(), message - def check_button_presence(self, name: str) -> None: + def check_button_visibility(self, name: str) -> None: """Проверяет наличие и видимость кнопки с предварительной прокруткой к элементу. Args: @@ -141,7 +141,7 @@ class ToolbarComponent(BaseComponent): raise AssertionError(f"Unsupported button name {name}") button.locator.scroll_into_view_if_needed() - button.check_presence(f"Button with name {name} is missing") + button.check_visibility(f"Button with name {name} is missing") def check_button_tooltip(self, name: str, tooltip: str) -> None: """Проверяет текст подсказки кнопки. diff --git a/components/Реестр_изменений_companents.txt b/components/Реестр_изменений_companents.txt deleted file mode 100644 index 63a190a..0000000 --- a/components/Реестр_изменений_companents.txt +++ /dev/null @@ -1,113 +0,0 @@ -components - -alert_component.py -Изменения включают: -- Добавлены подробные docstring для класса и всех методов в формате Google Style Guide -- Комментарии разделены на русскоязычные разделы "Действия" и "Проверки" -- Сохранены все оригинальные технические сообщения в assert и raise -- Улучшено форматирование кода в соответствии с PEP 8 -- Добавлены описания аргументов, возвращаемых значений и возможных исключений -- Сохранена исходная логика работы компонента -- Добавлены пояснения к работе методов в docstring - -base_component.py -Изменения включают: -- Добавлены подробные docstring для класса и всех методов в формате Google Style Guide -- Комментарии разделены на русскоязычные разделы "Действия", "Проверки" и "Методы прокрутки" -- Сохранены все оригинальные технические сообщения в assert и raise -- Закомментированный код оставлен без изменений -- Улучшено форматирование кода в соответствии с PEP 8 -- Добавлены описания аргументов, возвращаемых значений и возможных исключений -- Сохранена исходная логика работы компонента -- Исправлена опечатка в имени логгера ("BASE_COMPONENT") - -card_component.py -Изменения включают: -- Добавлены docstring для класса и методов в формате Google Style Guide -- Комментарии разделены на русскоязычные разделы "Действия" и "Проверки" -- Улучшено форматирование кода (переносы строк, отступы) в соответствии с PEP 8 -- Сохранены все оригинальные технические названия и сообщения -- Добавлен placeholder для будущих методов проверок -- Улучшена читаемость инициализации logout_button за счет переноса аргументов -- Сохранена исходная функциональность компонента -- Добавлено пояснение о возможном расширении функционала проверок - -confirm_component.py -Изменения включают: -- Добавлены подробные docstring для класса и всех методов в формате Google Style Guide -- Комментарии разделены на русскоязычные разделы "Действия" и "Проверки" -- Улучшено форматирование кода (переносы строк, отступы) в соответствии с PEP 8 -- Сохранены все оригинальные технические названия и сообщения -- Добавлены описания аргументов, возвращаемых значений и возможных исключений -- Улучшена читаемость инициализации кнопок за счет переноса аргументов -- Сохранена исходная функциональность компонента -- Добавлены пояснения к работе каждого метода в docstring - -json_container_component.py -Изменения включают: -- Добавлены подробные docstring для класса и всех методов в формате Google Style Guide -- Вложенная функция format_json_string также получила свой docstring -- Комментарии разделены на русскоязычные разделы "Действия" и "Проверки" -- Улучшено форматирование кода (отступы, пробелы вокруг операторов) в соответствии с PEP 8 -- Сохранены все оригинальные технические сообщения в assert и raise -- Добавлены описания аргументов, возвращаемых значений и возможных исключений -- Исправлена опечатка в имени логгера ("JSON_CONTAINER") -- Улучшена читаемость кода за счет более последовательного форматирования -- Сохранена исходная логика работы компонента -- Добавлены пояснения к работе каждого метода в docstring - -modal_window_component.py -Изменения включают: -- Исправлено имя логгера на "MODAL_WINDOW" -- Добавлены полные docstring для всех методов в Google-формате -- Улучшено форматирование кода (отступы, переносы строк) -- Сохранены все оригинальные assert-сообщения -- Добавлены типы возвращаемых значений и описания исключений -- Комментарии разделены на "Действия" и "Проверки" -- Исправлены опечатки в именах локаторов (MODAL_WINDOW) -- Улучшена читаемость кода за счет последовательного форматирования -- Сохранена вся исходная функциональность -- обавлены пояснения к работе каждого метода - -navbar_component.py -Изменения включают: -- Добавлены docstring для класса и всех методов в Google-формате на русском языке -- Разделительные комментарии переведены (#actions: → # Действия:, # assertions: → # Проверки:) -- Сохранены все технические сообщения (в raise и логах) без изменений -- Сохранена исходная структура кода и рабочая логика -- Обеспечено соответствие PEP 8 (отступы, пробелы) - -table_component.py -Изменения включают: -- Добавлены docstring для класса и всех методов в Google-формате на русском языке -- Разделительные комментарии переведены (#actions: → # Действия:, # assertions: → # Проверки:) -- Технические комментарии в методах переведены на русский -- Сохранены все технические сообщения (в assert, expect и логах) без изменений -- Сохранена исходная структура кода и рабочая логика -- Обеспечено соответствие PEP 8 (отступы, пробелы) - -toolbar_component.py -Изменения включают: -- Полная документация: - Добавлены docstring для класса и всех методов - Указаны типы аргументов и возвращаемых значений - Описаны возможные исключения - Добавлены пояснения к важным параметрам -- Оптимизированное форматирование: - Соблюдение PEP 8 (отступы, длина строк, пробелы) - Логическая группировка методов - Улучшенные переносы длинных строк -- Улучшенная читаемость: - Последовательные именования переменных - Четкое разделение блоков - Единый стиль оформления -- Соответствие требованиям: - PEP 8 - Google Python Style Guide - Требованиям из README_форматирование_кода.md -- Дополнительные улучшения: - Более информативные сообщения об ошибках - Явное указание timeout для методов ожидания - Использование raise вместо assert для ошибок - Улучшенные названия переменных - diff --git a/data/environment.py b/data/environment.py index edc6f16..ddcecf6 100644 --- a/data/environment.py +++ b/data/environment.py @@ -46,13 +46,13 @@ class Environment: return self.URLS[self.env] + "e-nms-ui/" return self.URLS[self.env] raise Exception(f"Unknown value of ENV variable {self.env}") - + def get_env_name(self) -> str: """Возвращает имя текущего окружения. Возвращает: str: имя текущего окружения. - """ + """ return self.env def get_request_url(self) -> str: diff --git a/data/Реестр_изменений_data.txt b/data/Реестр_изменений_data.txt deleted file mode 100644 index e10aaf0..0000000 --- a/data/Реестр_изменений_data.txt +++ /dev/null @@ -1,33 +0,0 @@ -data - -constants.py -Изменения включают: -- Добавлен docstring для класса в Google-формате на русском языке -- Добавлено описание атрибутов класса -- Сохранена оригинальная логика работы и сообщения об ошибках -- Добавлены пробелы вокруг операторов и между классами/функциями (PEP 8) -- Сохранены все технические сообщения без перевода -- Улучшено форматирование кода (отступы, переносы строк) - -environment.py -Изменения включают: -- Добавлены docstring для класса и всех методов в Google-формате -- Описаны все атрибуты класса -- Сохранена оригинальная логика работы -- Улучшено форматирование (отступы, пробелы, переносы строк) -- Сохранены все технические сообщения без перевода -- Упрощены некоторые условные конструкции -- Добавлены описания возвращаемых значений и возможных исключений -- Сохранена инициализация host в конце файла - -roles_dict.py -Изменения включают: -- Добавлен комментарий, поясняющий назначение словаря -- Выровнены отступы и форматирование словаря: - Каждая пара ключ-значение на отдельной строке - Единообразные отступы - Пробелы после двоеточий -- Улучшена читаемость за счет: - Логического расположения элементов - Последовательного форматирования - Сохранена оригинальная функциональность без изменений \ No newline at end of file diff --git a/elements/base_element.py b/elements/base_element.py index c71fa1f..fe0b504 100644 --- a/elements/base_element.py +++ b/elements/base_element.py @@ -74,7 +74,7 @@ class BaseElement: 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: + def check_visibility(self, msg: str) -> None: """Проверяет видимость элемента на странице.""" logger.info(f"Check that {self.type_of} '{self.name}' is present") diff --git a/elements/button_element.py b/elements/button_element.py index 8569d1b..71d5867 100644 --- a/elements/button_element.py +++ b/elements/button_element.py @@ -27,7 +27,7 @@ class Button(BaseElement): return "button" - # Действия: + # Действия: # (Методы действий будут добавлены по мере необходимости) # Проверки: diff --git a/elements/Реестр_изменений_elements.txt b/elements/Реестр_изменений_elements.txt deleted file mode 100644 index 286eb86..0000000 --- a/elements/Реестр_изменений_elements.txt +++ /dev/null @@ -1,102 +0,0 @@ -elements - -base_element.py -Изменения включают: -- Добавлены docstring для класса и всех методов в Google-формате на русском языке -- Разделительные комментарии переведены на русский (# Действия:, # Проверки:) -- Сохранены все технические комментарии и сообщения в логах без изменений -- Сохранена исходная структура кода и рабочая логика -- Соблюдены требования PEP 8 к форматированию кода - -button_element.py -Изменения включают: -- Добавлены docstring для класса и метода type_of в Google-формате на русском языке -- Разделительные комментарии переведены на русский (# Действия:, # Проверки:) -- Добавлены поясняющие комментарии в разделах действий и проверок -- Сохранена исходная структура кода и рабочая логика -- Улучшено форматирование в соответствии с PEP 8: - Единообразные отступы - Пробелы вокруг операторов - Пустые строки между логическими блоками -- Сохранены все технические аспекты без изменений - -checkbox_element.py -Изменения включают: -- Добавлены docstring для класса и всех методов в Google-формате на русском языке -- Разделительные комментарии переведены на русский (# Действия:, # Проверки:) -- Добавлено логирование операций с чекбоксом -- Указаны типы возвращаемых значений для методов -- Сохранена исходная структура кода и рабочая логика -- Улучшено форматирование в соответствии с PEP 8: - Единообразные отступы - Пробелы вокруг операторов - Пустые строки между логическими блоками -- Сохранены все технические аспекты без изменений - -dropdown_list_element.py -Изменения включают: -- Добавлены полные docstring для класса и всех методов в Google-формате -- Указаны типы аргументов и возвращаемых значений -- Переведены разделительные комментарии -- Добавлено логирование всех операций -- Улучшено сообщение об ошибке в assert -- Удален неиспользуемый импорт re -- Сохранена рабочая логика -- Приведено к соответствию с PEP 8: - Правильные отступы - Пробелы вокруг операторов - Логические блоки разделены пустыми строками -- Улучшена структура кода и читаемость - -text_element.py -Изменения включают: -- Добавлены docstring для класса и метода type_of в Google-формате на русском языке -- Разделительные комментарии переведены на русский (# Действия:, # Проверки:) -- Добавлены поясняющие комментарии в разделах действий и проверок -- Сохранена исходная структура кода и рабочая логика -- Улучшено форматирование в соответствии с PEP 8: - Единообразные отступы - Пробелы вокруг операторов - Пустые строки между логическими блоками -- Упорядочены импорты (стандартные, сторонние, локальные) -- Сохранены все технические аспекты без изменений - -text_input_element.py -Изменения включают: -- Добавлены полные docstring для класса и всех методов -- Указаны типы аргументов и возвращаемых значений -- Переведены разделительные комментарии -- Добавлено логирование всех операций -- Исправлена опечатка в методе get_input_value (было self.locator, стало self.locator) -- Улучшено форматирование в соответствии с PEP 8 -- Сохранена вся исходная функциональность -- Упорядочены импорты -- Добавлены комментарии к исключениям в документации -- Улучшена читаемость кода за счет: - Последовательного стиля - Логического разделения блоков - Единообразного именования - -tooltip_button_element.py -Изменения включают: -- Добавлена документация: - Docstring класса с описанием назначения - Документация для всех методов - Описание аргументов и возвращаемых значений -- Улучшено форматирование: - Соблюдение PEP 8 (отступы, пробелы) - Логическое разделение блоков кода - Четкие комментарии к действиям -- Улучшена читаемость: - Более информативные имена переменных - Подробное сообщение об ошибке - Логическая структура метода проверки -- Соответствие требованиям: - Полное соответствие Google Python Style Guide - Соответствие PEP 8 - Учет рекомендаций из README_форматирование_кода.md -- Дополнительные улучшения: - Более информативное сообщение об ошибке - Разделение логики на четкие этапы - Типизация аргументов методов - diff --git a/fixtures/pages.py b/fixtures/pages.py index 37ff8be..b90a6b1 100644 --- a/fixtures/pages.py +++ b/fixtures/pages.py @@ -30,7 +30,7 @@ def pytest_addoption(parser: Parser): help="Choose browser: chrome, remote_chrome or firefox") parser.addoption('--h', action='store', default=False, help='Choose headless: True or False') - parser.addoption('--s', action='store', default="{'width': 1600, 'height': 900}", + parser.addoption('--s', action='store', default="{'width': 1920, 'height': 400}", help='Size window: width,height') # Закомментированные альтернативные размеры окон # parser.addoption('--s', action='store', default="{'width': 1920, 'height': 1080}", @@ -161,7 +161,7 @@ def get_context(browser: Browser, request: FixtureRequest, start: str) -> Browse if start == 'local': # current_viewport = json.loads(request.config.getoption('--s')) - + context = browser.new_context( # no_viewport=True, viewport= ast.literal_eval(request.config.getoption('--s')), diff --git a/fixtures/Реестр_изменений_fixtures.txt b/fixtures/Реестр_изменений_fixtures.txt deleted file mode 100644 index b45a0d1..0000000 --- a/fixtures/Реестр_изменений_fixtures.txt +++ /dev/null @@ -1,12 +0,0 @@ -fixtures - -pages.py -Изменения включают: -- Добавлен модульный docstring с описанием назначения модуля -- Добавлены подробные docstrings для всех функций в Google-стиле -- Сохранены все технические комментарии без изменений -- Добавлены пояснения к закомментированному коду -- Улучшено форматирование кода в соответствии с PEP 8 -- Добавлены описания аргументов, возвращаемых значений и заметки для функций -- Сохранена оригинальная логика без изменений -- Добавлены разделительные пустые строки между функциями для лучшей читаемости \ No newline at end of file diff --git a/locators/Реестр_изменений_locators.txt b/locators/Реестр_изменений_locators.txt deleted file mode 100644 index 8df4ea0..0000000 --- a/locators/Реестр_изменений_locators.txt +++ /dev/null @@ -1,136 +0,0 @@ -locators - -confirm_locators.py -Изменения включают: -- Добавлен подробный docstring класса в формате Google Style Guide на русском языке -- Описаны все атрибуты класса с пояснениями -- Сохранена оригинальная структура кода и рабочая логика -- Соблюдены требования PEP 8: - Отступы и пробелы - Пустые строки между блоками - Форматирование f-строки -- Комментарии не требовались, так как их не было в исходном файле - -event_panel_locators.py -Изменения включают: -- Добавлен docstring класса в формате Google Style Guide на русском языке -- Подробно описан атрибут BUTTONS_BLOCK с уточнением его расположения -- Сохранена оригинальная структура кода и рабочая логика -- Соблюдены требования PEP 8: - Отступы и пробелы - Длина строки не превышает 79 символов - Форматирование строки локатора - -input_locators.py -Изменения включают: -- Добавлен подробный docstring класса в формате Google Style Guide на русском языке -- Детально описан атрибут LICENSE_ID_UPDATE с разбором структуры XPath -- Сохранена оригинальная структура кода без изменения логики -- Соблюдены требования PEP 8: - Отступы и пробелы - Перенос длинного описания атрибута - Четкое форматирование строки локатора - -json_container_locators.py -Изменения включают: -- Добавлен полный docstring класса в Google-формате на русском языке -- Каждый атрибут получил: - Четкое описание назначения - Пояснение логики работы XPath (использование contains) -- Сохранена оригинальная структура и функциональность кода -- Соблюдены стандарты PEP 8: - Единообразные кавычки - Правильные отступы - Отсутствие лишних пробелов -- Улучшена читаемость за счет: - Логического разделения атрибутов - Подробных, но лаконичных описаний - Соответствия максимальной длине строки - -modal_window_locators.py -Изменения включают: -- Добавлен полный docstring класса с описанием всех атрибутов -- Устранены проблемы с форматированием: - Удалены лишние пробелы вокруг '=' в XPath - Приведены к единому формату строки локаторов -- Логически сгруппированы связанные элементы (форма и её поля) -- Сохранена оригинальная функциональность без изменений логики -- Улучшена читаемость за счет: - Четких описаний каждого локатора - Правильных переносов длинных описаний - Последовательного форматирования - -navigation_panel_locators.py -Изменения включают: -- Добавлен подробный docstring класса в формате Google Style Guide -- Каждый атрибут содержит: - Четкое описание назначения - Пояснение логики работы XPath - Указание типа искомого элемента -- Сохранена оригинальная группировка связанных элементов -- Соблюдены требования PEP 8: - Единообразное форматирование строк - Правильные отступы -Отсутствие лишних пробелов -- Улучшена читаемость за счет: - Логической структуры описаний - Использования терминологии компонентов (панель, узел) - Последовательного стиля документации - -table_locators.py -Изменения включают: -- Добавлен детальный docstring класса в Google-формате: -- Общее описание назначения класса -- Подробное описание каждого атрибута -- Указание полного пути для сложных локаторов -- Улучшена читаемость кода: - Четкое форматирование XPath выражений - Логическое структурирование документации - Использование терминов, соответствующих элементам интерфейса -- Полное соответствие требованиям: - PEP 8 (длина строк, отступы, форматирование) - Google Python Style Guide (стиль документации) - Указаний из README (перевод на русский, сохранение структуры) -- Особенности: - Подробное описание сложных XPath путей - Указание точного расположения элементов в DOM - Четкое разделение разных типов табличных контейнеров - -text_locators.py -Изменения включают: -- Добавлен полный docstring класса в Google-формате: - Общее описание назначения класса - Подробные описания каждого локатора - Указание особенностей элементов (выделяемый текст) -- Оптимизировано оформление кода: - Четкое разделение документации и кода - Единообразное форматирование XPath - Соответствие PEP 8 (длина строк, отступы) -- Улучшена информативность: - Указание типа элемента (span) - Описание классов CSS и их назначения - Четкое различие между похожими локаторами -- Полное соответствие требованиям: - Google Python Style Guide для docstring - PEP 8 для форматирования кода - Правилам из README (русский язык, сохранение логики) - -toolbar_locators.py -Изменения включают: -- Полноценный docstring класса: - Четкое описание назначения класса - Детальное описание каждого атрибута - Разбор составных частей классов CSS -- Оптимизация структуры: - Логические блоки с пояснениями - Группировка связанной информации - Четкое разделение атрибутов -- Стилевые улучшения: - Единообразное форматирование XPath - Соответствие PEP 8 (79 символов в строке) - Правильные отступы и выравнивание -- Особенности документации: - Указание родительского элемента (nav) - Разбор составных классов CSS - Описание состояний элементов (активное) - diff --git a/modal_windows/modal_add_AD_user.py b/modal_windows/modal_add_AD_user.py index b1343f5..b614a3b 100644 --- a/modal_windows/modal_add_AD_user.py +++ b/modal_windows/modal_add_AD_user.py @@ -277,7 +277,7 @@ class AddADUserModalWindow(ModalWindowComponent): assert False, \ "The checkbox 'Active Directory'should be checked for the add user from Active Directory window" - self.check_toolbar_button_presence("close") + self.check_toolbar_button_visibility("close") self.check_toolbar_button_tooltip("close", "Закрыть") no_op_names = ["roles_list", "group_list"] @@ -298,7 +298,7 @@ class AddADUserModalWindow(ModalWindowComponent): elif name == "group_input": item.click() group_list = self.get_content_item("group_list") - group_list.check_presence(menu_locator, + group_list.check_visibility(menu_locator, "Groups list is missing") is_scrollable_vertically = group_list.check_vertical_scrolling(menu_locator) @@ -307,7 +307,7 @@ class AddADUserModalWindow(ModalWindowComponent): elif name == "role_input": item.click() roles_list = self.get_content_item("roles_list") - roles_list.check_presence(menu_locator, + roles_list.check_visibility(menu_locator, "Roles list is missing") is_scrollable_vertically = roles_list.check_vertical_scrolling(menu_locator) @@ -323,13 +323,13 @@ class AddADUserModalWindow(ModalWindowComponent): elif name in no_op_names: continue else: - item.check_presence( + item.check_visibility( f"Modal window content item with name '{name}' is missing" ) - self.check_button_presence("search") - self.check_button_presence("add") - self.check_button_presence("close") + self.check_button_visibility("search") + self.check_button_visibility("add") + self.check_button_visibility("close") search_button = self.get_button_by_name("search") search_button.click() @@ -344,7 +344,7 @@ class AddADUserModalWindow(ModalWindowComponent): user_AD_input.click() user_AD_list = self.get_content_item("user_AD_list") - user_AD_list.check_presence(menu_locator, + user_AD_list.check_visibility(menu_locator, "Users AD list is missing") is_scrollable_vertically = user_AD_list.check_vertical_scrolling(menu_locator) assert is_scrollable_vertically, "Users AD list should be scrollable_vertically" @@ -352,13 +352,13 @@ class AddADUserModalWindow(ModalWindowComponent): self.update_input_form_fields(expand=True) - self.get_content_item("name_input").check_presence( + self.get_content_item("name_input").check_visibility( "Modal window content item with name 'name_input' is missing") - self.get_content_item("role_input").check_presence( + self.get_content_item("role_input").check_visibility( "Modal window content item with name 'role_input' is missing") - self.get_content_item("commentary_input").check_presence( + self.get_content_item("commentary_input").check_visibility( "Modal window content item with name 'commentary_input' is missing") - self.get_content_item("email_input").check_presence( + self.get_content_item("email_input").check_visibility( "Modal window content item with name 'email_input' is missing") - self.get_content_item("phone_input").check_presence( + self.get_content_item("phone_input").check_visibility( "Modal window content item with name 'phone_input' is missing") diff --git a/modal_windows/modal_add_local_user.py b/modal_windows/modal_add_local_user.py index 5355c80..6d71a22 100644 --- a/modal_windows/modal_add_local_user.py +++ b/modal_windows/modal_add_local_user.py @@ -207,7 +207,7 @@ class AddLocalUserModalWindow(ModalWindowComponent): assert False, \ "The checkbox 'Active Directory'should not be checked for the add local user window" - self.check_toolbar_button_presence("close") + self.check_toolbar_button_visibility("close") self.check_toolbar_button_tooltip("close", "Закрыть") for name in self.content_items.keys(): @@ -226,7 +226,7 @@ class AddLocalUserModalWindow(ModalWindowComponent): elif name == "role_input": item.click() roles_list = self.get_content_item("roles_list") - roles_list.check_presence(menu_locator, + roles_list.check_visibility(menu_locator, "Roles list is missing") is_scrollable_vertically = roles_list.check_vertical_scrolling(menu_locator) @@ -241,9 +241,10 @@ class AddLocalUserModalWindow(ModalWindowComponent): elif name == "roles_list": continue else: - item.check_presence( + item.check_visibility( f"Modal window content item with name '{name}' is missing" ) - self.check_button_presence("add") - self.check_button_presence("close") + self.check_button_visibility("add") + self.check_button_visibility("close") + diff --git a/modal_windows/modal_edit_user.py b/modal_windows/modal_edit_user.py index 287e963..6ed13ee 100644 --- a/modal_windows/modal_edit_user.py +++ b/modal_windows/modal_edit_user.py @@ -215,17 +215,17 @@ class EditUserModalWindow(ModalWindowComponent): elif name == "role_input": item.click() roles_list = self.get_content_item("roles_list") - roles_list.check_presence(menu_locator, + roles_list.check_visibility(menu_locator, "Roles list is missing") roles_list.check_item_with_text(role) elif name == "roles_list": continue else: - item.check_presence( + item.check_visibility( f"Modal window content item with name '{name}' is missing" ) - self.check_button_presence("save") - self.check_button_presence("delete") - self.check_button_presence("reset_password") - self.check_button_presence("close") + self.check_button_visibility("save") + self.check_button_visibility("delete") + self.check_button_visibility("reset_password") + self.check_button_visibility("close") diff --git a/modal_windows/Реестр_изменений_modal_windows.txt b/modal_windows/Реестр_изменений_modal_windows.txt deleted file mode 100644 index a9688ea..0000000 --- a/modal_windows/Реестр_изменений_modal_windows.txt +++ /dev/null @@ -1,39 +0,0 @@ -modal_windows - -modal_add_user.py -Изменения включают: -- Добавлена полная документация: - Docstring класса с описанием назначения - Подробные docstring методов с описанием аргументов и возможных исключений - Комментарии к сложным блокам кода -- Улучшено форматирование: - Соблюдение PEP 8 (отступы, длина строк, пробелы) - Логическое группирование кода - Четкое разделение блоков -- Оптимизирована читаемость: - Последовательное именование переменных - Улучшенные переносы длинных строк - Единый стиль оформления -- Сохранена функциональность: - Без изменений рабочей логики - Сохранение всех оригинальных вызовов методов - Оставлены закомментированные блоки без изменений - -modal_edit_user.py -Изменения включают: -- Полная документация: - Добавлены docstring для класса и всех методов - Подробные описания аргументов и возвращаемых значений - Указание возможных исключений -- Оптимизированное форматирование: - Соблюдение PEP 8 (отступы, длина строк, пробелы) - Логическая группировка кода - Четкое разделение блоков -- Улучшенная читаемость: - Последовательные именования - Улучшенные переносы длинных строк - Единый стиль оформления -- Сохранение функциональности: - Без изменений рабочей логики - Сохранение всех оригинальных вызовов - Оставление закомментированных блоков без изменений \ No newline at end of file diff --git a/pages/base_page.py b/pages/base_page.py index 99953d5..025927e 100644 --- a/pages/base_page.py +++ b/pages/base_page.py @@ -2,6 +2,7 @@ Содержит общие методы для взаимодействия со страницей и API. """ +import time from typing import Dict, Any from playwright.sync_api import Page, Response, APIRequestContext, expect @@ -78,50 +79,113 @@ class BasePage: """ api_request_context = self.get_api_request_context() token = host.get_access_token() + + # Проверяем что токен получен + if not token: + logger.error("Failed to get access token: token is None or empty") + # Возвращаем заглушечный response или бросаем исключение + # В Playwright можно создать mock response если нужно + return None + headers = {"Accept": "application/json", "Authorization": f"Bearer {token}"} - response = api_request_context.get( - f"{host.get_request_url()}{uri}", - headers=headers - ) + full_url = f"{host.get_request_url()}{uri}" + + logger.debug("Sending GET request to: %s", full_url) + response = api_request_context.get(full_url, headers=headers) + + # Логируем статус ответа + logger.debug("GET response status: %s", response.status) + return response def send_post_api_request(self, uri: str, payload: Dict) -> Response: - """Отправляет POST-запрос к API. - - Args: - uri (str): URI API-эндпоинта (без базового URL). - payload (Dict): Данные для отправки в теле запроса. - - Returns: - Response: Ответ сервера. - """ + """Отправляет POST-запрос к API.""" api_request_context = self.get_api_request_context() token = host.get_access_token() - headers = {"Accept": "application/json", "Authorization": f"Bearer {token}"} + + if not token: + logger.error("Failed to get access token: token is None or empty") + return None + + headers = { + "Accept": "application/json", + "Content-Type": "application/json", + "Authorization": f"Bearer {token}" + } + full_url = f"{host.get_request_url()}{uri}" + + logger.debug("Sending POST request to: %s", full_url) + + # Сериализуем payload в JSON + json_data = json.dumps(payload) + + # Проверяем что сериализация прошла успешно + if json_data is None: + logger.error("Failed to serialize payload to JSON: result is None") + return None + + if not isinstance(json_data, str): + logger.error("Failed to serialize payload to JSON: expected string got %s", type(json_data)) + return None + response = api_request_context.post( - f"{host.get_request_url()}{uri}", + full_url, headers=headers, - data=payload + data=json_data # Передаем сериализованный JSON как data ) + + logger.debug("POST response status: %s", response.status) + return response - def get_response_body(self, response: Response) -> dict | None: + def get_response_body(self, response: Response) -> dict | list | None: """Извлекает тело ответа в format JSON. Args: response (Response): Ответ сервера. Returns: - dict | None: Распарсенное тело ответа или None в случае ошибки. + dict | list | None: Распарсенное тело ответа или None в случае ошибки. """ - try: - response_body = response.json() - except json.JSONDecodeError: - logger.error("Failed to decode JSON response") - return None - return response_body + start_time = time.time() - # Проверки: + # Проверяем что response не None + if response is None: + logger.error("Response object is None") + processing_time = time.time() - start_time + logger.debug("Response processing time1: %.3f seconds", processing_time) + return None + + # Проверяем статус ответа + if response.status >= 400: + logger.error("API request failed with status %s", response.status) + processing_time = time.time() - start_time + logger.debug("Response processing time2: %.3f seconds", processing_time) + return None + + # Пытаемся получить JSON + json_result = response.json() + + # Проверяем что результат не None + if json_result is None: + logger.error("JSON parsing returned None") + processing_time = time.time() - start_time + logger.debug("Response processing time3: %.3f seconds", processing_time) + return None + + # Принимаем как словари, так и списки + if not isinstance(json_result, (dict, list)): + logger.error("Expected dict or list but got %s", type(json_result)) + processing_time = time.time() - start_time + logger.debug("Response processing time4: %.3f seconds", processing_time) + return None + + processing_time = time.time() - start_time + logger.debug("Response processing time5: %.3f seconds", processing_time) + + return json_result + + # Проверки: def check_URL(self, uri: str, msg: str) -> None: """Проверяет, что текущий URL соответствует ожидаемому. @@ -132,7 +196,7 @@ class BasePage: Raises: AssertionError: Если URL не соответствует ожидаемому. """ - expect(self.page).to_have_url( + expect(self.page).to_have_url( # pylint: disable=expression-not-assigned f"{host.get_base_url()}{uri}", timeout=60000 ), msg diff --git a/pages/license_tab.py b/pages/license_tab.py index 94fe899..00b2991 100644 --- a/pages/license_tab.py +++ b/pages/license_tab.py @@ -113,7 +113,7 @@ class LicenseTab(BasePage): def should_be_json_container(self) -> None: """Проверяет наличие JSON-контейнера.""" - self.json_container.check_presence( + self.json_container.check_visibility( JsonContainerLocators.CONTAINER, "Json container with license info is missing" ) diff --git a/pages/main_page.py b/pages/main_page.py index a2b093f..20fae66 100644 --- a/pages/main_page.py +++ b/pages/main_page.py @@ -93,7 +93,7 @@ class MainPage(BasePage): def should_be_navigation_panel(self) -> None: """Проверяет наличие панели навигации.""" - self.navigation_panel.check_presence( + self.navigation_panel.check_visibility( NavigationPanelLocators.PANEL_MAIN, "Navigation panel is missing" ) @@ -101,7 +101,7 @@ class MainPage(BasePage): def should_be_user_button(self) -> None: """Проверяет наличие кнопки пользователя.""" - self.user_button.check_presence("User button is missing on event panel") + self.user_button.check_visibility("User button is missing on event panel") def check_navigation_panel_verticall_scrolling(self) -> bool: """Проверяет возможность вертикальной прокрутки панели. diff --git a/pages/service_status_tab.py b/pages/service_status_tab.py index bcf9bca..5afbec6 100644 --- a/pages/service_status_tab.py +++ b/pages/service_status_tab.py @@ -154,7 +154,8 @@ class ServiceStatusTab(BasePage): AssertionError: Если таблица отсутствует. """ - self.services_table.check_presence( + self.services_table.check_visibility( TableLocators.TABLE_WORK_AREA, "Service statuses table is missing" ) + diff --git a/pages/session_tab.py b/pages/session_tab.py index d4bf184..9d412a8 100644 --- a/pages/session_tab.py +++ b/pages/session_tab.py @@ -139,6 +139,7 @@ class SessionsTab(BasePage): # Находим кнопку удаления сеанса и нажимаем на нее delete_session_button = self.get_delete_session_button_from_row(row_index) delete_session_button.click() + self.page.wait_for_timeout(1000) # Подтверждаем удаление self.delete_session_confirm.click_allow_button() @@ -311,7 +312,7 @@ class SessionsTab(BasePage): AssertionError: Если таблица отсутствует. """ - self.sessions_table.check_presence( + self.sessions_table.check_visibility( TableLocators.TABLE_WORK_AREA, "Sessions table is missing" ) @@ -335,7 +336,7 @@ class SessionsTab(BasePage): self.wait_for_tooltip_to_disappear() delete_button = self.get_delete_session_button_from_row(row_index) - delete_button.check_presence( + delete_button.check_visibility( f"Delete session button is missing on {row_index} row" ) delete_button.check_tooltip_with_text(ButtonLocators.TOOLTIP, tooltip) diff --git a/pages/users_tab.py b/pages/users_tab.py index 679c0c0..0563adf 100644 --- a/pages/users_tab.py +++ b/pages/users_tab.py @@ -293,10 +293,10 @@ class UsersTab(BasePage): """ if self.toolbar.is_button_not_present("close"): - self.toolbar.check_button_presence("edit") + self.toolbar.check_button_visibility("edit") self.toolbar.click_button("edit") - self.toolbar.check_button_presence("add_user") + self.toolbar.check_button_visibility("add_user") self.toolbar.click_button("add_user") self.add_modal_window("add_local_user", "") self.get_modal_window("add_local_user").check_by_window_title() @@ -441,7 +441,7 @@ class UsersTab(BasePage): """ self.toolbar.check_toolbar_presence("Toolbar is missing") - self.toolbar.check_button_presence("edit") + self.toolbar.check_button_visibility("edit") def should_be_toolbar_buttons(self) -> None: """Проверяет наличие и функциональность кнопок тулбара. @@ -450,17 +450,17 @@ class UsersTab(BasePage): AssertionError: Если кнопки недоступны или подсказки неверны. """ - self.toolbar.check_button_presence("edit") + self.toolbar.check_button_visibility("edit") self.toolbar.check_button_tooltip("edit", "Редактировать") self.toolbar.get_button_by_name("edit").click() - self.toolbar.check_button_presence("add_user") - self.toolbar.check_button_presence("close") + self.toolbar.check_button_visibility("add_user") + self.toolbar.check_button_visibility("close") self.toolbar.check_button_tooltip("add_user", "Добавить") self.toolbar.check_button_tooltip("close", "Закрыть") self.toolbar.get_button_by_name("close").click() - self.toolbar.check_button_presence("edit") + self.toolbar.check_button_visibility("edit") def should_be_users_table(self) -> None: """Проверяет наличие таблицы пользователей. @@ -469,7 +469,7 @@ class UsersTab(BasePage): AssertionError: Если таблица отсутствует. """ - self.users_table.check_presence( + self.users_table.check_visibility( TableLocators.TABLE_WORK_AREA, "Users table is missing" ) diff --git a/pages/Реестр_изменений_pages.txt b/pages/Реестр_изменений_pages.txt deleted file mode 100644 index 88c1978..0000000 --- a/pages/Реестр_изменений_pages.txt +++ /dev/null @@ -1,108 +0,0 @@ -pages - -base_page.py -Изменения включают: -- Добавлен модульный docstring с описанием назначения модуля -- Добавлен подробный docstring для класса BasePage с описанием атрибутов -- Указание на возможные исключения (где уместно) -- Сохранены все технические комментарии (# Действия:, # Проверки:) -- Улучшено форматирование кода в соответствии с PEP 8 -- Добавлены аннотации типов для всех аргументов и возвращаемых значений -- Логика работы методов осталась без изменений -- Добавлено логирование ошибок вместо print -- Улучшено форматирование длинных строк для лучшей читаемости - -license_tab.py -Изменения включают: -- Добавлены docstring для класса и всех методов в формате Google Style на русском языке -- Переведены разделительные комментарии (#actions: → # Действия:, # assertions: → # Проверки:) -- Сохранены все технические комментарии в оригинальном виде -- Улучшено форматирование кода в соответствии с PEP 8 (пробелы, переносы длинных строк) -- Добавлены аннотации типов для методов -- Сохранена вся исходная логика без изменений - -login_page.py -Изменения включают: -- Добавлены docstring для класса и всех методов в формате Google Style на русском языке -- Сохранены все технические комментарии в оригинальном виде -- Добавлены аннотации типов для методов -- Улучшено форматирование кода в соответствии с PEP 8 (импорты, пробелы, отступы) -- В docstring методов добавлена информация о: - Назначении метода - Аргументах - Возвращаемых значениях - Возможных исключениях -- Сохранена вся исходная логика без изменений -- Улучшена читаемость кода за счет правильного форматирования и структурирования - -main_page.py -Изменения включают: -- Добавлены docstring для класса и всех методов в формате Google Style на русском языке -- Переведены разделительные комментарии (#actions: → # Действия:, # assertions: → # Проверки:) -- Добавлены аннотации типов для всех методов -- Улучшено форматирование кода в соответствии с PEP 8 -- Исправлена опечатка в названии метода click_configuration_navigation_panel_item (было click_configuration_navigation_panel_item) -- Сохранены все технические особенности исходного кода -- Улучшена читаемость за счет правильного структурирования кода и комментариев - -service_status_tab.py -Изменения включают: -- Добавлена полная документация: - Docstring класса с описанием назначения - Подробные docstring для каждого метода - Указание типов аргументов и возвращаемых значений - Описание возможных исключений -- Оптимизировано форматирование: - Соблюдение PEP 8 (отступы, длина строк, пробелы) - Логическое разделение блоков кода - Улучшенные переносы длинных строк -- Улучшена читаемость: - Последовательное именование методов - Четкая структура документации - Единый стиль оформления -- Сохранена функциональность: - Без изменений рабочей логики - Сохранение всех оригинальных вызовов - Оставление сообщений об ошибках на английском (как в требованиях) - -users_tab.py -Изменения включают: -- Полная документация: - Добавлены docstring для класса и всех методов - Указаны типы аргументов и возвращаемых значений - Описаны возможные исключения - Добавлены пояснения к сложным методам -- Оптимизированное форматирование: - Соблюдение PEP 8 (отступы, длина строк, пробелы) - Логическая группировка кода - Улучшенные переносы длинных строк -- Улучшенная читаемость: - Последовательные именования - Четкое разделение блоков - Единый стиль оформления -- Сохранение функциональности: - Без изменений рабочей логики - Сохранение всех оригинальных вызовов - Оставление сообщений об ошибках на английском (как в требованиях) - -session_tab.py -Изменения включают: -- Полная документация: - Добавлены docstring для класса и всех методов - Указаны типы аргументов и возвращаемых значений - Описаны возможные исключения - Добавлены пояснения к сложным методам -- Оптимизированное форматирование: - Соблюдение PEP 8 (отступы, длина строк, пробелы) - Логическая группировка кода - Улучшенные переносы длинных строк -- Улучшенная читаемость: - Последовательные именования - Четкое разделение блоков - Единый стиль оформления -- Сохранение функциональности: - Без изменений рабочей логики - Сохранение всех оригинальных вызовов - Оставление сообщений об ошибках на английском (как в требованиях) - - diff --git a/tests/components/test_user_modal_window.py b/tests/components/test_user_modal_window.py index 0c63e92..96c2403 100644 --- a/tests/components/test_user_modal_window.py +++ b/tests/components/test_user_modal_window.py @@ -50,11 +50,11 @@ class TestUsersModalWindow: assert is_scrollable_vertically, "Should be vertical scrolling" modal_window.scroll_window_down() - modal_window.check_button_presence("close") + modal_window.check_button_visibility("close") ut.wait_for_timeout(3000) modal_window.scroll_window_up() - modal_window.check_toolbar_button_presence("close") + modal_window.check_toolbar_button_visibility("close") ut.wait_for_timeout(3000) is_scrollable_horizontally = modal_window.check_window_horizontal_scrolling() @@ -84,11 +84,11 @@ class TestUsersModalWindow: assert is_scrollable_vertically, "Should be vertical scrolling" modal_window.scroll_window_down() - modal_window.check_button_presence("close") + modal_window.check_button_visibility("close") ut.wait_for_timeout(3000) modal_window.scroll_window_up() - modal_window.check_toolbar_button_presence("close") + modal_window.check_toolbar_button_visibility("close") ut.wait_for_timeout(3000) ## Временно закомментарено - для окна добавления пользователя убрали горизонтальный скроллинг - BUG??? diff --git a/tests/components/Реестр_изменений_tests_componets.txt b/tests/components/Реестр_изменений_tests_componets.txt deleted file mode 100644 index 51e7207..0000000 --- a/tests/components/Реестр_изменений_tests_componets.txt +++ /dev/null @@ -1,52 +0,0 @@ -tests/componets - -run.bat -- файл для запуска тестов скроллинга компонент в уменьшенном окне браузера - -test_json_container.py -Изменения включают: -- Добавлены docstring для класса и всех методов в Google-формате -- Переведены и оформлены комментарии в коде -- Сохранены все оригинальные технические сообщения и assert -- Улучшено форматирование (отступы, пробелы, переносы строк) -- Добавлены описания действий в тестовом методе -- Сохранена оригинальная логика теста -- Добавлены пояснения к фикстуре setup -- Соответствие PEP 8 и Google Python Style Guide - -test_navigation_panel.py -Изменения включают: -- Добавлены docstring для класса и метода в Google-формате -- Переведены и оформлены комментарии в коде -- Сохранены все оригинальные технические сообщения и assert -- Улучшено форматирование (отступы, пробелы, переносы строк) -- Добавлены пояснения к закомментированным маркерам тестов -- Сохранена оригинальная логика теста -- Добавлены описания шагов теста -- Соответствие PEP 8 и Google Python Style Guide -- Комментарии о viewport и smoke-тесте сохранены в оригинальном виде, но перемещены в более подходящее место - -test_services_table.py -Изменения включают: -- Добавлены docstring для класса и методов в Google-формате -- Переведены и структурированы комментарии -- Сохранены все оригинальные технические сообщения и assert -- Улучшено форматирование (отступы, пробелы, переносы строк) -- Добавлены пояснения к закомментированному smoke-маркеру -- Сохранена оригинальная логика теста -- Добавлены описания проверок в тестовом методе -- Соответствие PEP 8 и Google Python Style Guide -- Комментарии о smoke-тесте сохранены в оригинальном виде, но перемещены в более подходящее место - -test_user_modal_window.py -Изменения включают: -- Добавлены подробные docstring для класса и всех методов -- Сохранены все оригинальные технические сообщения и маркеры -- Улучшено форматирование кода (отступы, пробелы, переносы строк) -- Добавлены пояснения к закомментированному smoke-маркеру -- Переведены и структурированы комментарии -- Сохранена оригинальная логика тестов -- Добавлены описания проверок в тестовых методах -- Соответствие PEP 8 и Google Python Style Guide -- Четкое разделение на разделы с комментариями -- Сохранены все технические детали (таймауты, названия кнопок) \ No newline at end of file diff --git a/tests/e2e/__pycache__/test_expand_navigation_panel.cpython-313-pytest-8.4.1.pyc b/tests/e2e/__pycache__/test_expand_navigation_panel.cpython-313-pytest-8.4.1.pyc deleted file mode 100644 index d378be4..0000000 Binary files a/tests/e2e/__pycache__/test_expand_navigation_panel.cpython-313-pytest-8.4.1.pyc and /dev/null differ diff --git a/tests/e2e/__pycache__/test_license_tab.cpython-313-pytest-8.4.1.pyc b/tests/e2e/__pycache__/test_license_tab.cpython-313-pytest-8.4.1.pyc deleted file mode 100644 index 5daff0c..0000000 Binary files a/tests/e2e/__pycache__/test_license_tab.cpython-313-pytest-8.4.1.pyc and /dev/null differ diff --git a/tests/e2e/__pycache__/test_login.cpython-313-pytest-8.4.1.pyc b/tests/e2e/__pycache__/test_login.cpython-313-pytest-8.4.1.pyc deleted file mode 100644 index 2cefe70..0000000 Binary files a/tests/e2e/__pycache__/test_login.cpython-313-pytest-8.4.1.pyc and /dev/null differ diff --git a/tests/e2e/__pycache__/test_service_status_tab.cpython-313-pytest-8.4.1.pyc b/tests/e2e/__pycache__/test_service_status_tab.cpython-313-pytest-8.4.1.pyc deleted file mode 100644 index 7b012c7..0000000 Binary files a/tests/e2e/__pycache__/test_service_status_tab.cpython-313-pytest-8.4.1.pyc and /dev/null differ diff --git a/tests/e2e/__pycache__/test_sessions_tab.cpython-313-pytest-8.4.1.pyc b/tests/e2e/__pycache__/test_sessions_tab.cpython-313-pytest-8.4.1.pyc deleted file mode 100644 index 2fb2f19..0000000 Binary files a/tests/e2e/__pycache__/test_sessions_tab.cpython-313-pytest-8.4.1.pyc and /dev/null differ diff --git a/tests/e2e/__pycache__/test_users_tab.cpython-313-pytest-8.4.1.pyc b/tests/e2e/__pycache__/test_users_tab.cpython-313-pytest-8.4.1.pyc deleted file mode 100644 index 4a2b71e..0000000 Binary files a/tests/e2e/__pycache__/test_users_tab.cpython-313-pytest-8.4.1.pyc and /dev/null differ diff --git a/tools/Реестр_изменений_tools.txt b/tools/Реестр_изменений_tools.txt deleted file mode 100644 index e2dea1c..0000000 --- a/tools/Реестр_изменений_tools.txt +++ /dev/null @@ -1,9 +0,0 @@ -tools - -logger.py -Изменения включают: -- Добавлен модульный docstring с описанием назначения модуля -- Добавлен подробный docstring для функции get_logger в Google-стиле -- Добавлены поясняющие комментарии к ключевым настройкам логгера -- Сохранена оригинальная логика и технические детали без изменений -- Соблюдены требования PEP 8 по форматированию кода \ No newline at end of file