class JsonContainerComponent(BaseComponent):
"""Компонент для работы с JSON-данными на странице.
Предоставляет методы чтения и проверки JSON-данных в контейнерах.
@@ -2778,10 +2817,7 @@
"""
loc = self.get_locator(locator)
json_string = loc.inner_text()
- print(json_string)
-
formatted_json_string = self.format_json_string(json_string)
- print(formatted_json_string)
try:
data = json.loads(formatted_json_string)
@@ -2988,7 +3024,10 @@
Source code in components\json_container_component.py
- 155
+ 152
+153
+154
+155
156
157
158
@@ -2997,10 +3036,7 @@
161
162
163
-164
-165
-166
-167 | def check_json_equals(self, actual: Any, expected: Any, msg: str) -> None:
+164
| def check_json_equals(self, actual: Any, expected: Any, msg: str) -> None:
"""Сравнивает JSON-объекты на идентичность.
Args:
@@ -3398,10 +3434,7 @@
147
148
149
-150
-151
-152
-153
| def read_data(self, locator: Any) -> Dict:
+150
| def read_data(self, locator: Any) -> Dict:
"""Читает и форматирует JSON-данные из указанного локатора.
Args:
@@ -3415,10 +3448,7 @@
"""
loc = self.get_locator(locator)
json_string = loc.inner_text()
- print(json_string)
-
formatted_json_string = self.format_json_string(json_string)
- print(formatted_json_string)
try:
data = json.loads(formatted_json_string)
diff --git a/site/components/modal_window_component/index.html b/site/components/modal_window_component/index.html
index ce1a28a..2c648eb 100644
--- a/site/components/modal_window_component/index.html
+++ b/site/components/modal_window_component/index.html
@@ -1819,6 +1819,27 @@
+
+
+
+
+
+ ZTPConfigTab
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -2127,6 +2148,27 @@
+
+
+
+
+
+ TestZTPConfigTab
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -2747,7 +2789,7 @@
Компонент модального окна. Предоставляет методы для взаимодействия с окном,
-его содержимым и проверками.
+его содержимым и проверок.
@@ -2850,9 +2892,25 @@
104
105
106
-107
| class ModalWindowComponent(BaseComponent):
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
| class ModalWindowComponent(BaseComponent):
"""Компонент модального окна. Предоставляет методы для взаимодействия с окном,
- его содержимым и проверками."""
+ его содержимым и проверок."""
def __init__(self, page: Page):
super().__init__(page)
@@ -2863,26 +2921,32 @@
# Действия:
def add_content_item(self, name: str, item: object) -> None:
"""Добавляет элемент содержимого в окно по заданному имени."""
+
self.content_items[name] = item
def get_content_item(self, name: str) -> object | None:
"""Возвращает элемент содержимого по имени или None, если не найден."""
+
return self.content_items.get(name)
def add_toolbar_title(self, title: str) -> None:
"""Добавляет заголовок в панель инструментов модального окна."""
+
self.toolbar.add_title(title)
def add_toolbar_button(self, locator: str, name: str) -> None:
"""Добавляет кнопку в панель инструментов модального окна."""
+
self.toolbar.add_tooltip_button(locator, name)
def add_button(self, locator: str, name: str) -> None:
"""Добавляет кнопку в модальное окно."""
+
self.buttons.append(Button(self.page, locator, name))
def get_button_by_name(self, name: str) -> Button | None:
"""Ищет и возвращает кнопку по имени или None, если не найдена."""
+
for button in self.buttons:
if button.name == name:
return button
@@ -2890,6 +2954,7 @@
def click_button(self, name: str) -> None:
"""Кликает по кнопке с заданным именем. Вызывает ошибку, если не найдена."""
+
button = self.get_button_by_name(name)
if button is None:
assert False, f"Button with name '{name}' not found"
@@ -2897,41 +2962,48 @@
def click_toolbar_close_button(self) -> None:
"""Кликает по кнопке закрытия в панели инструментов."""
+
self.toolbar.click_button("close")
def scroll_window_down(self) -> None:
"""Прокручивает содержимое окна вниз."""
+
self.scroll_down(ModalWindowLocators.MODAL_WINDOW)
def scroll_window_up(self) -> None:
"""Прокручивает содержимое окна вверх."""
+
self.scroll_up(ModalWindowLocators.MODAL_WINDOW)
def scroll_window_left(self) -> None:
"""Прокручивает содержимое окна влево."""
+
self.scroll_left(ModalWindowLocators.MODAL_WINDOW)
def scroll_window_right(self) -> None:
"""Прокручивает содержимое окна вправо."""
+
self.scroll_right(ModalWindowLocators.MODAL_WINDOW)
# Проверки:
def check_window_vertical_scrolling(self) -> bool:
"""Проверяет возможность вертикальной прокрутки окна."""
+
return self.is_scrollable_vertically(ModalWindowLocators.MODAL_WINDOW)
def check_window_horizontal_scrolling(self) -> bool:
"""Проверяет возможность горизонтальной прокрутки окна."""
+
return self.is_scrollable_horizontally(ModalWindowLocators.MODAL_WINDOW)
def check_by_window_title(self) -> None:
"""Проверяет наличие окна по заголовку."""
- self.toolbar.check_toolbar_presence(
- f"Modal window with '{self.toolbar.title}' is missing"
- )
+
+ self.toolbar.check_toolbar_presence(f"Modal window with '{self.toolbar.title}' is missing")
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"
@@ -2939,10 +3011,12 @@
def check_toolbar_button_visibility(self, name: str) -> None:
"""Проверяет наличие кнопки в панели инструментов."""
+
self.toolbar.check_button_visibility(name)
def check_toolbar_button_tooltip(self, name: str, tooltip: str) -> None:
"""Проверяет подсказку у кнопки в панели инструментов."""
+
self.toolbar.check_button_tooltip(name, tooltip)
|
@@ -2975,10 +3049,12 @@
Source code in components\modal_window_component.py
- | def add_button(self, locator: str, name: str) -> None:
+ | def add_button(self, locator: str, name: str) -> None:
"""Добавляет кнопку в модальное окно."""
+
self.buttons.append(Button(self.page, locator, name))
|
@@ -3004,8 +3080,10 @@
Source code in components\modal_window_component.py
| def add_content_item(self, name: str, item: object) -> None:
+27
+28
| def add_content_item(self, name: str, item: object) -> None:
"""Добавляет элемент содержимого в окно по заданному имени."""
+
self.content_items[name] = item
|
@@ -3029,10 +3107,12 @@
Source code in components\modal_window_component.py
- | def add_toolbar_button(self, locator: str, name: str) -> None:
+ | def add_toolbar_button(self, locator: str, name: str) -> None:
"""Добавляет кнопку в панель инструментов модального окна."""
+
self.toolbar.add_tooltip_button(locator, name)
|
@@ -3056,10 +3136,12 @@
Source code in components\modal_window_component.py
- | def add_toolbar_title(self, title: str) -> None:
+ | def add_toolbar_title(self, title: str) -> None:
"""Добавляет заголовок в панель инструментов модального окна."""
+
self.toolbar.add_title(title)
|
@@ -3083,13 +3165,15 @@
Source code in components\modal_window_component.py
- | def check_button_visibility(self, name: str) -> None:
+ 107
+108
+109
+110
+111
+112
+113 | 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"
@@ -3116,15 +3200,13 @@
Source code in components\modal_window_component.py
- | def check_by_window_title(self) -> None:
+ | def check_by_window_title(self) -> None:
"""Проверяет наличие окна по заголовку."""
- self.toolbar.check_toolbar_presence(
- f"Modal window with '{self.toolbar.title}' is missing"
- )
+
+ self.toolbar.check_toolbar_presence(f"Modal window with '{self.toolbar.title}' is missing")
|
@@ -3147,10 +3229,12 @@
Source code in components\modal_window_component.py
- | def check_toolbar_button_tooltip(self, name: str, tooltip: str) -> None:
+ | def check_toolbar_button_tooltip(self, name: str, tooltip: str) -> None:
"""Проверяет подсказку у кнопки в панели инструментов."""
+
self.toolbar.check_button_tooltip(name, tooltip)
|
@@ -3174,10 +3258,12 @@
Source code in components\modal_window_component.py
- | def check_toolbar_button_visibility(self, name: str) -> None:
+ | def check_toolbar_button_visibility(self, name: str) -> None:
"""Проверяет наличие кнопки в панели инструментов."""
+
self.toolbar.check_button_visibility(name)
|
@@ -3201,10 +3287,12 @@
Source code in components\modal_window_component.py
- | def check_window_horizontal_scrolling(self) -> bool:
+ | def check_window_horizontal_scrolling(self) -> bool:
"""Проверяет возможность горизонтальной прокрутки окна."""
+
return self.is_scrollable_horizontally(ModalWindowLocators.MODAL_WINDOW)
|
@@ -3228,10 +3316,12 @@
Source code in components\modal_window_component.py
- | def check_window_vertical_scrolling(self) -> bool:
+ | def check_window_vertical_scrolling(self) -> bool:
"""Проверяет возможность вертикальной прокрутки окна."""
+
return self.is_scrollable_vertically(ModalWindowLocators.MODAL_WINDOW)
|
@@ -3255,13 +3345,15 @@
Source code in components\modal_window_component.py
- | def click_button(self, name: str) -> None:
+ 58
+59
+60
+61
+62
+63
+64 | def click_button(self, name: str) -> None:
"""Кликает по кнопке с заданным именем. Вызывает ошибку, если не найдена."""
+
button = self.get_button_by_name(name)
if button is None:
assert False, f"Button with name '{name}' not found"
@@ -3288,10 +3380,12 @@
Source code in components\modal_window_component.py
- | def click_toolbar_close_button(self) -> None:
+ | def click_toolbar_close_button(self) -> None:
"""Кликает по кнопке закрытия в панели инструментов."""
+
self.toolbar.click_button("close")
|
@@ -3315,13 +3409,15 @@
Source code in components\modal_window_component.py
- | def get_button_by_name(self, name: str) -> Button | None:
+ 50
+51
+52
+53
+54
+55
+56 | def get_button_by_name(self, name: str) -> Button | None:
"""Ищет и возвращает кнопку по имени или None, если не найдена."""
+
for button in self.buttons:
if button.name == name:
return button
@@ -3348,10 +3444,12 @@
Source code in components\modal_window_component.py
- | def get_content_item(self, name: str) -> object | None:
+ | def get_content_item(self, name: str) -> object | None:
"""Возвращает элемент содержимого по имени или None, если не найден."""
+
return self.content_items.get(name)
|
@@ -3375,10 +3473,12 @@
Source code in components\modal_window_component.py
- | def scroll_window_down(self) -> None:
+ | def scroll_window_down(self) -> None:
"""Прокручивает содержимое окна вниз."""
+
self.scroll_down(ModalWindowLocators.MODAL_WINDOW)
|
@@ -3402,10 +3502,12 @@
Source code in components\modal_window_component.py
- | def scroll_window_left(self) -> None:
+ | def scroll_window_left(self) -> None:
"""Прокручивает содержимое окна влево."""
+
self.scroll_left(ModalWindowLocators.MODAL_WINDOW)
|
@@ -3429,10 +3531,12 @@
Source code in components\modal_window_component.py
- | def scroll_window_right(self) -> None:
+ | def scroll_window_right(self) -> None:
"""Прокручивает содержимое окна вправо."""
+
self.scroll_right(ModalWindowLocators.MODAL_WINDOW)
|
@@ -3456,10 +3560,12 @@
Source code in components\modal_window_component.py
- | | class TableComponent(BaseComponent):
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
| class TableComponent(BaseComponent):
"""Компонент таблицы. Предоставляет методы для работы с табличными данными."""
def __init__(self, page: Page):
@@ -3030,14 +3085,22 @@
f"Expected events table headers {expected_headers} are not equal {actual_headers}"
def check_content(self,
- locator: str | Locator,
- expected_headers: list[str]) -> None:
+ locator: str | Locator,
+ expected_headers: list[str],
+ check_table_not_empty: bool = True) -> None:
"""Проверяет содержимое таблицы.
Проверяет заголовки и наличие данных в таблице.
+ Args:
+ locator: Локатор таблицы.
+ expected_headers: Список ожидаемых заголовков таблицы.
+ check_table_not_empty: Флаг проверки, что таблица не пустая.
+ По умолчанию True.
+
Raises:
- AssertionError: Если таблица пуста или заголовки неверны.
+ AssertionError: Если таблица пуста (при check_table_not_empty=True)
+ или заголовки неверны.
"""
table_content = self.read(locator)
@@ -3045,10 +3108,15 @@
if len(table_content) == 0:
assert False, "The contents of the table are missing"
+ # Проверка заголовков таблицы
self.check_table_headers(table_content[0], expected_headers)
+ # Проверка наличия данных в таблице
if len(table_content) == 1:
- assert False, "Table body is missing"
+ if check_table_not_empty:
+ assert False, "Table body is missing"
+ else:
+ logger.info("Таблица пустая (не содержит строк с данными)")
def check_column_descending_order(self,
locator: str | Locator,
@@ -3289,20 +3357,7 @@
Source code in components\table_component.py
- 178
-179
-180
-181
-182
-183
-184
-185
-186
-187
-188
-189
-190
-191
+ 191
192
193
194
@@ -3315,7 +3370,20 @@
201
202
203
-204 | def check_column_descending_order(self,
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
| def check_column_descending_order(self,
locator: str | Locator,
index: int) -> bool:
"""Проверка, что заданный столбец таблицы упорядочен по убыванию.
@@ -3352,7 +3420,7 @@
- check_content(locator, expected_headers)
+ check_content(locator, expected_headers, check_table_not_empty=True)
@@ -3363,6 +3431,70 @@
Проверяет заголовки и наличие данных в таблице.
+Parameters:
+
+
+
+ | Name |
+ Type |
+ Description |
+ Default |
+
+
+
+
+
+ locator
+ |
+
+ str | Locator
+ |
+
+
+ |
+
+ required
+ |
+
+
+
+ expected_headers
+ |
+
+ list[str]
+ |
+
+
+ Список ожидаемых заголовков таблицы.
+
+ |
+
+ required
+ |
+
+
+
+ check_table_not_empty
+ |
+
+ bool
+ |
+
+
+ Флаг проверки, что таблица не пустая.
+ По умолчанию True.
+
+ |
+
+ True
+ |
+
+
+
+
+
Raises:
@@ -3378,7 +3510,8 @@
- Если таблица пуста или заголовки неверны.
+ Если таблица пуста (при check_table_not_empty=True)
+ или заголовки неверны.
|
@@ -3407,15 +3540,36 @@
173
174
175
-176def check_content(self,
- locator: str | Locator,
- expected_headers: list[str]) -> None:
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
| def check_content(self,
+ locator: str | Locator,
+ expected_headers: list[str],
+ check_table_not_empty: bool = True) -> None:
"""Проверяет содержимое таблицы.
Проверяет заголовки и наличие данных в таблице.
+ Args:
+ locator: Локатор таблицы.
+ expected_headers: Список ожидаемых заголовков таблицы.
+ check_table_not_empty: Флаг проверки, что таблица не пустая.
+ По умолчанию True.
+
Raises:
- AssertionError: Если таблица пуста или заголовки неверны.
+ AssertionError: Если таблица пуста (при check_table_not_empty=True)
+ или заголовки неверны.
"""
table_content = self.read(locator)
@@ -3423,10 +3577,15 @@
if len(table_content) == 0:
assert False, "The contents of the table are missing"
+ # Проверка заголовков таблицы
self.check_table_headers(table_content[0], expected_headers)
+ # Проверка наличия данных в таблице
if len(table_content) == 1:
- assert False, "Table body is missing"
+ if check_table_not_empty:
+ assert False, "Table body is missing"
+ else:
+ logger.info("Таблица пустая (не содержит строк с данными)")
|
@@ -3480,16 +3639,16 @@
Source code in components\table_component.py
- 206
-207
-208
-209
-210
-211
-212
-213
-214
-215 | def check_first_row_visibility(self, locator: str | Locator) -> None:
+ 219
+220
+221
+222
+223
+224
+225
+226
+227
+228 | def check_first_row_visibility(self, locator: str | Locator) -> None:
"""Проверяет видимость первой строки таблицы.
Args:
@@ -3552,16 +3711,16 @@
Source code in components\table_component.py
- 217
-218
-219
-220
-221
-222
-223
-224
-225
-226 | def check_last_row_visibility(self, locator: str | Locator) -> None:
+ 230
+231
+232
+233
+234
+235
+236
+237
+238
+239 | def check_last_row_visibility(self, locator: str | Locator) -> None:
"""Проверяет видимость последней строки таблицы.
Args:
@@ -3640,26 +3799,26 @@
Source code in components\table_component.py
- 228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
+ 241
242
243
244
245
246
-247 | |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|