Настройка именования элементов пользовательского интерфейса для взаимодействия с пользователем

Материал из Документация Ключ-АСТРОМ

Настройка именования элементов пользовательского интерфейса для взаимодействия с пользователем

Ранний доступ

Каждое взаимодействие пользователя включает в себя подробную информацию о задействованном элементе пользовательского интерфейса. Для веб-интерфейсов это HTML-элементы. Их имена используются в описаниях взаимодействий пользователей в приложении Пользователи и сессии. На этой странице объясняется, как работает именование элементов пользовательского интерфейса и как вы можете его настроить.

Определение имени элемента пользовательского интерфейса по умолчанию

JavaScript-код RUM определяет имя элемента пользовательского интерфейса и сохраняет его в поле ui_element.detected_name при взаимодействии с пользователем. Для этого он проверяет атрибуты в следующем порядке и использует первое доступное совпадение:

  1. aria-label
  2. title
  3. name (например, для элементов input, form, iframe)
  4. data-testid (широко используемый пользовательский атрибут для идентификации узла DOM во время тестирования)
  5. placeholder (для элементов ввода)
  6. id

Если вы не зададите собственное имя, Ключ-АСТРОМ будет использовать ui_element.detected_name для определения поля ui_element.name, используемого в описаниях взаимодействия с пользователем в приложении Пользователи и сессии. Имя ограничено 32 символами. Для получения подробной информации о полях см. раздел «Взаимодействие с пользователем» в семантическом словаре.

Обработка элемента aria-hidden

Когда пользователь щелкает по элементу внутри поддерева aria-hidden="true", JavaScript-код RUM автоматически проходит вверх по цепочке предков, чтобы найти первого предка за пределами самого внешнего aria-hidden="true" поддерева, и использует его имя. Для вложенных aria-hidden поддеревьев найденным элементом является предок самой внешней скрытой границы. Это поведение применяется только к взаимодействиям по клику.

Это гарантирует, что захваченные имена будут отражать видимый элемент управления (например, кнопку «Удалить»), а не скрытый декоративный дочерний элемент (например, SVG-элемент <path>). Элемент, являющийся прямым дочерним элементом <body>, будет использовать исходный элемент.

Пример

<!-- Кнопка-иконка в стиле Material UI -->
<button aria-label="Удалить" class="MuiIconButton-root">
  <svg aria-hidden="true" class="MuiSvgIcon-root" viewBox="0 0 24 24">
    <path d="M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12z" />
  </svg>
</button>

Когда пользователь щелкает по элементу <path>, зафиксированное взаимодействие отображает следующее:

  • tag_name: "button"
  • detected_name: "Delete"
  • name_origin: "aria-label"

Чтобы отменить автоматическое разрешение, добавьте data-dt-children-name к родительскому элементу; см. раздел «Задание пользовательского имени для элемента и его дочерних элементов».

Задайте пользовательское имя

Если имя, обнаруженное по умолчанию, не соответствует вашим требованиям, вы можете его настроить. JavaScript RUM сохраняет пользовательские имена в поле взаимодействия с пользователем ui_element.custom_name, наряду со стандартным полем ui_element.detected_name. Затем Ключ-АСТРОМ использует ui_element.custom_name вместо ui_element.detected_name для определения ui_element.name.

Задайте пользовательское имя для конкретного элемента

Чтобы задать пользовательское имя для конкретного элемента, добавьте HTML-атрибут data-dt-name. Пустые значения или значения, состоящие только из пробелов, data-dt-name игнорируются.

<!-- Кнопка получает одновременно свойства ui_element.detected_name="Submit" и ui_element.custom_name="Checkout Button" -->
<button name="Отправить" data-dt-name="Кнопка оформления заказа">Отправить</button>

Правильно обрабатывайте кнопки-иконки

Кнопки с иконками — это кнопки, видимой частью которых является вложенный элемент иконки (например, svg), и именно по нему чаще всего происходит клик. Если вы зададите data-dt-name пользовательское имя только для самой кнопки, оно будет использоваться только при клике на элемент кнопки. Если клик попадет на вложенную иконку, пользовательское имя не будет сохранено.

<!-- Нажатие кнопки: ui_element.custom_name="Удалить элемент"; Нажатие на иконку: нет пользовательского имени -->
<button data-dt-name="Удалить элемент">
  <svg> <!-- значок корзины --> </svg>
</button>

Чтобы закрыть и кнопку, и её значок, используйте data-dt-children-name методы, описанные в следующем разделе.

Задайте пользовательское имя для элемента и его дочерних элементов

Добавьте атрибут data-dt-children-name, чтобы задать пользовательское имя для самого элемента и для всех его дочерних элементов. Это позволит вам:

  • Обозначить все элементы в списке или таблице.
  • Присвоить имена всем элементам управления на панели инструментов или в разделе формы.
  • Применять единообразное именование к динамическому контенту.
  • Именовать элементы контейнера, представляющие бизнес-сущности.

Пустые значения или значения, содержащие только пробелы, data-dt-children-name игнорируются.

Примеры

<!-- Сам div панели инструментов получает ui_element.custom_name="Действие панели инструментов" -->
<!-- Все кнопки внутри также получают ui_element.custom_name="Toolbar Action" -->
<div class="toolbar" data-dt-children-name="Toolbar Action">
  <button> ✂️ </button> <!-- ui_element.custom_name="Toolbar Action" -->
  <button> 📋 </button> <!-- ui_element.custom_name="Toolbar Action" -->
  <button> 🔍 </button> <!-- ui_element.custom_name="Toolbar Action" -->
</div>

<!-- Fieldset получает ui_element.custom_name="Billing Field" -->
<!-- Все поля ввода наследуют одно и то же пользовательское имя -->
<fieldset data-dt-children-name="Поле для выставления счетов">
  <input type="text" name="address"> <!-- ui_element.detected_name="address", ui_element.custom_name="Billing Field" -->
  <input type="text" name="city"> <!-- ui_element.detected_name="city", ui_element.custom_name="Billing Field" -->
  <input type="text" name="zip"> <!-- ui_element.detected_name="zip", ui_element.custom_name="Billing Field" -->
</fieldset>

<!-- Контейнер карточки и его содержимое получают осмысленные имена элементов пользовательского интерфейса -->
<div class="card" data-dt-children-name="Product Card">
  <!-- Сам div-элемент карточки содержит ui_element.custom_name="Product Card" -->
  <img src="product.jpg"> <!-- ui_element.custom_name="Product Card" -->
  <h3>Название товара</h3> <!-- ui_element.custom_name="Карточка товара" -->
  <button>Добавить в корзину</button> <!-- ui_element.custom_name="Карточка товара" -->
</div>

Объединить атрибуты именования

Вы можете комбинировать data-dt-name и data-dt-children-name. В этом случае следуйте этим рекомендациям и помните о правилах наследования.

Передовые методы

  • Используйте data-dt-name для обозначения конкретных, уникальных элементов, требующих индивидуальной идентификации.
  • Используйте data-dt-children-name для групп, в которых контейнер и/или его дочерние элементы имеют общий бизнес-контекст.
  • Объедините оба атрибута, если контейнеру требуется собственное имя, а дочерним элементам — другое общее имя:
<div data-dt-name="Панель навигации" data-dt-children-name="Элемент навигации">
  <!-- Контейнер: ui_element.custom_name="Панель навигации" -->
  <a href="/home">Главная</a> <!-- ui_element.custom_name="Nav Item" -->
  <a href="/products">Магазин</a> <!-- ui_element.custom_name="Nav Item" -->
</div>

Правила наследования

Пользовательское имя элемента определяется в следующем порядке приоритета:

  1. Приоритет всегда имеет собственный элемент data-dt-name.
  2. Если у элемента нет собственного data-dt-name, используется его собственный data-dt-children-name.
  3. Если у самого элемента нет ни одного из этих атрибутов, используется атрибут data-dt-children-name ближайшего предка.

Примеры

<!-- Этот div имеет ui_element.custom_name="Card" (использует собственное имя дочерних элементов data-dt-children-name) -->
<div data-dt-children-name="Card">

  <!-- Этот div имеет ui_element.custom_name="Card Action" (использует собственное имя data-dt-children-name) -->
  <div data-dt-children-name="Действие карточки">
    <button>Редактировать</button> <!-- ui_element.custom_name="Действие карточки" (наследует) -->
    <button data-dt-name="Сохранить">Сохранить</button> <!-- ui_element.custom_name="Сохранить" (собственный data-dt-name имеет приоритет) -->
  </div>

  <p>Содержимое карточки</p> <!-- ui_element.custom_name="Card" (наследует от родительского элемента) -->
</div>

<!-- Этот div содержит ui_element.custom_name="Dashboard Widget" -->
<div data-dt-children-name="Виджет панели управления">

  <!-- ui_element.custom_name="Widget Header" (data-dt-name имеет приоритет над наследованием) -->
  <header data-dt-name="Заголовок виджета">
    <h2>Продажи</h2> <!-- ui_element.custom_name="Dashboard Widget" (наследует от родительского элемента) -->
  </header>

  <!-- Этот div имеет ui_element.custom_name="Chart Container" (использует собственное имя data-dt-children-name) -->
  <div data-dt-children-name="Контейнер диаграммы">
    <canvas>Диаграмма</canvas> <!-- ui_element.custom_name="Контейнер диаграммы" (наследует от родительского элемента) -->
  </div>

  <footer>
    <button>Обновить</button> <!-- ui_element.custom_name="Виджет панели управления" (наследует от предка) -->
  </footer>
</div>