Обработка ComboBoxTree
#1
Отправлено 17 июня 2008 - 11:26
TestComplete 6, JScript
Впервые начала работу с ТС и сразу же столкнулась с нераспознаваемым контролом ComboBoxTree.
Схема работы программы такова:
1. Открывается ComboBoxTree
2. Выбирается "создать новый"
3. Создается новый сценарий
4. ComboBoxTree открывается еще раз
5. Нажимается "+" под вновь созданным сценарием
6. Из раскрывшегося дерева выбирается "создать новый"
7. Создается новый вариант развития в сценарии
Насколько я поняла, TC не видит ни элементов дерева, ни кнопок "+" и ориентируется только по координатам экрана. Так как после каждого созданного сценария список смещается и координаты меняются, воспроизвести скрипт не удается. А нужно именно создавать сценарии, а не выбирать уже существующие с неизменными координатами.
Подскажите пожалуйста, есть какой-то шанс с этим побороться?
В скрипте все это выглядит так, скриншот контрола прилагается:
function CreateBalticOil()
{
var p1;
var w1;
var w2;
p1 = Sys.Process("DocFlow");
p1.MainForm.WinFormsObject("_mainMenuStrip").ComboBoxTree.titleBar.Click(110, 13);
p1.TreeViewForm.mainPanel.panel.treeView.Click(72, 20);
w1 = p1.ScenarioTypeForm;
w2 = w1.comboBoxScenario;
w2.MouseWheel(-3);
w2.ClickItem("Разлив нефти");
w1.WinFormsObject("groupBox1").radioButtonDisk.ClickButton();
w1.buttonOK.ClickButton();
w1 = p1.ScenarioForm;
w1.panelScenarioControl.ScenarioControl.groupBoxName.textBoxName.Keys("BalticOil1");
w1.panelButtons.buttonOk.ClickButton();
w1 = p1.Window("#32770", "Открыть карту...");
w1.Window("SHELLDLL_DefView").Window("SysListView32", "FolderView").ClickItem("baltika.mxd", 0);
w1.Window("Button", "&Open").ClickButton();
}
function CreateBalticOilVR()
{
var p1;
var w1;
p1 = Sys.Process("DocFlow");
p1.MainForm.WinFormsObject("_mainMenuStrip").ComboBoxTree.titleBar.Click(111, 6);
w1 = p1.TreeViewForm.mainPanel.panel.treeView;
w1.Click(26, 183);
w1.Click(93, 202);
w1 = p1.CreateScenarioVersionForm;
w1.nameTextBox.Keys("BalticOilVR1");
w1.okButton.ClickButton();
p1.WinFormsObject("StartNewVariantDialog", "Начать новый вариант развития").WinFormsObject("Panel", "").WinFormsObject("Button", "ОК").ClickButton();
}
#2
Отправлено 17 июня 2008 - 11:28
#3
Отправлено 17 июня 2008 - 12:57
Скриншот почему-то не присоединяется, но вот здесь ComboBoxTree очень похожий контрол
На чём написано приложение (открыто ли оно), какой контрол используется (лучше спросить у разработчиков)?
Шанс есть почти всегда :) Скорее всего придётся работать через свойства и методы контрола...Подскажите пожалуйста, есть какой-то шанс с этим побороться?
#4
Отправлено 17 июня 2008 - 15:06
Приложение, насколько я понимаю, закрыто. В связи с этим возникает вопрос - а как его скомпилировать как open application? Через какие-то особые настройки студии? К сожалению, я не совсем поняла, как это сделать, из соответствующего раздела справки. Если это сильно облегчит задачу, то можно попробовать попросить перекомпилировать.
#5
Отправлено 17 июня 2008 - 15:12
Приложение написано на .NET 2.0, контрол самопальный, сделанный вручную из кусочков разных контролов.
Приложение, насколько я понимаю, закрыто. В связи с этим возникает вопрос - а как его скомпилировать как open application? Через какие-то особые настройки студии? К сожалению, я не совсем поняла, как это сделать, из соответствующего раздела справки. Если это сильно облегчит задачу, то можно попробовать попросить перекомпилировать.
Если .Net, то open. Для быстроты можно сюда выложить тестовый примерчик (пусть разработчики кинут на форму "самопальный" контрол с "фэйковыми" данными).
#6
Отправлено 18 июня 2008 - 03:49
Приложение Open, это видно из скрипта (используется метод WinFormsObject). Объект, с которым надо "научится" работать - "Sys.Process("DocFlow").TreeViewForm.mainPanel.panel.treeView". Его тип можно узнать выведя в лог значение свойства ClrFullClassName.
Стандартный способ работы с кастомными контролами -- через их нативные свойства и методы. Так как они доступны в TestComplete, вам просто надо узнать у разработчиков как выполнять те или иные действия с контролом программно (попросить код C#) и использовать тот же метод в скрипте.
Так как контрол, скорее всего, динамически создаётся и "схлопывается", то в Object Browser его, вероятно, не найдешь, чтобы посмотреть доступные свойства и методы. Однако, это можно сделать с помощью Finder tool следующим образом:
- Откройте окно Object Properties (есть кнопка на тулбаре и пункт в контекстном меню Object Browser'а).
- Правой кнопкой щелкните где-нибудь внутри окна и выберите 'Properties' чтобы открыть диалог настроек.
- В настройках отключите опцию 'Capture mouse' (кажется так) и закройте диалог.
- В приложении раскройте комбо бокс, чтобы стало видно дерево. Наведите указатель мыши на дерево и дождитесь, пока в Object Properties не появятся свойства нужного контрола.
- Нажмите Ctrl-Shift-A для фиксации выбранного объекта в Object Properties.
Дмитрий
#7
Отправлено 18 июня 2008 - 07:39
На объект действовали методом Keys и затем выбор соответствующего подменю осуществлялся кнопками Down и Spase(в скрипте просто пробел).
Этот метод позволял не зависеть от размеров окна, разрешения и т.д.
P.s. я до сих пор делаю выбор из ниспадающих меню таким методом..если кто подскажет более хороший способ - велком!
Поправлюсь...это если ClickItem нет.
#8
Отправлено 18 июня 2008 - 08:06
...На объект действовали методом Keys и затем выбор соответствующего подменю осуществлялся кнопками Down и Spase(в скрипте просто пробел).
Этот метод позволял не зависеть от размеров окна, разрешения и т.д.
Ваш вариант - возможный workaround, но:
...Так как после каждого созданного сценария список смещается и координаты меняются...
А это значит, что если нужный элемент не первый в списке\дереве, то число "Down" будет увеличиваться\уменьшаться. Следовательно, нужно определять, какой элемент сейчас выбран (после каждого "Down"). Опять же, мы приходим к работе через свойства и методы...
#9
Отправлено 18 июня 2008 - 10:27
Оказывается, ClrFullClassName = Crownwood.DotNetMagic.Controls.TreeControl, взят отсюда. НеОбъект, с которым надо "научится" работать - "Sys.Process("DocFlow").TreeViewForm.mainPanel.panel.treeView". Его тип можно узнать выведя в лог значение свойства ClrFullClassName.
совсем понятно с методами: нужно использовать те, которые находятся на закладке "Methods"->.NET, те, которые я найду непосредственно в коде, или первые уже включают в себя вторые (если приложение открыто?)? Код у меня появится ближе к концу дня, но вот например там есть метод SetNode(...). Как мне заставить скрипт выполнить его?
Форма с контролом по техническим причинам будет чуть позже.
#11
Отправлено 18 июня 2008 - 14:40
Работает, кликает, жизнь просто прекрасна)!
Большое спасибо)
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных