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

Фотография

Ожидание выполнения операции


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

#21 nicksh

nicksh

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

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

Отправлено 13 апреля 2010 - 11:50

Мистика. Попробуйте обойтись без переменных проекта.

Насчёт мистики - согласен)))
Обойтись без переменных не могу, привык - использую их вместо длинных путей - нахожу головное окно по классу и заголовку, потом внутренние окна, написал подпрограммки, которые выбирают вкладки и жмут на кнопки)))))

А на других объектах воспроизводится? А на другом приложении? А пример рабочий без вашего приложение можно соорудить?

Дело в том, что эта ошибка носит плавающий характер - сегодня есть, завтра нет.
Повторить даже в существующих условиях стабильно - не получается.
Кроме того, это место в тесте выполняется в цикле примерно 20 раз, и может быть такое, что это место отработает 10 раз, а потом ошибка, а часто и вообще ошибки нет - все 20 раз это место отрабатывает правильно.
Когда это место отрабатывает правильно, вся цепочка занимает 2-3 секунды (по логу).
Сегодня я для гарантии (что будет ждать 10 секунд)))) поставил после cmb.WaitProperty("Enabled", True, 10000) ещё и цикл 100*100 миллисекунд и в цикле проверку на cmb.Enabled.
На ночь запущу, посмотрим.
  • 0

#22 Колючка

Колючка

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

  • Members
  • PipPip
  • 105 сообщений

Отправлено 13 апреля 2010 - 14:20

Попробуйте задержку небольшую поставить. Может при создании объекта это свойство равно true.
  • 0

#23 nicksh

nicksh

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

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

Отправлено 14 апреля 2010 - 05:16

На ночь запущу, посмотрим.

Увы. Тест отработал без этой ошибки. То есть cmb_Enabled_3 = True (это после cmb.WaitProperty("Enabled", True, 10000)) во всех 20 случаях.
Попробую сегодня ещё раз запустить.
  • 0

#24 nicksh

nicksh

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

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

Отправлено 15 апреля 2010 - 08:14

Попробую сегодня ещё раз запустить.

Опять без ошибок(((
  • 0

#25 Колючка

Колючка

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

  • Members
  • PipPip
  • 105 сообщений

Отправлено 15 апреля 2010 - 13:47

Задержка помогла :)

цикл 100*100 - вот это я имею в виду.
  • 0

#26 nicksh

nicksh

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

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

Отправлено 16 апреля 2010 - 04:52

Задержка помогла :)

Нет, это не цикл 100*100 помог, это после cmb.WaitProperty("Enabled", True, 10000) cmb.Enabled = True (то есть цикл 100*100 только подстраховывал)))), и так было вчера, и позавчера.
А сегодня наконец-то получилось (вот текст исходный):
Log.AppendFolder("")
			  res_ = guiWindowTest("groupBox1", "ComboBox", "Name:WinFormsObject(""cmbProcessingCode"")", "cmbProcessingCode") ' на всякий случай 
			  Set cmbProcessingCode = Project.Variables.VariableByName("cmbProcessingCode")
cmb_Exists_1 = cmbProcessingCode.Exists
cmb_Enabled_1 = cmbProcessingCode.Enabled
			  Call cmbProcessingCode.WaitProperty("Exists", True, 10000)
cmb_Exists_2 = cmbProcessingCode.Exists
cmb_Enabled_2 = cmbProcessingCode.Enabled
			  Call cmbProcessingCode.WaitProperty("Enabled", True, 10000)
cmb_Exists_3 = cmbProcessingCode.Exists
cmb_Enabled_3 = cmbProcessingCode.Enabled
			  For ijk = 1 To 100
				 If cmbProcessingCode.Exists And cmbProcessingCode.Enabled Then Exit For
				 BuiltIn.Delay(100)
			  Next
cmb_Exists_31 = cmbProcessingCode.Exists
cmb_Enabled_31 = cmbProcessingCode.Enabled
			  Call cmbProcessingCode.ClickItem(pSVVTipOp)
cmb_Exists_4 = cmbProcessingCode.Exists
cmb_Enabled_4 = cmbProcessingCode.Enabled
		 Log.PopLogFolder()
Log.Message("cmb_Exists_1 = " + CStr(cmb_Exists_1) + "   cmb_Enabled_1 = " + CStr(cmb_Enabled_1) + "")
Log.Message("cmb_Exists_2 = " + CStr(cmb_Exists_2) + "   cmb_Enabled_2 = " + CStr(cmb_Enabled_2) + "")
Log.Message("cmb_Exists_3 = " + CStr(cmb_Exists_3) + "   cmb_Enabled_3 = " + CStr(cmb_Enabled_3) + "")
Log.Message("cmb_Exists_31 = " + CStr(cmb_Exists_31) + "   cmb_Enabled_31 = " + CStr(cmb_Enabled_31) + "")
Log.Message("cmb_Exists_4 = " + CStr(cmb_Exists_4) + "   cmb_Enabled_4 = " + CStr(cmb_Enabled_4) + "")
If (Not cmb_Enabled_3) Then 
   Log.Error("Not cmb_Enabled_3 (cmbProcessingCode.Enabled))")
End If	 
			  Log.Message("Выбрали тип операции '" + pSVVTipOp + "'")
А вот кусочек лога:Прикрепленный файл  log_20100416_1.PNG   20,61К   30 Количество загрузок:
То есть как раз так долго ожидаемая ситуация: после cmb.WaitProperty("Enabled", True, 10000) cmb.Enabled = False, а после цикла 100*100 cmb.Enabled = True, и вся цепочка за 2 секунды.
Получается, что cmb.WaitProperty("Enabled", True, 10000) иногда (оооочень редко) заканчивается ранее 10 секунд, но cmb.Enabled = False.
Такая вот оооооооочень редкая ошибка.
  • 0

#27 Dmitry N

Dmitry N

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

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

Отправлено 21 апреля 2010 - 08:25

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

Похоже на баг. Думаю, здесь вы правды не найдёте. Пишиту в службу поддержки.
  • 0
С уважением,
Дмитрий

#28 TC_Noob

TC_Noob

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

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

Отправлено 20 мая 2010 - 05:50

nicksh, Баг в коде, а не в TestComplete :diablo:

For ijk = 1 To 100
	mb_Exists_3 = cmbProcessingCode.Exists
	cmb_Enabled_3 = cmbProcessingCode.Enabled
	If mb_Exists_3 And cmb_Enabled_3 Then Exit For
   	BuiltIn.Delay(100)
Next

nicksh, у Вас по коду
cmb_Exists_3 = cmbProcessingCode.Exists
cmb_Enabled_3 = cmbProcessingCode.Enabled
For ijk = 1 To 100
	If cmbProcessingCode.Exists And cmbProcessingCode.Enabled Then Exit For
	BuiltIn.Delay(100)
Next
И естественно, будет выполнено условие:
If (Not cmb_Enabled_3) Then 
   Log.Error("Not cmb_Enabled_3 (cmbProcessingCode.Enabled))")
End If

Т.к. не Ваш код не следит за обновлением значения переменной "cmb_Enabled_3"
  • 0

#29 nicksh

nicksh

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

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

Отправлено 20 мая 2010 - 06:05

Похоже на баг. Думаю, здесь вы правды не найдёте. Пишиту в службу поддержки.

Написал. Помогли - нашли правду))). Правда в том, что "свойство получает нужное значение на короткий промежуток времени, достаточный для того чтобы выйти из функции WaitProperty, но недостаточный для того чтобы последующая строка кода "поймала" это значение".
Прислали функцию MyWaitProperty (прилагается Прикрепленный файл  MyWait.txt   731байт   28 Количество загрузок:), которая ждёт полсекунды, чтобы значение свойства перестало скакать туда-сюда. Я заменил .WaitProperty("Enabled"... на MyWaitProperty, прогнал тест, отфильтровал лог теста по сообщениям этой функции, и, действительно, из 18 случаев выполнения этого куска в 3 случаях значение менялось за полсекунды несколько раз (лог прилагается Прикрепленный файл  MyWait_log.txt   2,23К   19 Количество загрузок:).
Скорее всего, такое поведение объекта - это ошибки разработки приложения (C#).
Если бы ещё из TC можно было как-то (как?) отыскать функции, при выполнении которых скачет значение свойства и ткнуть носом разработчиков, было бы здорово!
  • 0

#30 nicksh

nicksh

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

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

Отправлено 20 мая 2010 - 06:11

Т.к. не Ваш код не следит за обновлением значения переменной "cmb_Enabled_3"

Переменная cmb_Enabled_3 используется только для того, чтобы сохранить значение свойства "Enabled" после вызова функции cmb.WaitProperty("Enabled", True, 10000).
Но за внимание спасибо)))
  • 0


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

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