Как найти объект, если известно значение свойства, но неизвестно назва
Имеется функция Find (и её производные), которые позволяют по паре "Свойство - Значение" отыскать нужный объект.А вот что делать, если имеется объект, название свойства которого тебе неизвестно, но известно значение этого свойства?Скажем, есть кнопка с надписью "Справочники" и мне нужно на неё кликнуть. FinderTool может максимум отыскать панель, на которой лежит эта кнопка, но не саму кнопку. А название свойства кнопки, которое имеет значение "Справочники" мне неизвестно, соответственно функциями "Find" для поиска этой кнопки я также воспользоваться не могу. Как решаются такого рода задачи?
#3 Zenturio- ФИО: Дмитрий
- Город: Смоленск - Москва
Имеется функция Find (и её производные), которые позволяют по паре "Свойство - Значение" отыскать нужный объект.А вот что делать, если имеется объект, название свойства которого тебе неизвестно, но известно значение этого свойства?Скажем, есть кнопка с надписью "Справочники" и мне нужно на неё кликнуть. FinderTool может максимум отыскать панель, на которой лежит эта кнопка, но не саму кнопку. А название свойства кнопки, которое имеет значение "Справочники" мне неизвестно, соответственно функциями "Find" для поиска этой кнопки я также воспользоваться не могу. Как решаются такого рода задачи?
#4 ch_ip- ФИО: Павел Абдюшев
- Город: Москва
Имеется функция Find (и её производные), которые позволяют по паре "Свойство - Значение" отыскать нужный объект.А вот что делать, если имеется объект, название свойства которого тебе неизвестно, но известно значение этого свойства?Скажем, есть кнопка с надписью "Справочники" и мне нужно на неё кликнуть. FinderTool может максимум отыскать панель, на которой лежит эта кнопка, но не саму кнопку. А название свойства кнопки, которое имеет значение "Справочники" мне неизвестно, соответственно функциями "Find" для поиска этой кнопки я также воспользоваться не могу. Как решаются такого рода задачи?
XXX верное говорит. Как правило, внутри панелей приходится работать с кнопками через их индексы, а совсем в тяжелых случаях через координаты.Но есть еще один простой способ - это найти обходной путь :)Обязательно ли кликать на кнопку? Обычно команды на панели инструментов дублируют соответствующие операции из основного мню. TC хорошо справляется как с обычным, так и с контекстным меню. Если у вас Delphi-приложение, то попробуйте откомпилировать его с дебажной информацией, как описано в документации к TC. В этом случае вероятность успешной работы с нопками внутри панели будет больше. Если же это стороннее приложение(например, Диасофт 5NT), то в этом случае откомпилировать его не получится и придется идти обходными путями.
Для начала нужно узнать на каком языке написано приложениеЕсли компонент не распознает тесткомплит, то можно попробывать другие тулы. И посмотреть нужное свойство.
Если минарет, значит выше всех (с)
#5 TheSTНу для разных типов приложений, для разных объектов по разному.. Гдето можно воспользоваться методом ClickItem() (Например, panel.ClickItem(1) - кликает по второму элементу панели) Гдето можно воспользоваться методом Click(x,y) , где x,y - координаты кнопки внутри панели (например в Java-приложении для объекта SWTObject("CTabFolder", "") чтобы перейти на 3-ю вкладку я использовал именно этот метод,а координаты находил так - x = tab.items.Item(2).x , y = tab.items.Items(2).y )
Это не подходит, хотелось бы не наобум тыкаться в свойства надеясь найти эту кнопку, а быстро получить доступ к нужному элементу, не тратя времени на поиск. Я использую объектную модель Tree, в обекте SideBar (панель, где находится кнопка) кнопка закопана глубоко через ещё каких-то несколько посреднических объектов (их там десятки, и у них ещё дочек десятки, а у них, в свою очередь - внучек). Вручную искать её перебирая все свойства подряд, уходя в глубь по этим объектам, чтобы встретить что-то похожее на "Item" - дело неблагодарное, на это уходит достаточно времени. Например, я потратил порядка часа, чтобы вручную найти кнопку и кликнуть по ней путь к ней получился такой:
Именно поэтому я и задал этот вопрос - как можно отыскать функцию по известному значению свойства, например, тексту на кнопке.Сейчас я таким макаром не могу найти другую кнопку на другой панели, т.к. она немного другая. А ведь есть ещё куча других управляющих элементов. На каждый убить по часу? Нет, спасибо :) Интересует именно как такие задачи решаются профессионалами, т.е. алгоритм, подходящий для любых ситуаций любой закопанности элемента управления на сколько угодно уровней и любого названия свойства текста, а не поиск вручную "наобум". Ещё хуже, если у кнопки даже текста нет (и хинт забыли поставить). Как тогда её вообще найти? Ума не приложу.. Ведь теперь в этом разветвлённом дереве уже не поймёшь какой из этих объектов вообще кнопка. Есть ли универсальные рекомендации?
Для начала нужно узнать на каком языке написано приложение Если компонент не распознает тесткомплит, то можно попробывать другие тулы. И посмотреть нужное свойство.
Приложение написано на Delphi. Какие тулзы можно попробовать?
Если у вас Delphi-приложение, то попробуйте откомпилировать его с дебажной информацией, как описано в документации к TC. В этом случае вероятность успешной работы с нопками внутри панели будет больше.