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

Фотография

Как выполнить проверку, что меню видимо на экране?


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

#1 Andjey

Andjey

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

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

Отправлено 26 марта 2011 - 16:34

Здравствуйте, уважаемые Гуру ТестКомплит-а!

Очень надеюсь на вашу помощь. Заранее благодарен.

Я тестирую .NET приложение с помощью TestComplete 8.1 на JScript.

К сожалению, никак не могу выполнить проверку, что выпадающее меню не видимо на экране. Сложность вопроса в том, что объект существует, когда меню видимо, и не существует, когда нет. Поэтому проверять нужно не свойство, например, VisibleOnScreen, а существование объекта.

Допустим, у нас есть выпадающее меню из двух пунктов с названиями: "Item1text" и "Item2text".

dropDownList.XtraPopupMenu возвращает объект со свойствами Count и Item(...) и методами Click() и т.п.
dropDownList.XtraPopupMenu.Count возвращает 2
dropDownList.XtraPopupMenu.Item(0).Text возвращает "Item1text"
dropDownList.XtraPopupMenu.Click(0) или dropDownList.XtraPopupMenu.Item(0).Click() - кликает на 1-м пункте меню

Всё это, если выпадающий список виден на экране.


Если не виден, dropDownList.XtraPopupMenu возвращает null

Это само по себе не плохо - проверили на null и знаем, виден выпадающий список на экране или нет, НО при выполнении

objDropDownList = dropDownList.XtraPopupMenu или if (dropDownList.XtraPopupMenu==null) ... ;

пишется ошибка в лог: "Cannot obtain the popup menu.", а дальше всё отрабатывает правильно.

Варианты решения проблемы:
1. Отключить вывод ошибок в лог, сделать проверку, включить вывод ошибок в лог.
Пробовал Log.LockEvents(); ... Log.UnLockEvents(); - не влияет на исполнение никак.
2. Получить stub-объект со свойством .Exists, которое можно проверить на true/false.
Пробовал:
dropDownList.WaitXtraPopupMenu(1000).Exists - всегда возвращает false, независимо от того, виден выпадающий список на экране или нет
dropDownList.WaitChild("XtraPopupMenu",1000).Exists - то же
dropDownList.FindChild(["Count"], ["1"], 7).Exists - то же (конвертирование массивов ничего не даёт)
dropDownList.FindChild(["Text"], ["Item1text"], 7).Exists - то же (конвертирование массивов ничего не даёт)
dropDownList.WaitProperty("XtraPopupMenu.Item(0).Text",["Item1text"],1000) - то же (после конвертирования массива начинает всегда возвращать true)
dropDownList.WaitProperty("XtraPopupMenu.Item(0).Text",[null],1000) - то же (после конвертирования массива начинает всегда возвращать true)
dropDownList.WaitProperty("XtraPopupMenu.Count",["1"],1000) - то же (после конвертирования массива начинает всегда возвращать true)

Как всё же выполнить проверку, виден выпадающий список (выпадающее меню) на экране или нет?
  • 0

#2 Vader

Vader

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

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

Отправлено 26 марта 2011 - 20:16

Как всё же выполнить проверку, виден выпадающий список (выпадающее меню) на экране или нет?

Вариант 1:
По-идее, если объект не существует, то вот такое dropDownList.XtraPopupMenu.Count должно бросить исключение, поэтому:
...
try{
 popUpMenuCount = dropDownList.XtraPopupMenu.Count;
}
catch (e){
 Log.Message('Drop Down List does not exist');
 ...
}
...

Вариант 2:
if ("XtraPopupMenu" in dropDownList){
 Log.Message("PopUp menu exists");
}
else{
 Log.Message("PopUp menu does not exist");
}

  • 0

#3 Andjey

Andjey

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

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

Отправлено 28 марта 2011 - 05:42

Vader!

Огромное спасибо за ответ. К сожалению, он мне не помог.

Вариант 1:

Этот вариант работает. Скажу больше, такой вариант у меня был, но я не стал о нём писать.
Беда в том, что в этом варианте, как и в случае прямого присваивания objDropDownList = dropDownList.XtraPopupMenu в лог пишется ошибка: "Cannot obtain the popup menu." То есть, если бы блокировать вывод этой ошибки, вполне можно было применить этот вариант.

Вариант 2:

В обоих случаях выдаёт: "PopUp menu exists".
  • 0

#4 Vader

Vader

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

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

Отправлено 28 марта 2011 - 07:22

Огромное спасибо за ответ. К сожалению, он мне не помог.

Плохо, но ничего не поделаешь. Читайте здесь:
http://smartbear.com...warticle/14753/
http://www.sqaforums...305&Main=518085
  • 0

#5 Andjey

Andjey

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

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

Отправлено 29 марта 2011 - 06:57

Vader!

Обработчик событий помог.

Повесить на событие OnLogError функцию:

function OnLogError(Sender, LogParams) {
if (LogParams.Str == "Cannot obtain the popup menu.") LogParams.Locked = true;
}

И всё работает, а сообщение об ошибке в лог не пишется.

Спасибо за помощь.
  • 0

#6 resvit

resvit

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

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

Отправлено 08 июня 2011 - 08:53

PopupMenu у microsoft'a это класс окна "#32768".
msdn info

Вот так дождитесь появления меню:

Sys.Process("mmc").Window("#32768", "", 1).WaitProperty("Visible",true,10000)
  • 0


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

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