Переименовано check_toolbar_button_presence в chek_toolbar_button_visibility.
parent
e9f3f79f0b
commit
8f5aa882b5
|
|
@ -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
|
||||
|
||||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
"""Проверяет текст кнопки Отмены."""
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
"""Проверяет подсказку у кнопки в панели инструментов."""
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
"""Проверяет текст подсказки кнопки.
|
||||
|
|
|
|||
|
|
@ -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 для ошибок
|
||||
Улучшенные названия переменных
|
||||
|
||||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -1,33 +0,0 @@
|
|||
data
|
||||
|
||||
constants.py
|
||||
Изменения включают:
|
||||
- Добавлен docstring для класса в Google-формате на русском языке
|
||||
- Добавлено описание атрибутов класса
|
||||
- Сохранена оригинальная логика работы и сообщения об ошибках
|
||||
- Добавлены пробелы вокруг операторов и между классами/функциями (PEP 8)
|
||||
- Сохранены все технические сообщения без перевода
|
||||
- Улучшено форматирование кода (отступы, переносы строк)
|
||||
|
||||
environment.py
|
||||
Изменения включают:
|
||||
- Добавлены docstring для класса и всех методов в Google-формате
|
||||
- Описаны все атрибуты класса
|
||||
- Сохранена оригинальная логика работы
|
||||
- Улучшено форматирование (отступы, пробелы, переносы строк)
|
||||
- Сохранены все технические сообщения без перевода
|
||||
- Упрощены некоторые условные конструкции
|
||||
- Добавлены описания возвращаемых значений и возможных исключений
|
||||
- Сохранена инициализация host в конце файла
|
||||
|
||||
roles_dict.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")
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ class Button(BaseElement):
|
|||
|
||||
return "button"
|
||||
|
||||
# Действия:
|
||||
# Действия:
|
||||
# (Методы действий будут добавлены по мере необходимости)
|
||||
|
||||
# Проверки:
|
||||
|
|
|
|||
|
|
@ -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
|
||||
- Дополнительные улучшения:
|
||||
Более информативное сообщение об ошибке
|
||||
Разделение логики на четкие этапы
|
||||
Типизация аргументов методов
|
||||
|
||||
|
|
@ -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')),
|
||||
|
|
|
|||
|
|
@ -1,12 +0,0 @@
|
|||
fixtures
|
||||
|
||||
pages.py
|
||||
Изменения включают:
|
||||
- Добавлен модульный docstring с описанием назначения модуля
|
||||
- Добавлены подробные docstrings для всех функций в Google-стиле
|
||||
- Сохранены все технические комментарии без изменений
|
||||
- Добавлены пояснения к закомментированному коду
|
||||
- Улучшено форматирование кода в соответствии с PEP 8
|
||||
- Добавлены описания аргументов, возвращаемых значений и заметки для функций
|
||||
- Сохранена оригинальная логика без изменений
|
||||
- Добавлены разделительные пустые строки между функциями для лучшей читаемости
|
||||
|
|
@ -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
|
||||
Описание состояний элементов (активное)
|
||||
|
||||
|
|
@ -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")
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
|
|
|
|||
|
|
@ -1,39 +0,0 @@
|
|||
modal_windows
|
||||
|
||||
modal_add_user.py
|
||||
Изменения включают:
|
||||
- Добавлена полная документация:
|
||||
Docstring класса с описанием назначения
|
||||
Подробные docstring методов с описанием аргументов и возможных исключений
|
||||
Комментарии к сложным блокам кода
|
||||
- Улучшено форматирование:
|
||||
Соблюдение PEP 8 (отступы, длина строк, пробелы)
|
||||
Логическое группирование кода
|
||||
Четкое разделение блоков
|
||||
- Оптимизирована читаемость:
|
||||
Последовательное именование переменных
|
||||
Улучшенные переносы длинных строк
|
||||
Единый стиль оформления
|
||||
- Сохранена функциональность:
|
||||
Без изменений рабочей логики
|
||||
Сохранение всех оригинальных вызовов методов
|
||||
Оставлены закомментированные блоки без изменений
|
||||
|
||||
modal_edit_user.py
|
||||
Изменения включают:
|
||||
- Полная документация:
|
||||
Добавлены docstring для класса и всех методов
|
||||
Подробные описания аргументов и возвращаемых значений
|
||||
Указание возможных исключений
|
||||
- Оптимизированное форматирование:
|
||||
Соблюдение PEP 8 (отступы, длина строк, пробелы)
|
||||
Логическая группировка кода
|
||||
Четкое разделение блоков
|
||||
- Улучшенная читаемость:
|
||||
Последовательные именования
|
||||
Улучшенные переносы длинных строк
|
||||
Единый стиль оформления
|
||||
- Сохранение функциональности:
|
||||
Без изменений рабочей логики
|
||||
Сохранение всех оригинальных вызовов
|
||||
Оставление закомментированных блоков без изменений
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
"""Проверяет возможность вертикальной прокрутки панели.
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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 (отступы, длина строк, пробелы)
|
||||
Логическая группировка кода
|
||||
Улучшенные переносы длинных строк
|
||||
- Улучшенная читаемость:
|
||||
Последовательные именования
|
||||
Четкое разделение блоков
|
||||
Единый стиль оформления
|
||||
- Сохранение функциональности:
|
||||
Без изменений рабочей логики
|
||||
Сохранение всех оригинальных вызовов
|
||||
Оставление сообщений об ошибках на английском (как в требованиях)
|
||||
|
||||
|
||||
|
|
@ -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???
|
||||
|
|
|
|||
|
|
@ -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
|
||||
- Четкое разделение на разделы с комментариями
|
||||
- Сохранены все технические детали (таймауты, названия кнопок)
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -1,9 +0,0 @@
|
|||
tools
|
||||
|
||||
logger.py
|
||||
Изменения включают:
|
||||
- Добавлен модульный docstring с описанием назначения модуля
|
||||
- Добавлен подробный docstring для функции get_logger в Google-стиле
|
||||
- Добавлены поясняющие комментарии к ключевым настройкам логгера
|
||||
- Сохранена оригинальная логика и технические детали без изменений
|
||||
- Соблюдены требования PEP 8 по форматированию кода
|
||||
Loading…
Reference in New Issue