Я пишу тест E2E с транспортиром. Мне нужно было получить информацию из браузера и выполнить шаг несколько раз.
Я тестирую один экран, который начнется, когда
- Пользователь нажимает кнопку "Пуск"
- приземляется на новой странице
- Ниже описан рабочий процесс, когда счетчик передается как аргумент
-
id
Идентификатор html не изменяется. значение изменяется при повторном запросе после отправки текущей формы.
for(i = 0 ; i < count ; i++){
console.log("counter is "+i);
element(by('id')).evaluate('value').then(function(v) {
// do some action on UI based on v
element(by('id1')).sendKeys(v+v);
// submit etc.,
// some angular code runs in the frontend.
}
// need to wait since webdriver jumps to the next one without this completing
}
Многие записи в блогах/документация показывают, что вы не можете использовать его в цикле, но не предлагает альтернативного способа сделать это.
Любые предложения оценены.
Никогда не используйте инструкции оператора протрансформатора внутри цикла: простая причина в том, что API-интерфейс webdriverJS (транспортир) является асинхронным. Операторы элементов возвращают обещание, и это обещание находится в неразрешенном состоянии, а код ниже операторов продолжает выполняться. Это приводит к непредсказуемым результатам. Следовательно, рекомендуется использовать рекурсивные функции вместо циклов.
источник: http://engineering.wingify.com/posts/angularapp-e2e-testing-with-protractor/
Изменить: обновленный вопрос с деталями рабочего процесса.