Перейти к содержимому

Фотография

TestComplete (Всртоенные индексы)


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 6

#1 natali.ancharuk

natali.ancharuk

    Новый участник

  • Members
  • Pip
  • 72 сообщений
  • ФИО:Анчарук Наталья Владимировна

Отправлено 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) меняются в последующих отчетах.
Есть ли варианты их обойти.
Заранее спасибо!
  • 0

#2 Closer

Closer

    Новый участник

  • Members
  • Pip
  • 6 сообщений
  • ФИО:Максим Добряков

Отправлено 24 июня 2005 - 12:17

Думаю можно воспользоватся функцией GetValue из модуля BuiltIn

Строка
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 можно обращатся к объектам с разными индексами.
  • 0

#3 Dmitry N

Dmitry N

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 742 сообщений
  • ФИО:Николаев Дмитрий
  • Город:Где-то в России

Отправлено 27 июня 2005 - 08:37

Здравствуйте, Наталья.

А еще проще это делать с помощью метода WaitChild. Например:
[VBScript]  index = 29
  Call m.TChildWindow_1.TQueryGrid_1.WaitChild("TThroughPanel_" & VarToStr(index)).Click(14, 12)

Если индекс заранее неизвестен, то придется писать специальную функцию, которая пройдется по всем дочерним объектам TQueryGrid_1 и найдет по какой-либо отличительной особенности (значению какого-нибудь свойства) нужную TThroughPanel.
  • 0
С уважением,
Дмитрий

#4 Baron!

Baron!

    Новый участник

  • Members
  • Pip
  • 2 сообщений
  • ФИО:Бауржан

Отправлено 27 июня 2005 - 08:40

Как обратиться ко всем объектам TThroughPanel(по порядку), класса TChildWindow_1.TQueryGrid_1 не зная при этом индексы этих объектов и количество. какой при этом будет цикл? :unsure:
  • 0

#5 Dmitry N

Dmitry N

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 742 сообщений
  • ФИО:Николаев Дмитрий
  • Город:Где-то в России

Отправлено 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)

  • 0
С уважением,
Дмитрий

#6 Baron!

Baron!

    Новый участник

  • Members
  • Pip
  • 2 сообщений
  • ФИО:Бауржан

Отправлено 27 июня 2005 - 09:15

Спасибо я замечательно двигаюсь по объектам!!!!

А как мне стать на первую запись класса m.TChildWindow_1.TQueryGrid_1 и узнать его индекс.
я не могу предугадать в каком промежутке у меня будут индексы. либо от 61 до 49 либо от 23 до 13 и т.д.
а если писать как вы сказали i=1 то TC начинает работу только с первого индекса а что делать исли там такого нет?
благодарю за помощь!!!
  • 0

#7 Dmitry N

Dmitry N

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 742 сообщений
  • ФИО:Николаев Дмитрий
  • Город:Где-то в России

Отправлено 27 июня 2005 - 11:13

Здравствуйте.

А как мне стать на первую запись класса m.TChildWindow_1.TQueryGrid_1 и узнать его индекс.

Простите, не совсем понимаю что вы имеете в виду под "записью класса". Думаю, что "дочерний объект объекта приложения TQueryGrid_1, который имеет тип TThroughPanel". Правильно?

я не могу предугадать в каком промежутке у меня будут индексы. либо от 61 до 49 либо от 23 до 13 и т.д.
а если писать как вы сказали i=1 то TC начинает работу только с первого индекса а что делать исли там такого нет?

Тот цикл, который я вам предложил использует индексы TestComplete'а. А это значит, что у вас всегда будет объект и индексом, так как TestComplete присваивает объектам индексы от 1 до <число всех объектов этого типа у этого родителя>. Если объект с индексом "посередине" пропадет, TestComplete сдвинет индексы.

Вы, как я понимаю, говорите про индксы в названии объектов (т.е. TThroughPanel_<индекс>). Скорее всего это нативные имена объектов, поэтому TestComplete сам не знает и знать не может как по ним ориентироваться. Надо писать свои процедуры, которые, например, распарсят имена всех объектов и составят вам массивы объектов и индексов.
  • 0
С уважением,
Дмитрий


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных