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

Фотография

Ожидание загрузки содержимого грида


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

#21 DrBlast

DrBlast

    Активный участник

  • Members
  • PipPip
  • 139 сообщений
  • ФИО:Евгений
  • Город:Москва

Отправлено 21 апреля 2009 - 07:04

Прошу прощения, но функция представленная выше отрабатывает корректно. Я в последний момент заменил там get_RowCount на wRowCount.
while ((dgvObj.wRowCount == 0) && (timeout-- >0)) //dgv создался, ждем загрузки строк
{
	   aqUtils.Delay(1000);
}

Если оставить dgvObj.get_RowCount(), то все периодически рушится... (с эксепшеном описанным выше)
  • 0
Если ничего не помогает, прочтите наконец инструкцию!

#22 DrBlast

DrBlast

    Активный участник

  • Members
  • PipPip
  • 139 сообщений
  • ФИО:Евгений
  • Город:Москва

Отправлено 21 апреля 2009 - 13:34

Довел бедный TestComplete получил в результате: Разрушительный сбой.
Нашел метод, с помощью которого все-таки можно получить текущее количество строк: aqObject.GetPropertyValue, но на втором вызове этой функции получил разрушительный сбой... см аттач))

Прикрепленные файлы


  • 0
Если ничего не помогает, прочтите наконец инструкцию!

#23 DrBlast

DrBlast

    Активный участник

  • Members
  • PipPip
  • 139 сообщений
  • ФИО:Евгений
  • Город:Москва

Отправлено 28 апреля 2009 - 11:39

Ура! Вроде бы получилось решить проблему. Оказалось все просто :). VScrollbar во время загрузки грида создается не полностью. Окончательно он создается лишь тогда, когда все элементы грида присутствуют.

/*
*Функция ожидания загрузки грида
*ParentObj - NameMapping родительской формы
*dgvObj - Grid NameMapping
*childName - замаппелнное имя ожидаемого объекта
*timeout - "время" ожидания
*ожидается что каждый грид должен содержать VScrollBar
*/
function WaitForFillingDGV(ParentObj, dgvObj, childName, timeout)
{
	if (!timeout)
		timeout = 60;

	IsProcessIdle(); 
	while ((!ParentObj.WaitNamedChild(childName, 3000).Exists) && (timeout-- >0))
	{
		ParentObj.RefreshMappingInfo();
	}
	if (timeout == 0) Log.Message('Объекта не дождались');
	
	timeout = 60;
	IsProcessIdle();								
	
	while ((!dgvObj.WaitNamedChild('VScrollBar', 2000).Exists) && (timeout-- >0))

	if (timeout == 0) 
	{
		if (dgvObj.get_RowCount == 0)
		{
			Log.Message('Нет строк в гриде');
			return -1;
		}					

	}

	return 0;	  
}

  • 0
Если ничего не помогает, прочтите наконец инструкцию!

#24 Paulitto

Paulitto

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

  • Members
  • Pip
  • 39 сообщений

Отправлено 08 мая 2009 - 09:24

DrBlast Дата 20.4.2009, 16:18


(Paulitto @ 14.4.2009, 11:31)
Насчет проблемы с ожиданием загрузки - я решал ее следующим образом
Когда в грид загружается очч много данных приложение подвисает - и в этот момент в ObjectBrowser под процессом Explorer появляется окно класса "Ghost". Ждать нужно ровно столько сколько оно существует:

while (Sys["process"]("Explorer")["WaitWindow"]("Ghost", <название приложения>) ["Exists"]())
BuiltIn.Delay(1000);

Надеюсь поможет


Не помогло. Внутрь цикла ТС даж не заходит


Действительно не заходит, видимо проблема в методе WaitWindow, он почему то тут не срабаьывает (даж не знаю почему).
Если вместо него использовать просто Window - тогда все работает, правда при этом в логе будут появляться ненужные сообщения об ошибке в случаях когда Ghost не найден (когда грид загружается нормально и ничего не подвисает).
  • 0


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

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