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

Фотография

"The window does not respond"


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

#1 Dimka K.

Dimka K.

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

  • Members
  • Pip
  • 8 сообщений
  • ФИО:Дмитрий

Отправлено 08 декабря 2010 - 14:12

Помогите!!! :)
В тесте нужно проанализировать такую ситуацию, когда окно при обработке информации может зависнуть от 2 минут до 2 часов...к примеру. Признаком окончания этой операции служит строка "Bereit" в строке состояния. Мы придумали каждые 5 секунд опрашивать текст строки состояния и сравнивать:

while (true) {
    var status_text = Aliases["advisor"]["MainFrame"]["Statusbar"]["wText"](0);

    if (status_text == "Bereit") {
      break;
    }
    Delay(5000);      
  } 

Когда он выполняется, мы получаем ошибку в логе "The window does not respond".
Как можно избавиться от этой ошибки в логе? Как по-другому можно ожидать окна, которые не отвечают?

версия TestComplete 7.50.653.7
используемый скриптовый язык в TestComplete'e C++ Script
тип тестируемого приложения Visual C++
контролы сторонних производителей Objective Grid в Rogue Wave Stingray Studio

Пример ошибки я указал в Error.jpg
Заранее все благодарен за помощь!

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

  • Прикрепленный файл  Error.jpg   165,04К   22 Количество загрузок:

  • 0

#2 anagramma

anagramma

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

  • Members
  • PipPip
  • 87 сообщений
  • Город:Moskow

Отправлено 08 декабря 2010 - 14:56

см. справку WaitProperty Method

while (statusBarObj["wText"](0) != "Ready")
{
aqUtils["Delay"](100);
statusBarObj["Refresh"]();
}


  • 0

#3 ksena

ksena

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

  • Members
  • PipPip
  • 99 сообщений
  • Город:Харьков


Отправлено 08 декабря 2010 - 15:16

LogParams.Locked := True; - блокирует вывод ошибки в лог, мы когда ждем окно, в цикле блокируем лог, если таки не дождались, то тогда ругаемся.
  • 0

#4 SergeyP

SergeyP

    Специалист

  • Members
  • PipPipPipPipPip
  • 651 сообщений
  • Город:Москва

Отправлено 08 декабря 2010 - 15:24

Попробуйте воспользоваться функцией FindChild.

Еще один способ - замапить этот объект и опрашивать Exists: если выполнять Exists по объекту, представленному в замапленном виде, то при его отсутствии в лог не пишутся ошибки.
  • 0

#5 Dmitry N

Dmitry N

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

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

Отправлено 09 декабря 2010 - 08:51

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

Не слушайте никого, ошибку в логе глушить нельзя - проблема от этого не пропадёт.

Воспользуйтесь методом WaitAliasObject:
// 7200000 - 2 часа
    var wnd = Aliases["advisor"]["WaitAliasObject"]("MainFrame", 7200000);
    if (false == wnd.Exists) {
      Log.Message("Окно не отвечает уже 2 часа... :(");
      return false;
    }
    
    var status_text = wnd["Statusbar"]["wText"](0);
    if (status_text != "Bereit") {
      Log.Message("Ok")
    }


Сообщите помогло ли.
  • 0
С уважением,
Дмитрий

#6 Dimka K.

Dimka K.

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

  • Members
  • Pip
  • 8 сообщений
  • ФИО:Дмитрий

Отправлено 09 декабря 2010 - 10:17

к сожалению, пока ничего не помогло :(
  • 0

#7 Dimka K.

Dimka K.

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

  • Members
  • Pip
  • 8 сообщений
  • ФИО:Дмитрий

Отправлено 09 декабря 2010 - 10:18

к сожалению, пока ничего не помогло :(
  • 0

#8 TC_Noob

TC_Noob

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

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

Отправлено 09 декабря 2010 - 13:36

Ответ очевиден - вы не верно придумали, "каждые 5 секунд" опрашивать объект, который не доступен.
ВОТ что нужно было вам, ПОКА приложение зависло, нужно было проверить хайлайтинг данного объекта, строки или чё там у вас. Собственно, вышло, что нельзя его хайлайтить пока ваша прилада висит, значит, решение, каждые 5 секунд опрашивать ДРУГОЙ объект, который можно захайлайтить, пока висит ваша прилада
  • 0

#9 Dimka K.

Dimka K.

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

  • Members
  • Pip
  • 8 сообщений
  • ФИО:Дмитрий

Отправлено 14 декабря 2010 - 08:40

может еще есть какие мысли? ничего не помогает..... :((
  • 0

#10 ksena

ksena

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

  • Members
  • PipPip
  • 99 сообщений
  • Город:Харьков


Отправлено 14 декабря 2010 - 10:25

может еще есть какие мысли? ничего не помогает..... :((

Вы можете каждый интервал времени в цикле брать ActiveWindow, сравнивать его caption или еще какое-нить свойство с нужным, если совпадает - идите дальше, если нет - ждите.
  • 0

#11 Dmitry N

Dmitry N

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

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

Отправлено 15 декабря 2010 - 06:43

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

А какие ошибки случаются, когда Вы пытаетесь получать объект MainFrame с помощью метода WaitAliasObject?
  • 0
С уважением,
Дмитрий


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

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