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

Фотография

Трудности в инициализации объектов (find, wait)


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

#1 Stanislav_alphaopen

Stanislav_alphaopen

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

  • Members
  • Pip
  • 68 сообщений
  • ФИО:Васенков Станислав
  • Город:Москва

Отправлено 16 февраля 2015 - 10:48

Тестирую java-приложение на платформе NetBeans (т.е. swing)

Инициализирую основные окна приложения с помощью такой функции

  function findObj(variable, property) //два массива свойств и значений
  {
    var mainObj = Sys.WaitProcess("javaw", 20000);
      if (mainObj.Exists) {
          var resultObj = mainObj.FindChild(variable, property, 30); 
          if (resultObj.Exists) {
              if (resultObj.WaitProperty("Enabled", true, 20000)) 
                  return resultObj;
              else 
                  Log.Error("Object found, but Enabled didn't become true"); //ошибка 1                
          } else {
              Log.Error("Object not found, see additional info", "Variables: " + variable.toString() + "\nProperty: " + property.toString()); //ошибка 2
          }
      } else {
          Log.Error("Javaw process not found"); //ошибка 3
      }
    return null;
  }

Искомый объект совершенно точно существует, однако периодически вылезает ошибка 2, реже ошибка 3, иногда ошибка 1. 

Что я делаю не так?

 


  • 0

#2 Rebz

Rebz

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

  • Members
  • PipPipPipPip
  • 471 сообщений


Отправлено 16 февраля 2015 - 11:28

брейкпоинт ставить на строчке и смотреть реальное значение.. что оно там находит в resultObj.

Мб там несколько объектов подходит под массив свойств и значений, которое не enabled.


  • 0

#3 Stanislav_alphaopen

Stanislav_alphaopen

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

  • Members
  • Pip
  • 68 сообщений
  • ФИО:Васенков Станислав
  • Город:Москва

Отправлено 16 февраля 2015 - 11:35

Если не трудно, подскажи как лучше "посмотреть реальное значение".

Перед 

if (resultObj.Exists) {

Я ставлю Log.Message(?);


  • 0

#4 Rebz

Rebz

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

  • Members
  • PipPipPipPip
  • 471 сообщений


Отправлено 16 февраля 2015 - 12:04

На строчке 

var resultObj = mainObj.FindChild(variable, property, 30);

ставишь брейкпоинт (F9), строчка подсветится красным.

Далее запускаешь скрипт, на этой строчке тест остановится на паузу. Выделяешь переменную resultObj  и жмешь Ctrl + F12, выполняешь команду Evaluate, затем Inspect.

Далее разберешься =)


  • 1

#5 Сергей

Сергей

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

  • Members
  • PipPipPipPipPipPip
  • 1 245 сообщений
  • Город:Москва

Отправлено 16 февраля 2015 - 12:08

Основные проблемы в переходных режимах, дай системе отдышаться, выставь задержки, если проблема явно не вылезет.


  • 0

"Если ты хороший плотник и делаешь красивую тумбочку, ты не будешь прибивать сзади фанеру, даже несмотря на то, что задняя часть повернута к стене, и никто ее не видит. Ты будешь хорошо спать ночью, только если тебе удалось воплотить в своем произведении эстетическую красоту и качество." © Стив Джобс


#6 aksas

aksas

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

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

Отправлено 16 февраля 2015 - 13:51

для управлениями задержеками и отлова нескольких объектов можно попробовать переписать метод както так, правда с ошибкой 3 это никак не поможет

  function findObj(variable, property, wait) //два массива свойств и значений и период ожидания в миллисекундах, по умолчанию 0
  {	
    var mainObj = Sys.WaitProcess("javaw", 20000);
    if (mainObj.Exists) {
		wait = wait || 0;
		
		watch = HISUtils.StopWatch;
		watch.Start();
		do {				
			var resultObj = (new VBArray(mainObj.FindAllChildren(variable, property, 30, true))).toArray();
			if(resultObj.length == 1 && resultObj[0].WaitProperty("Enabled", true)){
				watch.Stop();
				return resultObj[0];
			}
	
		} while (watch.split <= wait)
		watch.Stop();
		if(resultObj.length > 1){
			Log.Error("too much objects...")
		}else if(resultObj.length == 0){
			Log.Error("Object not found, see additional info", "Variables: " + variable.toString() + "\nProperty: " + property.toString()); //ошибка 2
		}else{
			Log.Error("Object found, but Enabled didn't become true"); //ошибка 1
		}        
    } else {
          Log.Error("Javaw process not found"); //ошибка 3
    }
    return null;    
  }

работоспособность правда проверить нет возможности :)


  • 0

#7 Rebz

Rebz

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

  • Members
  • PipPipPipPip
  • 471 сообщений


Отправлено 16 февраля 2015 - 14:00

Log.Message(resultObj.fullName) - тоже вариант. посмотреть какой объект в дереве находит.

С FindAllChildren тоже думал, ага. Вариант.


  • 0

#8 Stanislav_alphaopen

Stanislav_alphaopen

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

  • Members
  • Pip
  • 68 сообщений
  • ФИО:Васенков Станислав
  • Город:Москва

Отправлено 16 февраля 2015 - 14:24

На стаковерфло посоветовали добавить скобки {} в 

  if (resultObj.WaitProperty("Enabled", true, 20000)) 
                  return resultObj;
              else 
                  Log.Error("Object found, but Enabled didn't become true"); //ошибка 1      

И все заработало. Видимо это ломало тест.


  • 0


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

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