Добавление в локаторы data-testid для элементов вкладки 'Настройки/Уведомления'

ra4/management_rack
nsubbot 2026-02-04 14:59:07 +03:00
parent 415924ec98
commit 5960b27e0b
4 changed files with 56 additions and 45 deletions

View File

@ -5,6 +5,7 @@
методы для взаимодействия с интерактивными выпадающими списками на странице. методы для взаимодействия с интерактивными выпадающими списками на странице.
""" """
import re
from playwright.sync_api import Page, Locator, expect from playwright.sync_api import Page, Locator, expect
from tools.logger import get_logger from tools.logger import get_logger
from components.base_component import BaseComponent from components.base_component import BaseComponent
@ -35,8 +36,13 @@ class InteractiveDropdownList(BaseComponent):
text (str): Текст элемента для выбора. text (str): Текст элемента для выбора.
""" """
checkbox_locator = self.get_locator('div.v-list__tile__title').get_by_text(text). \ checkbox_locator = self.page.get_by_role("listitem").filter(has_text=text).get_by_role("checkbox")
locator("../..").locator("//input[@role='checkbox']") if checkbox_locator.count() > 1:
rtext = f"^{text}$"
checkbox_locator = self.page.get_by_role("listitem").filter(
has_text=re.compile(rtext)
).get_by_role("checkbox")
expect(checkbox_locator).to_be_visible(), \ expect(checkbox_locator).to_be_visible(), \
f"Checkbox for dropdown list item with text {text} is missing" f"Checkbox for dropdown list item with text {text} is missing"
return checkbox_locator return checkbox_locator

View File

@ -33,16 +33,19 @@ class EmailNotificationsSettingsTab(BasePage):
super().__init__(page) super().__init__(page)
toolbar_button_1 = self.page.get_by_role("navigation").filter(
has_text=re.compile("e-mail")).get_by_role("button").nth(0)
toolbar_button_2 = self.page.get_by_role("navigation").filter(
has_text=re.compile("e-mail")).get_by_role("button").nth(1)
self.toolbar = ToolbarComponent(page, "e-mail") self.toolbar = ToolbarComponent(page, "e-mail")
self.toolbar.add_tooltip_button(toolbar_button_1, "edit") toolbar_button_edit = self.page.get_by_role("navigation").filter(has_text=re.compile("e-mail")). \
self.toolbar.add_tooltip_button(toolbar_button_1, "save") locator("//button[@data-testid='NOTIFICATIONS_SMTP__btn__edit']")
self.toolbar.add_tooltip_button(toolbar_button_2, "cancel") self.toolbar.add_tooltip_button(toolbar_button_edit, "edit")
toolbar_button_save = self.page.get_by_role("navigation").filter(has_text=re.compile("e-mail")). \
locator("//button[@data-testid='NOTIFICATIONS_SMTP__btn__submit']")
self.toolbar.add_tooltip_button(toolbar_button_save, "save")
toolbar_button_cancel = self.page.get_by_role("navigation").filter(has_text=re.compile("e-mail")). \
locator("//button[@data-testid='NOTIFICATIONS_SMTP__btn__cancelEdit']")
self.toolbar.add_tooltip_button(toolbar_button_cancel, "cancel")
# Форма для отображения/редактирования общих полей настроек # Форма для отображения/редактирования общих полей настроек
self.common_settings = SettingsFormComponent(page) self.common_settings = SettingsFormComponent(page)
@ -53,28 +56,29 @@ class EmailNotificationsSettingsTab(BasePage):
self.common_input_fields_locators = self.common_settings.get_input_fields_locators(container_locator) self.common_input_fields_locators = self.common_settings.get_input_fields_locators(container_locator)
loc = self.common_input_fields_locators.get("Сервер") loc = self.common_input_fields_locators.get("Сервер")
loc_server_input = loc.locator(SettingsFormLocators.SETTINGS_FORM_INPUT_FIELD).first loc_server_input = loc.locator("//input[@data-testid='NOTIFICATIONS_SMTP__common_text-field__smtp_host']")
server_setting_input = TextInput(page, loc_server_input, "server_setting_input") server_setting_input = TextInput(page, loc_server_input, "server_setting_input")
self.common_settings.add_content_item("server_setting_input", server_setting_input) self.common_settings.add_content_item("server_setting_input", server_setting_input)
loc = self.common_input_fields_locators.get("Порт") loc = self.common_input_fields_locators.get("Порт")
loc_port_input = loc.locator(SettingsFormLocators.SETTINGS_FORM_INPUT_FIELD).first loc_port_input = loc.locator("//input[@data-testid='NOTIFICATIONS_SMTP__common_text-field__smtp_port']")
port_setting_input = TextInput(page, loc_port_input, "port_setting_input") port_setting_input = TextInput(page, loc_port_input, "port_setting_input")
self.common_settings.add_content_item("port_setting_input", port_setting_input) self.common_settings.add_content_item("port_setting_input", port_setting_input)
loc = self.common_input_fields_locators.get("Отправитель") loc = self.common_input_fields_locators.get("Отправитель")
loc_sender_input = loc.locator(SettingsFormLocators.SETTINGS_FORM_INPUT_FIELD).first loc_sender_input = loc.locator("//input[@data-testid='NOTIFICATIONS_SMTP__common_text-field__from_email']")
sender_setting_input = TextInput(page, loc_sender_input, "sender_setting_input") sender_setting_input = TextInput(page, loc_sender_input, "sender_setting_input")
self.common_settings.add_content_item("sender_setting_input", sender_setting_input) self.common_settings.add_content_item("sender_setting_input", sender_setting_input)
field_locator = container_locator.locator("//div[@data-testid='NOTIFICATIONS_SMTP__common_checkbox__active']")
# Метка "Активировать" # Метка "Активировать"
label_activate_locator = container_locator.locator("//label").get_by_text("Активировать") label_activate_locator = field_locator.locator("//label").get_by_text("Активировать")
label_activate = Text(page, label_activate_locator, "checkbox_activate_label") label_activate = Text(page, label_activate_locator, "checkbox_activate_label")
self.common_settings.add_content_item("checkbox_activate_label", label_activate) self.common_settings.add_content_item("checkbox_activate_label", label_activate)
# Чекбокс "Активировать" # Чекбокс "Активировать"
checkbox_activate = Checkbox(page, checkbox_activate = Checkbox(page,
label_activate_locator.locator("../..").get_by_role("checkbox"), field_locator.locator("//input[@data-testid='NOTIFICATIONS_SMTP__common_checkbox__active']"),
"activate" "activate"
) )
self.common_settings.add_content_item("checkbox_activate", checkbox_activate) self.common_settings.add_content_item("checkbox_activate", checkbox_activate)
@ -90,15 +94,18 @@ class EmailNotificationsSettingsTab(BasePage):
loc = self.tls_input_fields_locators.get("Использовать TLS-туннель") loc = self.tls_input_fields_locators.get("Использовать TLS-туннель")
self.tls_settings.add_content_item("tunnel_setting_selector", SelectionBarComponent(page, loc)) self.tls_settings.add_content_item("tunnel_setting_selector", SelectionBarComponent(page, loc))
field_locator = container_locator. \
locator("//div[@data-testid='NOTIFICATIONS_SMTP__TLS_checkbox__reject_unauthorized']")
# Метка "Принимать самоподписанные сертификаты" # Метка "Принимать самоподписанные сертификаты"
label_accept_certificates_locator = container_locator. \ label_accept_certificates_locator = field_locator. \
locator("//label").get_by_text("Принимать самоподписанные сертификаты") locator("//label").get_by_text("Принимать самоподписанные сертификаты")
label_accept_certificates = Text(page, label_accept_certificates_locator, "checkbox_accept_certificates_label") label_accept_certificates = Text(page, label_accept_certificates_locator, "checkbox_accept_certificates_label")
self.tls_settings.add_content_item("checkbox_accept_certificates_label", label_accept_certificates) self.tls_settings.add_content_item("checkbox_accept_certificates_label", label_accept_certificates)
# Чекбокс "Принимать самоподписанные сертификаты" # Чекбокс "Принимать самоподписанные сертификаты"
checkbox_accept_certificates = Checkbox(page, checkbox_accept_certificates = Checkbox(page,
label_accept_certificates_locator.locator("../..").get_by_role("checkbox"), field_locator.locator("//input[@data-testid='NOTIFICATIONS_SMTP__TLS_checkbox__reject_unauthorized']"),
"accept_certificates" "accept_certificates"
) )
self.tls_settings.add_content_item("checkbox_accept_certificates", checkbox_accept_certificates) self.tls_settings.add_content_item("checkbox_accept_certificates", checkbox_accept_certificates)
@ -115,29 +122,29 @@ class EmailNotificationsSettingsTab(BasePage):
self.auth_settings.add_content_item("auth_method_setting_selector", SelectionBarComponent(page, loc)) self.auth_settings.add_content_item("auth_method_setting_selector", SelectionBarComponent(page, loc))
loc = self.auth_input_fields_locators.get("Имя пользователя") loc = self.auth_input_fields_locators.get("Имя пользователя")
loc_user_input = loc.locator(SettingsFormLocators.SETTINGS_FORM_INPUT_FIELD).first loc_user_input = loc.locator("//input[@data-testid='NOTIFICATIONS_SMTP__auth_text-field__login']")
user_setting_input = TextInput(page, loc_user_input, "user_setting_input") user_setting_input = TextInput(page, loc_user_input, "user_setting_input")
self.auth_settings.add_content_item("user_setting_input", user_setting_input) self.auth_settings.add_content_item("user_setting_input", user_setting_input)
loc = self.auth_input_fields_locators.get("Пароль") loc = self.auth_input_fields_locators.get("Пароль")
loc_password_input = loc.locator(SettingsFormLocators.SETTINGS_FORM_INPUT_FIELD).first loc_password_input = loc.locator("//input[@data-testid='NOTIFICATIONS_SMTP__auth_text-field__password']")
password_setting_input = TextInput(page, loc_password_input, "password_password_input") password_setting_input = TextInput(page, loc_password_input, "password_password_input")
self.auth_settings.add_content_item("password_setting_input", password_setting_input) self.auth_settings.add_content_item("password_setting_input", password_setting_input)
loc = self.auth_input_fields_locators.get("Домен") loc = self.auth_input_fields_locators.get("Домен")
loc_domain_input = loc.locator(SettingsFormLocators.SETTINGS_FORM_INPUT_FIELD).first loc_domain_input = loc.locator("//input[@data-testid='NOTIFICATIONS_SMTP__auth_text-field__domain']")
domain_setting_input = TextInput(page, loc_domain_input, "domain_setting_input") domain_setting_input = TextInput(page, loc_domain_input, "domain_setting_input")
self.auth_settings.add_content_item("domain_setting_input", domain_setting_input) self.auth_settings.add_content_item("domain_setting_input", domain_setting_input)
loc = self.auth_input_fields_locators.get("Рабочая станция") loc = self.auth_input_fields_locators.get("Рабочая станция")
loc_workstation_input = loc.locator(SettingsFormLocators.SETTINGS_FORM_INPUT_FIELD).first loc_workstation_input = loc.locator("//input[@data-testid='NOTIFICATIONS_SMTP__auth_text-field__workstation']")
workstation_setting_input = TextInput(page, loc_workstation_input, "workstation_setting_input") workstation_setting_input = TextInput(page, loc_workstation_input, "workstation_setting_input")
self.auth_settings.add_content_item("workstation_setting_input", workstation_setting_input) self.auth_settings.add_content_item("workstation_setting_input", workstation_setting_input)
# Кнопка 'Тест' # Кнопка 'Тест'
self.test_button = TooltipButton(page, self.test_button = TooltipButton(page,
page.locator(SettingsFormLocators.SETTTINGS_FORM_SCROLL_CONTAINER).\ page.locator(SettingsFormLocators.SETTTINGS_FORM_SCROLL_CONTAINER).\
get_by_role("button", name='Тест'), locator("//button[@data-testid='NOTIFICATIONS_SMTP__common_btn__test']"),
"test_button") "test_button")
self.alert = AlertComponent(page) self.alert = AlertComponent(page)

View File

@ -38,9 +38,10 @@ class PushNotificationsSettingsTab(BasePage):
container_locator = self.page.locator(SettingsFormLocators.SETTINGS_FORM_INPUT_FORM_CONTAINER) container_locator = self.page.locator(SettingsFormLocators.SETTINGS_FORM_INPUT_FORM_CONTAINER)
self.input_fields_locators = self.settings_form.get_input_fields_locators(container_locator) self.input_fields_locators = self.settings_form.get_input_fields_locators(container_locator)
print(self.input_fields_locators)
loc = self.input_fields_locators.get("Сообщение") loc = self.input_fields_locators.get("Сообщение")
loc_message_input = loc.locator(SettingsFormLocators.SETTINGS_FORM_INPUT_FIELD).first loc_message_input = loc.locator("//input[@data-testid='PUSH_NOTIFICATIONS__text-field__message']")
message_setting_input = TextInput(page, loc_message_input, "message_setting_input") message_setting_input = TextInput(page, loc_message_input, "message_setting_input")
self.settings_form.add_content_item("message_setting_input", message_setting_input) self.settings_form.add_content_item("message_setting_input", message_setting_input)
@ -52,9 +53,6 @@ class PushNotificationsSettingsTab(BasePage):
self.settings_form.add_content_item("users_setting_input", users_setting_input) self.settings_form.add_content_item("users_setting_input", users_setting_input)
self.settings_form.add_content_item("users_list", InteractiveDropdownList(page)) self.settings_form.add_content_item("users_list", InteractiveDropdownList(page))
# self.settings_form.add_tooltip_button(page.locator(SettingsFormLocators.SETTTINGS_FORM_SCROLL_CONTAINER).\
# locator(SettingsFormLocators.PUSH_NOTIFICATION_BUTTON_SUBMIT),
# "submit_button")
self.settings_form.add_tooltip_button(page.locator(SettingsFormLocators.PUSH_NOTIFICATIONS_BUTTON_SUBMIT), self.settings_form.add_tooltip_button(page.locator(SettingsFormLocators.PUSH_NOTIFICATIONS_BUTTON_SUBMIT),
"submit_button") "submit_button")
@ -66,7 +64,7 @@ class PushNotificationsSettingsTab(BasePage):
selected_users = self.get_users_setting_value() selected_users = self.get_users_setting_value()
if len(selected_users) > 0: if len(selected_users) > 0:
clear_selection_button = self.page.locator(SettingsFormLocators.SETTTINGS_FORM_SCROLL_CONTAINER).\ clear_selection_button = self.page.locator(SettingsFormLocators.SETTINGS_FORM_INPUT_FORM_CONTAINER).\
get_by_role("combobox").locator(SettingsFormLocators.CLEAR_SELECTION_BUTTON) get_by_role("combobox").locator(SettingsFormLocators.CLEAR_SELECTION_BUTTON)
clear_selection_button.click() clear_selection_button.click()
@ -93,7 +91,7 @@ class PushNotificationsSettingsTab(BasePage):
str : Текущее значение поля настроек 'Пользователи'. str : Текущее значение поля настроек 'Пользователи'.
""" """
users_setting_field_loc = self.page.locator(SettingsFormLocators.SETTTINGS_FORM_SCROLL_CONTAINER).\ users_setting_field_loc = self.page.locator(SettingsFormLocators.SETTINGS_FORM_INPUT_FORM_CONTAINER).\
get_by_role("combobox").locator(SettingsFormLocators.SELECTED_VALUES) get_by_role("combobox").locator(SettingsFormLocators.SELECTED_VALUES)
return users_setting_field_loc.text_content().strip() return users_setting_field_loc.text_content().strip()
@ -162,9 +160,6 @@ class PushNotificationsSettingsTab(BasePage):
f"Push notifications settings input form item with name '{name}' is missing" f"Push notifications settings input form item with name '{name}' is missing"
) )
# self.settings_form.check_button_visibility("submit_button")
# self.settings_form.check_button_tooltip("submit_button", "Отправить Push уведомление")
def should_be_toolbar(self) -> None: def should_be_toolbar(self) -> None:
"""Проверяет наличие тулбара страницы. """Проверяет наличие тулбара страницы.

View File

@ -30,16 +30,19 @@ class SMSNotificationsSettingsTab(BasePage):
super().__init__(page) super().__init__(page)
toolbar_button_1 = self.page.get_by_role("navigation").filter(
has_text=re.compile("СМС")).get_by_role("button").nth(0)
toolbar_button_2 = self.page.get_by_role("navigation").filter(
has_text=re.compile("СМС")).get_by_role("button").nth(1)
self.toolbar = ToolbarComponent(page, "СМС") self.toolbar = ToolbarComponent(page, "СМС")
self.toolbar.add_tooltip_button(toolbar_button_1, "edit") toolbar_button_edit = self.page.get_by_role("navigation").filter(has_text=re.compile("СМС")). \
self.toolbar.add_tooltip_button(toolbar_button_1, "save") locator("//button[@data-testid='NOTIFICATIONS_SMS__btn__edit']")
self.toolbar.add_tooltip_button(toolbar_button_2, "cancel") self.toolbar.add_tooltip_button(toolbar_button_edit, "edit")
toolbar_button_save = self.page.get_by_role("navigation").filter(has_text=re.compile("СМС")). \
locator("//button[@data-testid='NOTIFICATIONS_SMS__btn__submit']")
self.toolbar.add_tooltip_button(toolbar_button_save, "save")
toolbar_button_cancel = self.page.get_by_role("navigation").filter(has_text=re.compile("СМС")). \
locator("//button[@data-testid='NOTIFICATIONS_SMS__btn__cancelEdit']")
self.toolbar.add_tooltip_button(toolbar_button_cancel, "cancel")
# Форма для отображения/редактирования полей настроек СМС уведомлений # Форма для отображения/редактирования полей настроек СМС уведомлений
self.settings_form = SettingsFormComponent(page) self.settings_form = SettingsFormComponent(page)
@ -48,17 +51,17 @@ class SMSNotificationsSettingsTab(BasePage):
self.input_fields_locators = self.settings_form.get_input_fields_locators(container_locator) self.input_fields_locators = self.settings_form.get_input_fields_locators(container_locator)
loc = self.input_fields_locators.get("ip") loc = self.input_fields_locators.get("ip")
loc_message_input = loc.locator(SettingsFormLocators.SETTINGS_FORM_INPUT_FIELD).first loc_message_input = loc.locator("//input[@data-testid='NOTIFICATIONS_SMS__text-field__ip']")
ip_setting_input = TextInput(page, loc_message_input, "ip_setting_input") ip_setting_input = TextInput(page, loc_message_input, "ip_setting_input")
self.settings_form.add_content_item("ip_setting_input", ip_setting_input) self.settings_form.add_content_item("ip_setting_input", ip_setting_input)
loc = self.input_fields_locators.get("Имя пользователя") loc = self.input_fields_locators.get("Имя пользователя")
loc_user_input = loc.locator(SettingsFormLocators.SETTINGS_FORM_INPUT_FIELD).first loc_user_input = loc.locator("//input[@data-testid='NOTIFICATIONS_SMS__text-field__login']")
user_setting_input = TextInput(page, loc_user_input, "user_setting_input") user_setting_input = TextInput(page, loc_user_input, "user_setting_input")
self.settings_form.add_content_item("user_setting_input", user_setting_input) self.settings_form.add_content_item("user_setting_input", user_setting_input)
loc = self.input_fields_locators.get("Пароль") loc = self.input_fields_locators.get("Пароль")
loc_password_input = loc.locator(SettingsFormLocators.SETTINGS_FORM_INPUT_FIELD).first loc_password_input = loc.locator("//input[@data-testid='NOTIFICATIONS_SMS__text-field__password']")
password_setting_input = TextInput(page, loc_password_input, "password_setting_input") password_setting_input = TextInput(page, loc_password_input, "password_setting_input")
self.settings_form.add_content_item("password_setting_input", password_setting_input) self.settings_form.add_content_item("password_setting_input", password_setting_input)
@ -68,7 +71,7 @@ class SMSNotificationsSettingsTab(BasePage):
self.settings_form.add_content_item("password_hidden_icon", password_hidden_icon) self.settings_form.add_content_item("password_hidden_icon", password_hidden_icon)
self.settings_form.add_tooltip_button(page.locator(SettingsFormLocators.SETTTINGS_FORM_SCROLL_CONTAINER).\ self.settings_form.add_tooltip_button(page.locator(SettingsFormLocators.SETTTINGS_FORM_SCROLL_CONTAINER).\
get_by_role("button", name='Тест'), locator("//button[@data-testid='NOTIFICATIONS_SMS__btn__onSelect']"),
"test_button") "test_button")
# Действия: # Действия:
def click_cancel_button(self) -> None: def click_cancel_button(self) -> None: