Protractor — это фреймворк для автоматизированного тестирования
Angular-приложений, построенный поверх WebDriverJS. Отладка тестов в
Protractor играет ключевую роль при выявлении сложных проблем с
асинхронностью, элементами страницы и взаимодействием с
Angular-приложением. Один из основных инструментов для этого —
встроенная возможность debugger.
debuggerdebugger в JavaScript — это оператор, который
останавливает выполнение кода в том месте, где он вызван, если запущен
процесс в режиме отладки. В контексте Protractor это позволяет:
Для использования debugger необходимо запускать
Protractor с Node.js в режиме инспекции. Это делается через ключи:
node --inspect-brk ./node_modules/.bin/protractor protractor.conf.js
--inspect-brk — запускает процесс Node.js с включенным
отладчиком и приостанавливает выполнение перед стартом теста.debugger в тестахПростейший пример использования:
describe('Angular приложение', function() {
it('должно корректно загружать главную страницу', async function() {
await browser.get('https://example.com');
const title = await browser.getTitle();
debugger; // выполнение остановится здесь
expect(title).toEqual('Example Domain');
});
});
В момент срабатывания debugger выполнение теста
приостанавливается, и можно проверить:
title в примере).Protractor использует async/await для работы с промисами
WebDriver. При использовании debugger важно помнить:
await завершает промис и возвращает его значение.debugger до
await, можно увидеть сам объект промиса, а не
результат.debugger после
await, можно проверить уже вычисленное значение.Пример:
const button = element(by.id('submit'));
debugger; // проверка объекта ElementFinder
await button.click();
debugger; // проверка результата клика и состояния страницы
Вместо явного debugger можно использовать:
browser.pause() — встроенный метод Protractor, который
запускает интерактивную паузу в консоли Node.js.Пример использования browser.pause():
it('тест с паузой', async function() {
await browser.get('https://example.com');
await browser.pause(); // можно управлять шагами через REPL
const header = await element(by.tagName('h1')).getText();
expect(header).toBe('Example Domain');
});
browser.pause() особенно полезен для визуальной проверки
состояния страницы и элементов без остановки всего Node-процесса.
debugger после важных взаимодействий помогает
выявлять проблемы с рендерингом Angular.browser.sleep()
осторожно — иногда используется для визуального контроля, но
может скрывать проблемы синхронизации.Protractor автоматически ждет завершения асинхронных операций Angular
(зон и HTTP-запросов). Однако при сложных сценариях с внешними
библиотеками или нестандартными промисами debugger
помогает:
Использование debugger в Protractor позволяет не только
исправлять ошибки тестов, но и глубже понимать поведение
Angular-приложений, выявлять скрытые проблемы синхронизации и повышать
стабильность автоматизированного тестирования.