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

XXX

Регистрация: 23 мая 2010
Offline Активность: 04 окт 2021 14:44
*****

Мои сообщения

В теме: Получение таблицы Call Stack вызовов во время ошибки из тестов

18 мая 2015 - 10:52

 

Не совсем понял, что ты имеешь ввиду и чем тебе не нравится Additional Info - это всего лишь инструмент и он выводит в логи ровно то, Log.Message("", "что ты ему укажешь").

Логи можно посмотреть в ходе выполнения тестов, нажав паузу. Может ли TestExecute автоматически поставить выполнение теста на паузу при ошибке - не помню.

 

Вообще, поясни каким образом у тебя происходит логирование.




 

Additional Info абсолютно неинформативная вещь без Call Stack..Вариант с паузой также не годится - прогон и так идет более 6 часов, если еще и будет останавливаться на каждом падении, то мы никогда не дождемся окончательного результата)).

 

 

Такой возможности сейчас нет, но у СмартБеар давно висит запрос на такую фичу.

Можешь создать тему на их форуме и они добавят +1 для фичи, таким образом увеличивая шанс, что ее заимплементят :)

 

Но фича была запрошена давно и пока никаких подвижек нет

Попробуем плюсануть) Спасибо


В теме: Покритикуйте код поиска объекта, пожалуйста

08 мая 2015 - 21:42



function findEngine(variable, property, depth, mainObj)

Проверяется depth на null, было бы здорово и mainObj ..да и поменял бы местами с depth



var result = mainObj.FindAllChildren(variable, property, depth);
      result = (new VBArray(result)).toArray(); //здесь периодически появляется ошибка и ругается на VBArray
      if (result.length > 1)  {
            Log.Warning("Надено более 1 объекта методом FindAllChildren. По умолчанию выбран первый объект. Необходимо уточнить поиск в findObj. Найдено объектов: " + result.length);
      }
    return result.length == 0?findEngineReserv(variable, property, depth, mainObj):result[0];

я бы заменил на что-то более простое 



return mainObj.Find([property, "Visible"], [value, "True"], depth);

да и скорее бы переименовал метод в getObj =)

 

Метод findEngineReserv переименовал бы в WaitObj и применял бы отдельно там, где нужно действительно ожидать, а не каждый раз, когда объект не существует. Два цикла while можно смело объеденить в один вставив перед if свой Refresh()..задача же стоит определить объект и работать с ним далее, а не узнать на каком "этапе резервного поиска" он определяется с помощью TC. К тому же если он у тебя находится, то отрабатывает return объекта внутри цикла, поэтому Log.Warning("Объект найден с затруднениями") нужно заменить на Log.Error("Искомый объект не найден..")

 

В методе findObj(searchObj) заместо свойства VisibleOnScreen использовал бы Visible, иначе могут быть проблемы при работе с несколькими приложениями (например, программа + веб). Одна программа перекрывает другую, со св-вом VisibleOnScreen объект второй не найдется, в отличие от Visible


В теме: ProjectLog - Messages Panel

18 марта 2015 - 12:54

Для сообщений типа Message по умолчанию и так пусто, детали показываются только для Error

Чтобы были детали для данного типа нужно их включить - Log.CallStackSettings.EnableStackOnMessage = True

 

пример для Error

 


В теме: ProjectLog - Messages Panel

18 марта 2015 - 11:45

Для начала кликнуть в окне Log Items на нужный Test Log..потом для каждого типа Message можно просматривать детали в том самом выделенном окне 

 

 

Как использовать выделенную область на картинке? В Справке есть только описание, что туда выводится, но нет никаких примеров каким образом это делается.


В теме: Объясните WaitSwingObject()

17 марта 2015 - 22:09

Скорее всего нужно писать свой метод ожидания контрола

что-то типо 

function WaitObj(mainObj, property, time)
{
    if (time == null) 
        time = 5000;
    
    if (!mainObj.Exists)
        Log.Error("mainObj не найден");
    
    var temp = 0;
    while (temp < time) {
        obj = mainObj.FindChild([variable, "Enabled"], [property, true], 30);  
        
        if (obj.Exists)
            return obj;
        
        Delay(1000);
        temp+=1000;
        mainObj.Refresh();
    }
    
    Log.Error("По истечении " + (time/1000) + "сек. объект не находится");
}

 

 У меня есть общая функция для поиска объектов в динамическом дереве
var mainObj = Sys.WaitProcess("javaw", 20000);
var resultObj = mainObj.FindChild(variable, property, 30);
return resultObj;
Но функция часто не проходила и выдавала ошибку, объекты не успевали отрисовываться, 
С resultObj.WaitProperty("Enabled", true, 20000) стало немного легче, но ошибки все равно были.
 
Возможно ли, что WaitSwingObject будет справляться лучше? (ссылка на smartbear http://support.smart...warticle/61047/)