Перенос 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 tools.logger import get_logger
from elements.base_element import BaseElement from components.base_component import BaseComponent
logger = get_logger("DROPDOWN_LIST") logger = get_logger("DROPDOWN_LIST")
class DropdownList(BaseElement): class DropdownList(BaseComponent):
"""Класс для работы с выпадающими списками. """Класс для работы с выпадающими списками.
Наследует функциональность BaseElement и добавляет специфичные Наследует функциональность BaseElement и добавляет специфичные
методы для выбора и проверки элементов списка. методы для выбора и проверки элементов списка.
""" """
@property def __init__(self, page: Page):
def type_of(self) -> str: """Инициализирует компонент выпадающего списка.
"""Возвращает тип элемента ('выпадающий список').
Returns: Args:
str: Тип элемента - 'выпадающий список'. page: Экземпляр страницы Playwright.
""" """
return "dropdown list" super().__init__(page)
# Действия: # Действия:
def click_item_with_text(self, text: str) -> None: def click_item_with_text(self, text: str) -> None:
@ -34,7 +34,6 @@ class DropdownList(BaseElement):
text (str): Текст элемента для выбора. 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() self.page.get_by_role("listitem").filter(has_text=text).click()
# Проверки: # Проверки:
@ -48,7 +47,6 @@ class DropdownList(BaseElement):
AssertionError: Если элемент отсутствует или недоступен. 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() enabled = self.page.get_by_role("listitem").filter(has_text=text).is_enabled()
if not enabled: if not enabled:
assert False, f"Dropdown list item '{text}' is missing or disabled" 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 locators.modal_window_locators import ModalWindowLocators
from elements.text_input_element import TextInput from elements.text_input_element import TextInput
from elements.text_element import Text from elements.text_element import Text
from elements.dropdown_list_element import DropdownList
from elements.checkbox_element import Checkbox from elements.checkbox_element import Checkbox
from data.roles_dict import roles_dict from data.roles_dict import roles_dict
from components.modal_window_component import ModalWindowComponent from components.modal_window_component import ModalWindowComponent
from components.dropdown_list_component import DropdownList
from components.confirm_component import ConfirmComponent from components.confirm_component import ConfirmComponent
@ -40,7 +40,6 @@ class AddUserModalWindow(ModalWindowComponent):
roles_field_locator = ModalWindowLocators.ROLES_FIELD_INPUT_FORM_USER_DATA roles_field_locator = ModalWindowLocators.ROLES_FIELD_INPUT_FORM_USER_DATA
input_form_locator = ModalWindowLocators.INPUT_FORM_USER_DATA input_form_locator = ModalWindowLocators.INPUT_FORM_USER_DATA
label_locator = ModalWindowLocators.LABEL_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 = "Добавить нового пользователя" self.window_title = "Добавить нового пользователя"
@ -75,7 +74,7 @@ class AddUserModalWindow(ModalWindowComponent):
self.add_content_item("role_input", role_input) self.add_content_item("role_input", role_input)
self.add_content_item( self.add_content_item(
"roles_list", "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) 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": elif name == "role_input":
item.click() item.click()
roles_list = self.get_content_item("roles_list") 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(): 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 locators.modal_window_locators import ModalWindowLocators
from elements.text_input_element import TextInput from elements.text_input_element import TextInput
from elements.text_element import Text from elements.text_element import Text
from elements.dropdown_list_element import DropdownList
from elements.checkbox_element import Checkbox from elements.checkbox_element import Checkbox
from components.modal_window_component import ModalWindowComponent from components.modal_window_component import ModalWindowComponent
from components.dropdown_list_component import DropdownList
from components.confirm_component import ConfirmComponent from components.confirm_component import ConfirmComponent
logger = get_logger("EDIT_USER_MODAL_WINDOW") logger = get_logger("EDIT_USER_MODAL_WINDOW")
@ -38,7 +38,6 @@ class EditUserModalWindow(ModalWindowComponent):
roles_field_locator = ModalWindowLocators.ROLES_FIELD_INPUT_FORM_USER_DATA roles_field_locator = ModalWindowLocators.ROLES_FIELD_INPUT_FORM_USER_DATA
input_form_locator = ModalWindowLocators.INPUT_FORM_USER_DATA input_form_locator = ModalWindowLocators.INPUT_FORM_USER_DATA
label_locator = ModalWindowLocators.LABEL_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 self.window_title = user_name
@ -59,7 +58,7 @@ class EditUserModalWindow(ModalWindowComponent):
self.add_content_item("role_input", role_input) self.add_content_item("role_input", role_input)
self.add_content_item( self.add_content_item(
"roles_list", "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) 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": elif name == "role_input":
item.click() item.click()
roles_list = self.get_content_item("roles_list") 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) roles_list.check_item_with_text(role)
elif name == "roles_list": elif name == "roles_list":
continue continue