TestComplete (Всртоенные индексы)
#1
Отправлено 24 июня 2005 - 05:02
Не могу избавиться от индексов в TestComplete. Я пишу универсальный скрипт заполнения отчетов. У меня много отчетов и когда я прокручиваю скрипт на последующих отчетах не совпадают индексы объектов, которые присвоил TestComplete.
Вот пример скрипта:
Set p = Sys.Process("ClientNCSGDS")
Set w = p.fmMain
w.Activate
Set m = w.TMonitoringForm_1
m.Activate
Call m.TChildWindow_1.TQueryGrid_1.TThroughPanel_29.Click(14, 12)
Set w = p.fmDistrict
w.Activate
w.Button2.Click
Set w = p.fmMain
w.Activate
Set m = w.TMonitoringForm_1
m.Activate
Call m.TChildWindow_1.TQueryGrid_1.TThroughPanel_28.Click(12, 13)
Индексы (TThroughPanel_29, TThroughPanel_28) меняются в последующих отчетах.
Есть ли варианты их обойти.
Заранее спасибо!
#2
Отправлено 24 июня 2005 - 12:17
Строка
Call m.TChildWindow_1.TQueryGrid_1.TThroughPanel_29.Click(14, 12)
преврашается в что-то подобное (JScript)
var sThroughPanelIndex = "29"; var oGrid = m.TChildWindow_1.TQueryGrid_1; var oThroughPanel = GetValue(oGrid, "TThroughPanel_" + sThroughPanelIndex); oThroughPanel.Click(14, 12);
Меняя значение переменной sThroughPanelIndex можно обращатся к объектам с разными индексами.
#3
Отправлено 27 июня 2005 - 08:37
А еще проще это делать с помощью метода WaitChild. Например:
[VBScript] index = 29 Call m.TChildWindow_1.TQueryGrid_1.WaitChild("TThroughPanel_" & VarToStr(index)).Click(14, 12)
Если индекс заранее неизвестен, то придется писать специальную функцию, которая пройдется по всем дочерним объектам TQueryGrid_1 и найдет по какой-либо отличительной особенности (значению какого-нибудь свойства) нужную TThroughPanel.
Дмитрий
#4
Отправлено 27 июня 2005 - 08:40
#5
Отправлено 27 июня 2005 - 08:52
Например, так (не проверял):
[VBScript] i = 0 Set parObj = m.TChildWindow_1.TQueryGrid_1 Set panObj = parObj.WaitWindow("TThroughPanel", "*", i) While panObj.Exists Log.Message panObj.Name i = i + 1 Set panObj = parObj.WaitWindow("TThroughPanel", "*", i) WEnd Log.Message "Всего объектов: " & VarToStr(i)
Дмитрий
#6
Отправлено 27 июня 2005 - 09:15
А как мне стать на первую запись класса m.TChildWindow_1.TQueryGrid_1 и узнать его индекс.
я не могу предугадать в каком промежутке у меня будут индексы. либо от 61 до 49 либо от 23 до 13 и т.д.
а если писать как вы сказали i=1 то TC начинает работу только с первого индекса а что делать исли там такого нет?
благодарю за помощь!!!
#7
Отправлено 27 июня 2005 - 11:13
Простите, не совсем понимаю что вы имеете в виду под "записью класса". Думаю, что "дочерний объект объекта приложения TQueryGrid_1, который имеет тип TThroughPanel". Правильно?А как мне стать на первую запись класса m.TChildWindow_1.TQueryGrid_1 и узнать его индекс.
Тот цикл, который я вам предложил использует индексы TestComplete'а. А это значит, что у вас всегда будет объект и индексом, так как TestComplete присваивает объектам индексы от 1 до <число всех объектов этого типа у этого родителя>. Если объект с индексом "посередине" пропадет, TestComplete сдвинет индексы.я не могу предугадать в каком промежутке у меня будут индексы. либо от 61 до 49 либо от 23 до 13 и т.д.
а если писать как вы сказали i=1 то TC начинает работу только с первого индекса а что делать исли там такого нет?
Вы, как я понимаю, говорите про индксы в названии объектов (т.е. TThroughPanel_<индекс>). Скорее всего это нативные имена объектов, поэтому TestComplete сам не знает и знать не может как по ним ориентироваться. Надо писать свои процедуры, которые, например, распарсят имена всех объектов и составят вам массивы объектов и индексов.
Дмитрий
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных