Теперь, когда мы увидели все концепции транспортира в предыдущих главах, давайте разберемся с концепциями отладки в этой главе.
Вступление
Сквозные (e2e) тесты очень трудно отлаживать, поскольку они зависят от всей экосистемы этого приложения. Мы видели, что они зависят от различных действий или, в частности, мы можем сказать, что от предыдущих действий, таких как вход в систему, а иногда они зависят от разрешения. Другая трудность в отладке тестов e2e заключается в его зависимости от WebDriver, поскольку он работает по-разному в разных операционных системах и браузерах. Наконец, отладка тестов e2e также генерирует длинные сообщения об ошибках и затрудняет разделение проблем, связанных с браузером, и ошибок процесса тестирования.
Типы неудач
Могут быть разные причины сбоя тестовых наборов, и ниже приведены некоторые известные типы сбоев:
Ошибка WebDriver
Когда команда не может быть завершена, WebDriver выдает ошибку. Например, браузер не может получить указанный адрес или элемент не найден, как ожидалось.
Неожиданный сбой WebDriver
Неожиданный сбой браузера и ОС происходит, когда не удается обновить диспетчер веб-драйверов.
Отказ транспортира для Angular
Ошибка Protractor для Angular происходит, когда Protractor не нашел Angular в библиотеке, как ожидалось.
Отказ транспортира Angular2
При сбое такого типа Protractor завершится ошибкой, если в конфигурации не найден параметр useAllAngular2AppRoots. Это происходит потому, что без этого процесс тестирования будет рассматривать один единственный корневой элемент, ожидая более одного элемента в процессе.
Отказ транспортира за время ожидания
Этот вид сбоя происходит, когда спецификация теста попадает в цикл или длинный пул и не может вовремя вернуть данные.
Ожидание провал
Один из самых распространенных тестовых сбоев, который показывает, как выглядит обычный сбой ожидания.
Почему отладка важна в транспортире?
Предположим, что если вы написали тестовые наборы, а они потерпели неудачу, очень важно знать, как отлаживать эти тестовые примеры, потому что было бы очень трудно найти точное место, где произошла ошибка. При работе с Protractor вы получите несколько длинных ошибок красного шрифта в командной строке.
Приостановка и отладка теста
Способы отладки в Protractor описаны здесь & miuns;
Метод паузы
Использование метода паузы для отладки тестовых случаев в Protractor — один из самых простых способов. Мы можем ввести следующую команду в том месте, где мы хотим приостановить наш тестовый код & miuns;
browser.pause();
Когда исполняемые коды нажимают на указанную выше команду, в этот момент она приостанавливает работающую программу. После этого мы можем дать следующие команды в соответствии с нашими предпочтениями —
Тип C для продвижения вперед
Когда команда исчерпана, мы должны набрать C, чтобы двигаться вперед. Если вы не введете C, тест не запустит полный код и завершится неудачей из-за ошибки тайм-аута Jasmine.
Введите repl для входа в интерактивный режим
Преимущество интерактивного режима заключается в том, что мы можем отправлять команды WebDriver в наш браузер. Если мы хотим войти в интерактивный режим, то наберите repl .
Введите Ctrl-C для выхода и продолжения тестов
Для выхода из теста из состояния паузы и продолжения теста с того места, где он остановился, нам нужно набрать Ctrl-C.
пример
В этом примере у нас есть файл спецификации ниже с именем example_debug.js , транспортир пытается идентифицировать элемент с помощью locator by.binding (‘mmmm’), но на странице URL ( https://angularjs.org/) нет элемента с указанным локатор.
describe('Suite for protractor debugger',function(){ it('Failing spec',function(){ browser.get("http://angularjs.org"); element(by.model('yourName')).sendKeys('Vijay'); //Element doesn't exist var welcomeText = element(by.binding('mmmm')).getText(); expect('Hello '+welcomeText+'!').toEqual('Hello Ram!') }); });
Теперь для выполнения вышеуказанного теста нам нужно добавить код browser.pause (), где вы хотите приостановить тест, в приведенном выше файле спецификации. Это будет выглядеть следующим образом —
describe('Suite for protractor debugger',function(){ it('Failing spec',function(){ browser.get("http://angularjs.org"); browser.pause(); element(by.model('yourName')).sendKeys('Vijay'); //Element doesn't exist var welcomeText = element(by.binding('mmmm')).getText(); expect('Hello '+welcomeText+'!').toEqual('Hello Ram!') }); });
Но перед выполнением нам нужно также внести некоторые изменения в файл конфигурации. Мы вносим следующие изменения в ранее использовавшийся файл конфигурации с именем example_configuration.js в предыдущей главе:
// An example configuration file. exports.config = { directConnect: true, // Capabilities to be passed to the webdriver instance. capabilities: { 'browserName': 'chrome' }, // Framework to use. Jasmine is recommended. framework: 'jasmine', // Spec patterns are relative to the current working directory when // protractor is called. specs: ['example_debug.js'], allScriptsTimeout: 999999, jasmineNodeOpts: { defaultTimeoutInterval: 999999 }, onPrepare: function () { browser.manage().window().maximize(); browser.manage().timeouts().implicitlyWait(5000); } };
Теперь выполните следующую команду —
protractor example_configuration.js
Отладчик запустится после вышеуказанной команды.
Метод отладчика
Использование метода паузы для отладки тестовых случаев в Protractor является немного более сложным способом. Мы можем набрать следующую команду в том месте, где хотим сломать наш тестовый код:
browser.debugger();
Он использует отладчик узла для отладки тестового кода. Для запуска вышеуказанной команды мы должны ввести следующую команду в отдельной командной строке, которая открылась из местоположения тестового проекта:
protractor debug protractor.conf.js
В этом методе нам также нужно набрать C в терминале, чтобы продолжить тестовый код. Но в отличие от метода паузы, в этом методе он должен быть набран только один раз.
пример
В этом примере мы используем тот же файл спецификации с именем b example_debug.js , который использовался выше. Разница лишь в том, что вместо browser.pause () нам нужно использовать browser.debugger (), где мы хотим сломать тестовый код. Это будет выглядеть следующим образом —
describe('Suite for protractor debugger',function(){ it('Failing spec',function(){ browser.get("http://angularjs.org"); browser.debugger(); element(by.model('yourName')).sendKeys('Vijay'); //Element doesn't exist var welcomeText = element(by.binding('mmmm')).getText(); expect('Hello '+welcomeText+'!').toEqual('Hello Ram!') }); });
Мы используем тот же файл конфигурации, example_configuration.js , который использовался в приведенном выше примере.
Теперь запустите тест транспортира со следующей опцией командной строки отладки.
protractor debug example_configuration.js
Отладчик запустится после вышеуказанной команды.