TestComplete 4.23
#1
Отправлено 05 июля 2006 - 14:58
Возникла проблема.
Есть скрипт, который просто "нагоняет" данные в базу через интерфейс. Очень простой, никаких прверок. Данные из Excel - файла сорхраняются в ODT-объекты, а потом вводятся в форму. Суть проблемы - выполняется от 2 до 10 итераций (в зависимости от "настроения") и TestComplete "умирает" - не видит форму, не реагирует на мои действия.
Кто-то еще сталкивался с подобным?
Как с этим бороться, если можно бороться вообще?
Спасибо.
#2
Отправлено 06 июля 2006 - 11:56
Всем привет!
Возникла проблема.
Есть скрипт, который просто "нагоняет" данные в базу через интерфейс. Очень простой, никаких прверок. Данные из Excel - файла сорхраняются в ODT-объекты, а потом вводятся в форму. Суть проблемы - выполняется от 2 до 10 итераций (в зависимости от "настроения") и TestComplete "умирает" - не видит форму, не реагирует на мои действия.
Кто-то еще сталкивался с подобным?
Как с этим бороться, если можно бороться вообще?
Спасибо.
Сложно сказать без кода и подробного описания проблемы. Тут и при открытии XML могут быть проблемы. Например: Вы открываете xml-файл и сразу начинаете обработку. Может не успеть открыться файл и тогда система будет ждать его до посинения. Или например вы не закрываете свой объект и по этому система не может его передать на форму.
Попробуйте более детально описать что не так. На каком этапе Вы получаете отказ программы.
Консультант по процессам тестирования
#3
Отправлено 06 июля 2006 - 12:10
Первый кусок скрипта - считывание из Excel-файла и сохранение данных в ODT - отрабатывает нормально.
Вторая часть.
для каждого объекта ODT выполняется следующее: открывается форма ввода. Данные из ODT вводятся в форму. Сохраняем изменения. Запись появляется в гриде. Открываем форму ввода и т.д. Вот эту пресловутую форму ввода TC и не находит после n-ой итерации. Причем я пыталась ставить задержку, чтоб данніе успевали сохраниться, а форма прогрузиться. И Wait ставила - бесполезно.
Код - в прилагаемом файле
#4
Отправлено 06 июля 2006 - 12:57
Что-то файла я не нашел. Вы не забыли его прицепить?Код - в прилагаемом файле
Дмитрий
#5
Отправлено 06 июля 2006 - 13:19
#6
Отправлено 06 июля 2006 - 13:28
Не разрешает мне прикрепить файл, никакой, ни с каим расширением. Вставить текстом?
Можно начать хотя бы с того места где программа перестает работать. Поставьте точку останова и посмотрите где именно вылетает. Можно повторить n раз и посмотреть не одно ли это место. Если одно то его и пошлите, если не одно то можно по частям.
Консультант по процессам тестирования
#7
Отправлено 06 июля 2006 - 13:37
function clsOrderData_InputData (sPosNumber) //ввод данных о заказе //input // sPosNumber - количество единиц каждой позикии заказа { var i; var WizRegister; var Wizard; var WizardPage1; var WizardPage2; var WizardPage4; var AwProcess = Sys["Process"]("Aw.Interface.Start"); BuiltIn["Delay"](2000); WizRegister = AwProcess["WinFormsObject"]("WizRegister"); Wizard = WizRegister["WinFormsObject"]("wizard"); //wizard page 1 WizardPage1 = Wizard["WinFormsObject"]("wizardPage1"); WizardPage1["WinFormsObject"]("rbNew")["Click"](10, 10); //виснет вот тут. говорит, что ждет вот эту самую "WizRegister" //owner type WizardPage1["WinFormsObject"]("cbNewType")["ClickItem"](VarToInteger(sOwnerType)); //push Next WizRegister["WinFormsObject"]("pnlButtons")["WinFormsObject"]("btnForward")["ClickButton"]();
Повторить n раз, как вы советуете с точкой останова я пробовала. Кстати, в дебаге работает замечательно.
Весь скрипт или даже проект могу прислать по мейлу.
#8
Отправлено 06 июля 2006 - 14:01
Консультант по процессам тестирования
#9
Отправлено 06 июля 2006 - 14:04
#10
Отправлено 06 июля 2006 - 14:05
С открытием-закрытием все то.
Если бы было не то, почему N операций выполняется, а на N+1-ой - глохнет?
#12
Отправлено 07 июля 2006 - 07:42
Странно, на той строке, которую вы указали, объект 'WizRegister' вроде и не берется...WizRegister = AwProcess["WinFormsObject"]("WizRegister");
Wizard = WizRegister["WinFormsObject"]("wizard");
//wizard page 1
WizardPage1 = Wizard["WinFormsObject"]("wizardPage1");
WizardPage1["WinFormsObject"]("rbNew")["Click"](10, 10); //виснет вот тут. говорит, что ждет вот эту самую "WizRegister"
Вы уверены, что именно на этой строке выдается ошибка и что именно такая ошибка выдается? Вы можете два раза кликнуть по ошибке в логе и ТС подсветит соответствующую строку в коде.
Кстати, вы говорите, что проблема возникает только на некоторой итерации, но никогда на первой. А как зыкрывается проблемное окно? Может пришлете код, который закрывает окно и вызывает функцию clsOrderData_InputData?
Дмитрий
#13
Отправлено 07 июля 2006 - 07:55
Да, я уверена, что именно это строка.Вы уверены, что именно на этой строке выдается ошибка и что именно такая ошибка выдается? Вы можете два раза кликнуть по ошибке в логе и ТС подсветит соответствующую строку в коде.
Кликнуть в логе не могу, поскольку TC виснет мертво, снимаю его через Task Manager, лог не сохраняется, то есть вот именно запись об этой ошибке в нем не сохраняется.
Окно визарда регистрации не закрывается и не открывается из скрипта.Кстати, вы говорите, что проблема возникает только на некоторой итерации, но никогда на первой. А как зыкрывается проблемное окно? Может пришлете код, который закрывает окно и вызывает функцию clsOrderData_InputData?
В визарде есть такая функция: "Зарегистрировать запись и перейти к регистрации следующей". То есть функция закрыть/открыть визард выполняется не ТС, а тестируемым приложением.
clsOrderData_InputData - это исходный код метода InputData. И вызывается она как метод вот в этой строке:
a_Order(i)['InputData'](i + 10)
Такие проблемы возникали не только у меня и не только на данном тестируемом приложении, но и у других тестировщиков нашей компании.
#14
Отправлено 07 июля 2006 - 08:15
Я так понимаю, что цикл заканчивается на этой строке, то есть после ее выполнения функция запускается заново. Если это так, то попробуйте вставить такой код после этой строки://push Next
WizRegister["WinFormsObject"]("pnlButtons")["WinFormsObject"]("btnForward")["ClickButton"]();
while (WizRegister["Exists"]) Delay(50);У меня есть предположение, что окно это пересоздается каждый раз, когда скрипт начинает новую итерацию. В этом случае, в начале очередной итерации скрипт может взять еще не до конца "убитый" старый объект окна. Когда выполнение доходит до проблемной строки, объект "умирает" и соответственно ТС не может выполнять действия над ним. Этот код должен убедиться, что объект уничтожен перед тем как переходить к новой итерации.
Дмитрий
#15
Отправлено 07 июля 2006 - 08:27
#16
Отправлено 07 июля 2006 - 11:13
Тогда попробуйте взять окно перед проблемной строкой еще раз:
WizRegister = AwProcess["WinFormsObject"]("WizRegister"); Wizard = WizRegister["WinFormsObject"]("wizard"); //wizard page 1 WizardPage1 = Wizard["WinFormsObject"]("wizardPage1"); AwProcess["WinFormsObject"]("WizRegister")["WinFormsObject"]("wizard")["WinFormsObject"]("wizardPage1")["WinFormsObject"]("rbNew")["Click"](10, 10); //виснет вот тут. говорит, что ждет вот эту самую "WizRegister"
Дмитрий
#17
Отправлено 07 июля 2006 - 11:18
Спасибо большое за потраченное время, я попробую.
Результат сообщать? :)
#18
Отправлено 10 июля 2006 - 06:08
Конечно, интересно же. :)
Дмитрий
#19
Отправлено 26 октября 2011 - 13:31
var RecNo;
// Posts data to the log (helper routine)
function ProcessData()
{
var Fldr, i;
Fldr = Log.CreateFolder('Record: ' + aqConvert.VarToStr(RecNo));
Log.PushLogFolder(Fldr);
for(i = 0; i < DDT.CurrentDriver.ColumnCount; i++)
Log.Message(DDT.CurrentDriver.ColumnName(i) + ': ' + aqConvert.VarToStr(DDT.CurrentDriver.Value(i)));
Log.PopLogFolder();
RecNo = RecNo + 1;
}
// Creates the driver (main routine)
function TestDriver()
{
var Driver;
// var searchDates = {};
// Creates the driver
// If you connect to an Excel 2007 sheet, use the following method call:
// Driver = DDT.ExcelDriver("C:\\MyFile.xlsx", "Sheet1", true);
Driver = DDT.ExcelDriver('C:\\Users/ScriptDates.xlsx', 'SearchDates',true);
// Iterates through records
RecNo = 1;
while (! Driver.EOF() )
{
ProcessData(); // Processes data
Driver.Next(); // Goes to the next record
}
// Closing the driver
DDT.CloseDriver(Driver.Name);
}
этот кусок кода считывает данные из экселя и загоняет в лог. Подскажите, пожалуйста, как записать эти данные в массив?
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных