Protractor — инструмент для автоматизированного тестирования Angular и AngularJS приложений. Он позволяет интегрировать проверку взаимодействия с элементами пользовательского интерфейса, включая обработку событий, уведомлений и откликов устройства, таких как вибрация.
В веб-приложениях уведомления могут реализовываться с помощью Notification API. В Protractor тестирование уведомлений требует работы с асинхронным кодом и проверкой состояния уведомлений:
browser.executeScript(() => {
return Notification.permission;
}).then(permission => {
console.log('Текущее разрешение на уведомления:', permission);
});
Для симуляции разрешений можно использовать Chrome Options:
const { browser } = require('protractor');
browser.waitForAngularEnabled(false);
browser.getCapabilities().then(capabilities => {
console.log(capabilities.get('browserName'));
});
Можно запретить или разрешить уведомления на уровне профиля браузера, что позволяет тестам работать предсказуемо.
API вибрации в браузере (navigator.vibrate) позволяет
устройствам с поддержкой отдавать тактильный отклик. Protractor
позволяет проверить вызов вибрации через
executeScript:
browser.executeScript(() => {
navigator.vibrate(200);
return navigator.vibrate ? 'vibration triggered' : 'vibration not supported';
}).then(result => {
console.log(result);
});
Для тестирования последовательных паттернов вибрации можно передать массив чисел, где значения определяют длительность вибрации и паузы:
browser.executeScript(() => {
navigator.vibrate([100, 50, 100, 50]);
});
Ключевой момент: напрямую измерить физическую вибрацию невозможно через браузер, поэтому проверка основывается на вызове метода и его параметрах.
Protractor использует WebDriverJS, что требует
контроля асинхронных операций через async/await или
then:
it('должен вызвать вибрацию', async () => {
const result = await browser.executeScript(() => navigator.vibrate(300));
expect(result).toBe(true);
});
Метод executeScript возвращает результат выполнения
JavaScript в контексте страницы, что позволяет проверять корректность
вызовов без взаимодействия с реальным устройством.
Уведомления генерируют события show, click
и close. Их можно перехватывать и проверять:
browser.executeScript(() => {
return new Promise(resolve => {
const notification = new Notification('Тест', { body: 'Сообщение' });
notification.ons how = () => resolve('show event fired');
});
}).then(result => {
expect(result).toBe('show event fired');
});
Использование промисов позволяет контролировать момент отображения уведомления, что важно для тестирования последовательности действий в UI.
Protractor автоматически ожидает завершения Angular-зон, что облегчает тестирование уведомлений и вызовов вибрации в компонентах:
element(by.id('vibrate-button')).click();
browser.executeScript(() => navigator.vibrate(150));
В Angular компонентах можно комбинировать тестирование событий с
наблюдением за состоянием компонентов через
element.getText() или
element.isDisplayed().
Не все браузеры поддерживают Notification API или вибрацию. Для корректной работы тестов рекомендуется проверять наличие API перед вызовом:
browser.executeScript(() => {
return !!(window.Notification && navigator.vibrate);
}).then(supported => {
expect(supported).toBe(true);
});
Для мобильных эмуляторов можно использовать Chrome DevTools Protocol
через browser.driver.sendChromiumCommand, чтобы имитировать
вибрацию и уведомления в тестах.
Protractor позволяет вести лог событий при тестировании уведомлений:
browser.manage().logs().get('browser').then(entries => {
entries.forEach(entry => console.log(entry.message));
});
Такой подход помогает отлавливать ошибки вызова API, недоступность метода или проблемы с разрешениями.
browser.wait для контроля момента
появления уведомления.Эти подходы обеспечивают надежное тестирование взаимодействий, связанных с вибрацией и уведомлениями, и позволяют интегрировать проверки в полноценные сценарии автоматизации с Protractor.