Здравствуйте, уважаемые Гуру ТестКомплит-а!
Очень надеюсь на вашу помощь. Заранее благодарен.
Я тестирую .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)
Как всё же выполнить проверку, виден выпадающий список (выпадающее меню) на экране или нет?

Как выполнить проверку, что меню видимо на экране?
Автор Andjey, 26 мар 2011 16:34
Сообщений в теме: 5
#1
Отправлено 26 марта 2011 - 16:34
#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
Vader!
Огромное спасибо за ответ. К сожалению, он мне не помог.
Вариант 1:
Этот вариант работает. Скажу больше, такой вариант у меня был, но я не стал о нём писать.
Беда в том, что в этом варианте, как и в случае прямого присваивания objDropDownList = dropDownList.XtraPopupMenu в лог пишется ошибка: "Cannot obtain the popup menu." То есть, если бы блокировать вывод этой ошибки, вполне можно было применить этот вариант.
Вариант 2:
В обоих случаях выдаёт: "PopUp menu exists".
Огромное спасибо за ответ. К сожалению, он мне не помог.
Вариант 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
Vader!
Обработчик событий помог.
Повесить на событие OnLogError функцию:
function OnLogError(Sender, LogParams) {
if (LogParams.Str == "Cannot obtain the popup menu.") LogParams.Locked = true;
}
И всё работает, а сообщение об ошибке в лог не пишется.
Спасибо за помощь.
Обработчик событий помог.
Повесить на событие OnLogError функцию:
function OnLogError(Sender, LogParams) {
if (LogParams.Str == "Cannot obtain the popup menu.") LogParams.Locked = true;
}
И всё работает, а сообщение об ошибке в лог не пишется.
Спасибо за помощь.
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных