Учебники

Транспортир — отладка

Теперь, когда мы увидели все концепции транспортира в предыдущих главах, давайте разберемся с концепциями отладки в этой главе.

Вступление

Сквозные (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

Отладчик запустится после вышеуказанной команды.