Расширение предназначено для получения селекторов (XPath и CSS) элементов веб-страниц и их передачи в Студию для автоматизации, а также для записи действий пользователя в браузере.
Установите расширение из официального магазина дополнений (Chrome Web Store или Firefox Add-ons) по ссылке из Студии.
Для Chrome:
Скачайте и распакуйте архив с расширением.
Перейдите на страницу chrome://extensions/.
Включите «Режим разработчика» (Developer mode).
Нажмите «Загрузить распакованное расширение».
Укажите папку с файлами расширения в проводнике.
Для Firefox:
Перейдите на страницу about:addons.
Нажмите на иконку шестеренки.
Нажмите «Установить дополнение из файла...» в открывшемся меню.
Укажите файл расширения в формате .xpi в проводнике.
По нажатии на иконку расширения открывается виджет.

Опции «Полный XPath» / «Полный CSS-селектор» – переключают режим записи между коротким (относительным) и полным (абсолютным) путем.
Кнопка «Указать элемент» – активирует режим выбора объекта на странице.
Поля цXPath» и «CSS-селектор» – отображают полученные данные.
Переключатель «Режим поиска» – выбор типа селектора для проверки.
Кнопка «Найти элемент» – проверяет наличие элемента на странице по введенному селектору.
Кнопка «Сохранить» – передает данные в Студию.


Короткий путь (по умолчанию): создает лаконичные селекторы (например, //button[@id="login"]). Рекомендуется для стабильной работы.
Полный путь: если активны чекбоксы «Полный...», генерируется абсолютный путь от корня страницы (/html/body/...). Используйте, если у элемента нет уникальных атрибутов.
Откройте нужную веб-страницу.
Откройте виджет шпиона и нажмите «Указать элемент».
Наведите курсор на нужный объект (он подсветится) и нажмите ЛКМ.
Данные автоматически появятся в полях «XPath» и «CSS-селектор». Кнопка «Сохранить» станет активной.
Для отмены режима выбора до клика снова откройте виджет и нажмите «Отменить выбор элемента».
Выберите режим поиска (XPath или CSS-селектор).
Введите или измените значение в поле.
Нажмите «Найти элемент»:
Если элемент один — он подсветится на 2 секунды.
Если элементов несколько — отобразится их количество (подсветки не будет).
Если элементов нет — отобразится «Найдено элементов: 0».
Короткий путь (по умолчанию): создает лаконичные селекторы (например, //button[@id="login"]). Рекомендуется для стабильной работы.
Полный путь: если активны чекбоксы «Полный...», генерируется абсолютный путь от корня страницы (/html/body/...). Используйте, если у элемента нет уникальных атрибутов.
Связь со Студией: Для корректной работы не закрывайте Студию до окнчания работы со шпионом/рекордером.
Автономность: Расширение работает без доступа к интернету (в локальных сетях).
<script>
AJS.toInit(function() {
var toc = document.querySelector('.toc-float');
var aside = toc.closest('.cell.aside');
var mainHeader = document.getElementById('main-header');
var auiHeader = document.querySelector('nav.aui-header');
var marginTop = 10; // дополнительный отступ сверху
// Вставка заголовка, если ещё не вставлен
function insertHeader() {
if (!toc.querySelector('.toc-header')) {
var header = document.createElement('div');
header.textContent = 'На этой странице:';
header.className = 'toc-header';
header.style.fontWeight = 'bold';
header.style.marginBottom = '10px';
toc.insertBefore(header, toc.firstChild);
}
}
// Применение inline-стилей
function applyStyles() {
insertHeader();
// Получаем ширину родителя
var asideRect = aside.getBoundingClientRect();
// Вычисляем вертикальный отступ
var offset = 0;
if (mainHeader) {
var mhRect = mainHeader.getBoundingClientRect();
if (mhRect.bottom > 0 && mhRect.top < window.innerHeight) {
offset = mhRect.bottom;
}
}
if (offset === 0 && auiHeader) {
var ahRect = auiHeader.getBoundingClientRect();
offset = ahRect.bottom;
}
var topOffset = Math.max(offset + marginTop, asideRect.top);
Object.assign(toc.style, {
position: 'fixed',
top: topOffset + 'px',
left: asideRect.left + 'px',
width: asideRect.width + 'px',
maxHeight: (window.innerHeight - topOffset - 20) + 'px',
overflowY: 'auto',
boxSizing: 'border-box',
border: '1px solid #ddd',
borderRadius: '4px',
padding: '15px',
zIndex: 'auto'
});
}
// Инициалный вызов
applyStyles();
// Обновление при скролле, ресайзе окна
window.addEventListener('scroll', applyStyles);
window.addEventListener('resize', applyStyles);
// Наблюдатель за изменением размеров родителя
if (window.ResizeObserver) {
new ResizeObserver(applyStyles).observe(aside);
}
});
</script> |