Перенос Dropdown List из элементов в компоненты

pull/1/head
nsubbot 2025-09-02 13:08:29 +03:00
parent 2fbd1e9592
commit a19e125ef2
3 changed files with 19 additions and 21 deletions

View File

@ -1,30 +1,30 @@
"""Модуль dropdown_list_element содержит класс для работы с выпадающими списками.
"""Модуль dropdown_list_component содержит класс для работы с выпадающими списками.
Класс DropdownList наследует базовый функционал BaseElement и добавляет
Класс DropdownList наследует базовый функционал BaseComponent и добавляет
методы для взаимодействия с выпадающими списками на странице.
"""
from playwright.sync_api import Page
from tools.logger import get_logger
from elements.base_element import BaseElement
from components.base_component import BaseComponent
logger = get_logger("DROPDOWN_LIST")
class DropdownList(BaseElement):
class DropdownList(BaseComponent):
"""Класс для работы с выпадающими списками.
Наследует функциональность BaseElement и добавляет специфичные
методы для выбора и проверки элементов списка.
"""
@property
def type_of(self) -> str:
"""Возвращает тип элемента ('выпадающий список').
Returns:
str: Тип элемента - 'выпадающий список'.
def __init__(self, page: Page):
"""Инициализирует компонент выпадающего списка.
Args:
page: Экземпляр страницы Playwright.
"""
return "dropdown list"
super().__init__(page)
# Действия:
def click_item_with_text(self, text: str) -> None:
@ -34,7 +34,6 @@ class DropdownList(BaseElement):
text (str): Текст элемента для выбора.
"""
logger.info(f'Selecting item with text "{text}" from dropdown "{self.name}"')
self.page.get_by_role("listitem").filter(has_text=text).click()
# Проверки:
@ -48,7 +47,6 @@ class DropdownList(BaseElement):
AssertionError: Если элемент отсутствует или недоступен.
"""
logger.info(f'Checking item with text "{text}" in dropdown "{self.name}"')
enabled = self.page.get_by_role("listitem").filter(has_text=text).is_enabled()
if not enabled:
assert False, f"Dropdown list item '{text}' is missing or disabled"

View File

@ -10,10 +10,10 @@ from tools.logger import get_logger
from locators.modal_window_locators import ModalWindowLocators
from elements.text_input_element import TextInput
from elements.text_element import Text
from elements.dropdown_list_element import DropdownList
from elements.checkbox_element import Checkbox
from data.roles_dict import roles_dict
from components.modal_window_component import ModalWindowComponent
from components.dropdown_list_component import DropdownList
from components.confirm_component import ConfirmComponent
@ -40,7 +40,6 @@ class AddUserModalWindow(ModalWindowComponent):
roles_field_locator = ModalWindowLocators.ROLES_FIELD_INPUT_FORM_USER_DATA
input_form_locator = ModalWindowLocators.INPUT_FORM_USER_DATA
label_locator = ModalWindowLocators.LABEL_INPUT_FORM_USER_DATA
roles_menu_locator = ModalWindowLocators.ROLES_MENU_INPUT_FORM_USER_DATA
# Настройка заголовка и кнопки закрытия тулбара
self.window_title = "Добавить нового пользователя"
@ -75,7 +74,7 @@ class AddUserModalWindow(ModalWindowComponent):
self.add_content_item("role_input", role_input)
self.add_content_item(
"roles_list",
DropdownList(page, roles_menu_locator, "roles_list")
DropdownList(page)
)
loc = self.page.locator(input_form_locator).locator("xpath=div[4]").locator(text_field_locator)
@ -215,7 +214,8 @@ class AddUserModalWindow(ModalWindowComponent):
elif name == "role_input":
item.click()
roles_list = self.get_content_item("roles_list")
roles_list.check_presence("Roles list is missing")
roles_list.check_presence(self.page.locator(ModalWindowLocators.ROLES_MENU_INPUT_FORM_USER_DATA),
"Roles list is missing")
for role in roles_dict.values():
# временно, пока есть несоответствие со списком ролей в вкладке Сессии

View File

@ -10,9 +10,9 @@ from tools.logger import get_logger
from locators.modal_window_locators import ModalWindowLocators
from elements.text_input_element import TextInput
from elements.text_element import Text
from elements.dropdown_list_element import DropdownList
from elements.checkbox_element import Checkbox
from components.modal_window_component import ModalWindowComponent
from components.dropdown_list_component import DropdownList
from components.confirm_component import ConfirmComponent
logger = get_logger("EDIT_USER_MODAL_WINDOW")
@ -38,7 +38,6 @@ class EditUserModalWindow(ModalWindowComponent):
roles_field_locator = ModalWindowLocators.ROLES_FIELD_INPUT_FORM_USER_DATA
input_form_locator = ModalWindowLocators.INPUT_FORM_USER_DATA
label_locator = ModalWindowLocators.LABEL_INPUT_FORM_USER_DATA
roles_menu_locator = ModalWindowLocators.ROLES_MENU_INPUT_FORM_USER_DATA
# Настройка заголовка и кнопки закрытия
self.window_title = user_name
@ -59,7 +58,7 @@ class EditUserModalWindow(ModalWindowComponent):
self.add_content_item("role_input", role_input)
self.add_content_item(
"roles_list",
DropdownList(page, roles_menu_locator, "roles_list")
DropdownList(page)
)
loc = self.page.locator(input_form_locator).locator("xpath=div[3]").locator(text_field_locator)
@ -215,7 +214,8 @@ class EditUserModalWindow(ModalWindowComponent):
elif name == "role_input":
item.click()
roles_list = self.get_content_item("roles_list")
roles_list.check_presence("Roles list is missing")
roles_list.check_presence(self.page.locator(ModalWindowLocators.ROLES_MENU_INPUT_FORM_USER_DATA),
"Roles list is missing")
roles_list.check_item_with_text(role)
elif name == "roles_list":
continue