Shepherd.js — это библиотека для создания интерактивных пользовательских туров в веб-приложениях. Она позволяет направлять пользователя через интерфейс, выделяя элементы, показывая подсказки и последовательные шаги, что особенно полезно для автоматизации тестов и обучения пользователей новым функциональным элементам приложения.
Ключевые возможности включают:
Для создания тура используется конструктор Shepherd.Tour:
const tour = new Shepherd.Tour({
defaultStepOptions: {
classes: 'shepherd-theme-arrows',
scrollTo: true
}
});
defaultStepOptions задает глобальные настройки всех
шагов, включая CSS-классы и поведение прокрутки.scrollTo: true автоматически прокручивает страницу к
элементу, на который указывает шаг.Добавление шагов осуществляется методом addStep:
tour.addStep({
id: 'step1',
text: 'Это первый шаг вашего тура',
attachTo: {
element: '.menu-button',
on: 'bottom'
},
buttons: [
{
text: 'Далее',
action: tour.next
}
]
});
attachTo.element — CSS-селектор элемента, к которому
прикрепляется подсказка.attachTo.on — сторона элемента, где будет отображаться
подсказка (top, bottom, left,
right).buttons — массив кнопок с действиями.Shepherd.js предоставляет события на уровне тура и шагов.
Примеры событий тура:
tour.on('start', () => console.log('Тур начат'));
tour.on('complete', () => console.log('Тур завершен'));
tour.on('cancel', () => console.log('Тур отменен'));
События шага:
tour.addStep({
id: 'step2',
text: 'Следующий шаг',
buttons: [
{
text: 'Далее',
action: () => {
console.log('Пользователь нажал Далее');
tour.next();
}
}
],
when: {
show: () => console.log('Шаг отображен'),
hide: () => console.log('Шаг скрыт')
}
});
when.show вызывается при отображении шага.when.hide вызывается при скрытии шага.Shepherd.js можно эффективно использовать для автоматизации тестов пользовательских интерфейсов. Примеры интеграции:
let stepOrder = [];
tour.on('show', (event) => stepOrder.push(event.step.id));
tour.start();
// После завершения тура
console.assert(JSON.stringify(stepOrder) === JSON.stringify(['step1', 'step2', 'step3']));
show и complete позволяют
отслеживать правильность последовательности шагов.tour.addStep({
id: 'clickStep',
text: 'Нажмите кнопку для продолжения',
attachTo: { element: '.continue-btn', on: 'right' },
buttons: [
{
text: 'Симуляция клика',
action: () => {
document.querySelector('.continue-btn').click();
tour.next();
}
}
]
});
tour.addStep({
id: 'asyncStep',
text: 'Подождите загрузку данных',
beforeShowPromise: () => {
return fetch('/api/data')
.then(response => response.json())
.then(data => console.log('Данные загружены', data));
},
buttons: [{ text: 'Далее', action: tour.next }]
});
beforeShowPromise позволяет задерживать отображение
шага до завершения асинхронных операций, что критично при тестировании
динамических интерфейсов.Shepherd.js поддерживает темы и кастомизацию стилей:
const tour = new Shepherd.Tour({
defaultStepOptions: {
classes: 'shepherd-theme-dark',
cancelIcon: { enabled: true },
scrollTo: { beh * avior: 'smooth', block: 'center' }
}
});
classes — предустановленные темы
(shepherd-theme-arrows,
shepherd-theme-dark).cancelIcon — отображение кнопки отмены тура.scrollTo.behavior позволяет задать плавную прокрутку к
элементу.Для SPA или страниц с динамическим контентом полезно проверять наличие элемента перед отображением шага:
tour.addStep({
id: 'dynamicStep',
text: 'Этот шаг появится только если элемент доступен',
attachTo: { element: '.dynamic-element', on: 'top' },
beforeShow: () => {
if (!document.querySelector('.dynamic-element')) {
console.log('Элемент не найден, пропускаем шаг');
tour.next();
}
},
buttons: [{ text: 'Далее', action: tour.next }]
});
Shepherd.js позволяет создавать несколько туров и переключаться между ними:
const tour1 = new Shepherd.Tour({ defaultStepOptions: { classes: 'tour1' } });
const tour2 = new Shepherd.Tour({ defaultStepOptions: { classes: 'tour2' } });
// Запуск второго тура после завершения первого
tour1.on('complete', () => tour2.start());
tour1.start();
Shepherd.js можно интегрировать с внешними библиотеками:
Тестирование с Cypress или Playwright — использование событий для синхронизации автоматических скриптов с визуальными подсказками.
Локализация текста шагов — использование динамического контента и переводов на разные языки.
Кастомные кнопки и действия — выполнение любых функций JavaScript при нажатии кнопок.
Например, можно создать кнопку «Пропустить все шаги», которая завершает тур мгновенно:
tour.addStep({
id: 'skipStep',
text: 'Хотите пропустить тур?',
buttons: [
{ text: 'Пропустить', action: tour.complete },
{ text: 'Продолжить', action: tour.next }
]
});
Эта функциональность позволяет интегрировать Shepherd.js не только как инструмент обучения пользователя, но и как основу для программного контроля интерфейса в автоматических тестах.