Как выполнить проверку, что меню видимо на экране?
#1
Отправлено 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)
Как всё же выполнить проверку, виден выпадающий список (выпадающее меню) на экране или нет?
#2
Отправлено 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");
}
#3
Отправлено 28 марта 2011 - 05:42
Огромное спасибо за ответ. К сожалению, он мне не помог.
Вариант 1:
Этот вариант работает. Скажу больше, такой вариант у меня был, но я не стал о нём писать.
Беда в том, что в этом варианте, как и в случае прямого присваивания objDropDownList = dropDownList.XtraPopupMenu в лог пишется ошибка: "Cannot obtain the popup menu." То есть, если бы блокировать вывод этой ошибки, вполне можно было применить этот вариант.
Вариант 2:
В обоих случаях выдаёт: "PopUp menu exists".
#4
Отправлено 28 марта 2011 - 07:22
Плохо, но ничего не поделаешь. Читайте здесь:Огромное спасибо за ответ. К сожалению, он мне не помог.
http://smartbear.com...warticle/14753/
http://www.sqaforums...305&Main=518085
#5
Отправлено 29 марта 2011 - 06:57
Обработчик событий помог.
Повесить на событие OnLogError функцию:
function OnLogError(Sender, LogParams) {
if (LogParams.Str == "Cannot obtain the popup menu.") LogParams.Locked = true;
}
И всё работает, а сообщение об ошибке в лог не пишется.
Спасибо за помощь.
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных

