Очень быстро проходят интеграционные тесты

Использую версию 5.1.0
Очень быстро проходят тесты и в какие-то моменты падают разные варианты шагов.
Как можно добавлять таймаут перед каждым шагом?

Проблемы первого мира

Есть такой вариант, как можно замедлить запуск, но довольно старанное желание, возможно вам нужно просто стабилизировать тесты, пересмотреть кейсы, добавить вейты нужные, а не вдаваться к таким радикальным мерам, этим вы рискуете значительно увиличить время запуска:

var origFn = browser.driver.controlFlow().execute;
browser.driver.controlFlow().execute = function () {
  var args = arguments;

  origFn.call(browser.driver.controlFlow(), function () {
    //increase or reduce time value, its in millisecond
    return protractor.promise.delayed(200);
  });

  return origFn.apply(browser.driver.controlFlow(), args);
};

В вашем вопросе нет конкретики.

Начинаем детективное расследование:

  1. По коственным признакам удалось узнать что вы используете ProtractorJS (тег в названии темы)
  2. Вы называете тесты на protractorjs интеграционными - что неверно, но да ладно, проигнорируем это
  3. Вы говорите про шаги, и что разные варианты шагов падают. Предполагаю что вы говорите про шаги которые в CucumberJS (Gerkin steps)
  4. Предполагаю что вы хотите “замедлить тесты” только локально, замедлять на CI - нет особого смысла

Я бы рекомендовал

  1. Забыть об идее замедлить тесты. Это противоречит самой сути автотестов - они должны бежать максимально быстро, насколько возможно
  2. Поставьте брейкпоинты и посмотрите что у вас происходит
  3. Если уж замедлить очень хочется - попробуйте blocking-proxy для локального дебага - GitHub - angular/blocking-proxy: Proxy for WebDriver tests that waits for Angular application stability. - есть хорошая опция которая делает то что вам нужно
4 лайка

Вы так говорите будто это что-то плохое :smiley:

P.S. сорри за флуд

1 лайк

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

У вас в тестах разве нет проверок? Пусть они проверяют правильность заполнения и т.п. Зачем это пытаться сделать руками?

Проверки есть, но всё-таки хочется чтобы помедленнее работало

Как можно поставить брейкпоинты? Ставлю debugger и protractor на него не реагирует

Поставьте browser.sleep(1000); после каждого степа - и увидите, как заполняются поля.

Я не знаком с инструментами, которыми вы пользуетесь, но сама проблема очень стара, потому я попробую дать весьма обобщённый ответ.

В вашем случае проще всего написать общую функцию, которая будет принимать в качестве параметра окно/страницу/форму и список данных (например, словарь), которыми нужно заполнить поля.
В самой функции в цикле прохода по элементам управления, которые нужно заполнить, вы делаете задержку (например, на 100 мс) после заполнения каждого элемента управления.
100 мс незаметны для пользователя, но они могут оказаться критичными для софта. Можно использовать 500 вместо 100, короче говоря - поиграться с таймаутом.