У TestComplete есть недостаток: во время выполнении задержки с помощью метода aqUtils.Delay невозможно нажать на паузу и войти в режим отладки. Точнее нажать-то можно, но в режим отладки мы войдём лишь после того, как истечёт всё время ожидания. Естественно, это не очень удобно, если по какой-то причине у нас в скрипте используются длинные паузы (например, несколько минут). В этой статье мы рассмотрим, как решить эту проблему.
Начнём с того, что подобные длинные паузы — плохой стиль автоматизации, однако мир не идеален и с таким кодом можно столкнуться на практике, поэтому будем решать поставленную задачу. Так как мы не можем изменить поведение самого TestComplete, мы напишем свою функцию-обёртку, которая вместо длинной паузы (например, 60 секунд) будет делать множество коротких (60 пауз по 1 секунде в нашем примере). В этом случае если мы нажмём на кнопку Пауза Индикатора TestComplete, пауза сработает сразу после текущего выполняемого Delay, т.е. максимум через 1 секунду.
Вот как будет выглядеть наша функция на языке JScript:
function Sleep(seconds, message){ if(seconds <= 1){ Delay(seconds*1000, message); } else{ for(var i = 0; i < seconds; i++){ Delay(1000, message + '\n (' + (seconds-i) + ' seconds left)'); } } }
У этой функции есть ряд особенностей:
- время задержки передаётся в секундах, а не в миллисекундах (так как это привычнее и понятнее человеку, никто в обычной жизни не оперирует миллисекундами);
- если передана задержка менее 1 секунды — используется обычный Delay, потому что нет смысла разбивать на части такую короткую паузу;
- так как теперь в Индикаторе не отображается прогресс (как это происходит при выполнении метода Delay), мы реализовали свой подход: текстом сообщаем пользователю, сколько времени ему осталось ждать.
Аналогичная проблема существует при использовании методов Wait, решается она точно так же: создаём фукнции-обёртки, в которые в качестве первого параметра передаём родительский объект, для которого нужно выполнить ожидание, все остальные параметры оставляем такими же, как у оригинальных Wait-методов.