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

Фотография

что ждать: свойство или окно?


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

#1 gira13

gira13

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

  • Members
  • PipPip
  • 80 сообщений
  • Город:Киев

Отправлено 26 августа 2014 - 13:13

Добрый день!

Версия  TestComplete'a 10.30, trial, использую Java Script, приложение написано на Delphi.Приложение открытое

 

У меня есть объект E_DOC_TYPE_LINKAGE_D, который на экране отображается как список(не открытый), в Object Browser состоит из 3-ех объектов - 1)название поля, 2)поля типа TsbEditButton  и 3) объект, отвечающий за стрелочку(на которую нажать надо, чтобы открылся список)

Я про данный объект уже писала http://software-test...nachenie-polia/

 

Когда форма открывается, то объект 3 не отображается, но и название Window("TWinControl"), где нет даже свойства WndClass. Если заполнить связанное поле, то стрелочка уже отображается и название становится Window("TWinControl", "",1)( и есть свойство WndClass). Т.к. подгрузка списка может загружатся долго(вдруг обновление какое-то), то я думала перед тем, как нажать на стрелочку, подождать, пока она появится

Я сначала ждала появление самого окна WaitWindow("TWinControl", "",1,15000), но не сработало, время прошло,я конечно нажала на стрелочку, но появилась стрелка раньше, а ожидание длилось дальше

Затем пробовала подождать свойство tip.VCLObject("E_DOC_TYPE_LINKAGE_D").Window("TWinControl", "",1).WaitProperty("VisibleOnScreen",true,50000);  - Runtime Error(видимо не может ждать свойство объекта, которое даже не существует)

Если написать 

while (tip.VCLObject("E_DOC_TYPE_LINKAGE_D").Window("TWinControl").Exists)
{
Delay(1000);
}

тоже ругается, что не видит объект "TWinControl"


  • 0

#2 XXX

XXX

    Опытный участник

  • Members
  • PipPipPipPip
  • 284 сообщений
  • ФИО:Денис Викторович
  • Город:Санкт-Петербург


Отправлено 26 августа 2014 - 17:07

Предложил бы создать отдельный метод - ожидание объекта, которым пользоваться в таких случаях.. 

function WaitObj(obj, time, isExists) {
    isExists = (isExists == null) ? true : isExists;
    time = (time == null) ? 5000 : time;
    
    var temp = 0;
    while (temp < time) {
        if (isExists) {
            if (obj.Exists)
                return obj;
        } else {
            if (!obj.Exists)
                return obj;
        }
        
        Delay(1000);
        temp+=1000;
    }
    
    if (isExists) {
        Log.Error("По истечении " + (time/1000) + "сек. объект не находится");
    } else { 
        Log.Error("По истечении " + (time/1000) + "сек. объект " + obj.FullName + " находится (не должен)");
    }
}

Затем уже в тесте вызывать его

В данном случае будет както так

WaitObj(tip.VCLObject("E_DOC_TYPE_LINKAGE_D").Find("WndClass", "TWinControl", 1))

  • 0

#3 gira13

gira13

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

  • Members
  • PipPip
  • 80 сообщений
  • Город:Киев

Отправлено 27 августа 2014 - 12:15

 

Предложил бы создать отдельный метод - ожидание объекта, которым пользоваться в таких случаях.. 

function WaitObj(obj, time, isExists) {
    isExists = (isExists == null) ? true : isExists;
    time = (time == null) ? 5000 : time;
    
    var temp = 0;
    while (temp < time) {
        if (isExists) {
            if (obj.Exists)
                return obj;
        } else {
            if (!obj.Exists)
                return obj;
        }
        
        Delay(1000);
        temp+=1000;
    }
    
    if (isExists) {
        Log.Error("По истечении " + (time/1000) + "сек. объект не находится");
    } else { 
        Log.Error("По истечении " + (time/1000) + "сек. объект " + obj.FullName + " находится (не должен)");
    }
}

Затем уже в тесте вызывать его

В данном случае будет както так

WaitObj(tip.VCLObject("E_DOC_TYPE_LINKAGE_D").Find("WndClass", "TWinControl", 1))

прикол в том, что объект tip.VCLObject("E_DOC_TYPE_LINKAGE_D"), когда передается в функцию WaitObj не существует: получается, как я понимаю, есть 2 объекта E_DOC_TYPE_LINKAGE_D, один из них содержит TWinControl без свойства WndClass, а второй со свойством WndClass. И вот 1  E_DOC_TYPE_LINKAGE_D становится несуществующим - бред какой-то

Я видоизменила функцию(добавила поиск поля, а затем поиск стрелочки):

function WaitObj(obj, n_ob, time, isExists) {
    isExists = (isExists == null) ? true : isExists;
    time = (time == null) ? 5000 : time;
    var temp = 0;
    while (temp < time)
    {
        PropArray = new Array("RecordClass", "ObjectIdentifier");
        ValuesArray =  new Array("TsbDBSuperEditWLbl", n_ob);
        props = ConvertArray(PropArray);
        vals = ConvertArray(ValuesArray);
        var obj1 = obj.FindChild(props, vals, 1);
        var obj2 = obj1.FindChild("WndClass", "TWinControl", 1);      
        if (isExists)
        {
            if (obj2.Exists)
                return obj2;
        }
        else
        {
            if (!obj2.Exists)
                return obj2;
        }
        
        Delay(1000);
        temp+=1000;
    }
   
    if (isExists) {
        Log.Error("По истечении " + (time/1000) + "сек. объект не находится");
    } else {
        Log.Error("По истечении " + (time/1000) + "сек. объект " + obj2.FullName + " находится (не должен)");
    }
}

и тогда заработало, спс


  • 0

#4 gira13

gira13

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

  • Members
  • PipPip
  • 80 сообщений
  • Город:Киев

Отправлено 28 августа 2014 - 07:08

хотя не совсем заработало, в одном случае да, в другом нет, я сделала по другому, нашла свойство ButtonVisible, каким отличаются поля TsbDBSuperEditWLbl(если это свойство принимает значение true, то стрелочка видна).Раньше то я искала отличия в объектах Window("TWinControl") и VCLObject("TWinControl"), которые являются потомками объекта типа TsbDBSuperEditWLbl

  while (!tip.VCLObject("E_DOC_TYPE_LINKAGE_D").ButtonVisible)
  {
    tip.Refresh();
    tip.VCLObject("E_DOC_TYPE_LINKAGE_D").WaitProperty("ButtonVisible",true,1000);
  } 
  twin = tip.VCLObject("E_DOC_TYPE_LINKAGE_D").FindChild("WndClass", "TWinControl",1);
  twin.Click();
так во всех случаях работает вроде как

  • 0

#5 XXX

XXX

    Опытный участник

  • Members
  • PipPipPipPip
  • 284 сообщений
  • ФИО:Денис Викторович
  • Город:Санкт-Петербург


Отправлено 28 августа 2014 - 12:35

по мне так 



while (!tip.VCLObject("E_DOC_TYPE_LINKAGE_D").ButtonVisible)
  {
    tip.Refresh();
    tip.VCLObject("E_DOC_TYPE_LINKAGE_D").WaitProperty("ButtonVisible",true,1000);
  }

равносильно



while (!tip.VCLObject("E_DOC_TYPE_LINKAGE_D").ButtonVisible)
  {
    tip.Refresh();
  }

а вообще предложил бы использовать самописанный метод наподобие такого



function WaitObjProperty(obj, property, time, value) {
    var temp = 0;
    while (temp < time) {
        Delay(500);
        
        if (eval(obj+"."+property) ==  value) {
            return obj;
        } 
        
        temp+=500;
        obj.Refresh();
    }
    
    Log.Error("По истечении "+(time/1000)+"сек. значение свойства "+property+" объекта не стало "+value);
}

и указывать конкретное максимальное время ожидания

 

 

WaitObjProperty(tip.VCLObject("E_DOC_TYPE_LINKAGE_D").FullName, "ButtonVisible", 60000, "True");


  • 0


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

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