| Назад: 12 Особенности работы с графическими объектами | Содержание | Дальше: 14 Использование COM-объектов |
Иногда перед запуском тестов бывает необходимо установить какие-то предварительные настройки. Например, задать логин и пароль, который будет затем использоваться в приложении, выбрать сервер, на котором будут запускаться тесты, указать человека, запустившего тесты на выполнение и т.п. и т.п.
Конечно, все эти настройки можно хранить в INI или XML файлах, а можно оформить выбор параметров более красиво с помощью пользовательских форм.
Создание пользовательских форм в TestComplete не отличается от аналогичных конструкторов в визуальных системах разработки (например, Visual Studio или Delphi).
Для того, чтобы работать с пользовательскими формами, необходимо сначала добавить элемент User Forms в проект. Для этого щелкните правой кнопкой мыши по имени проекта, выберите пункт Add – New Item и в открывшемся диалоговом окне выберите элемент User Forms.

После этого таким же образом добавляем новую пользовательскую форму (правый щелчок на элементе UserForms, Add – New Item), задаем форме любое имя и нажимаем ОК. После чего нам открывается конструктор форм.

Мы не будем рассматривать все доступные элементы управления, которые можно использовать в пользовательских формах, так как их очень много: поля, списки, кнопки, флажки, панели, стандартные диалоги и прочие. Мы просто рассмотрим несколько примеров использования пользовательских форм.
Пример 1 – обработка возвращаемого формой результата
Предположим, у нас есть несколько серверов, на которых можно запускать скрипты, и непосредственно перед запуском необходимо выбрать необходимый сервер. Имена серверов можно хранить в массиве и отображать пользователю на форме в виде выпадающего списка.
Создадим новую пользовательскую форму и поместим на нее 3 элемента: ComboBox и 2 кнопки.
Для элемента ComboBox зададим следующие свойства:
- Name = cxServer
- Text = Select server…
Кнопка ОК будет иметь следующие свойства:
Caption = OK
ModalResult = mrOk
Default = True
Кнопка Cancel:
- Cancel = True
- ModalResult = mrCancel
Свойство ModalResult очень важно: именно по нему мы сможем определить, какая именно кнопка была нажата – OK или Cancel, и дальше выполнить необходимые для каждой ситуации действия.
Для того, чтобы заполнить список элементами массива, необходимо изменить его свойство Properties.Items.Text, где перечислить элементы списка, разделив их символом перевода строки («\n»). Затем с помощью метода ShowModal отобразим форму на экране и проверим результат, с которым закроется форма (mrOk или mrCancel). Если пользователь нажмет кнопку Cancel, то мы прервем выполнение теста с помощью метода Runner.Halt.
Вот код скрипта, который выполняет все указанные действия:
function TestUserForms()
{
var arrServers = new Array(“server one”, “server two”, “server three”);
var i, mr, server;
var fForm1 = UserForms.UserForm1;
//заполняем список серверов
for(i = 0; i < arrServers.length; i++)
{
fForm1.cxServer.Properties.Items.Text += arrServers[i] + “\n”;
}
// Показать форму
mr = fForm1.ShowModal();
// проверяем результат, с которым закрылась форма
if(mr == mrOk)
{
Log.Message(“OK button is pressed”);
server = fForm1.cxServer.Text;
Log.Message(server + ” server selected”)
}
else
{
Runner.Halt(“Operation was aborted by user”);
}
}
А вот как будет выглядеть наша форма для пользователя:

Пример 2 – обработка событий
Пример выше очень простой, так как пользователь может не просто выбрать элемент из списка, а ввести какой-то некст, который будет неправильным именем сервера, в результате чего все последующие тесты выдадут ошибку.
Предположим, что мы хотим предупреждать пользователя о том, что введенное значение не является значением из списка. Для этого поместим на форму дополнительный элемент управления – Label, свойство Visible ему установим в False. Затем выделим элемент список и на панели свойств перейдем на вкладку Events.

Выделим событие OnChange, как показано на скриншоте выше и нажмем кнопку с изображенным троеточием. При этом откроется диалоговое окно New Test, в котором мы укажем имя и расположение функции, которая будет связана с событием OnChange.

Нажмем ОК и напишем следующую функцию:
function UserForm1_cxServer_OnChange(Sender)
{
var cbox = UserForms.UserForm1.cxServer;
if(cbox.Properties.Items.Text.match(cbox.Text) == null)
{
UserForms.UserForm1.cxLabel1.Visible = true;
UserForms.UserForm1.cxLabel1.Caption = “unknown server: ” + cbox.Text;
}
else
{
UserForms.UserForm1.cxLabel1.Visible = false;
}
}
Теперь снова запустим созданную ранее функцию TestUserForms и убедимся, что при введении в поле списка любого значения, которое отсутствует в списке, у нас появляется красное предупреждение об этом, а при выборе элемента из списка надпись исчезает.


Естественно, одна и та же функция может использоваться как обработчик сразу нескольких событий разных элементов управления. Для этого достаточно при создании обработчика нажать не кнопку с троеточием, а кнопку с изображенным на ней треугольничком и в появившемся окне Select Test выбрать существующую функцию.

Возможно, приведенные примеры не очень хороши, так как на практике обычно встречаются более сложные пользовательские формы, однако мы решили не усложнять примеры, а сконцентрироваться на главных моментах.
Фактически, с помощью TestComplete User Forms можно написать довольно мощные приложения, однако помните, что TestComplete – это все же средство автоматизации тестирования, а не разработки 🙂
Хотя возможности TestComplete-а по созданию пользовательских форм велики, все же они не бесконечны, и вполне вероятно, что вам может понадобиться что-то, что невозможно сделать стандартными средствами. В таких случаях нужно постараться пораскинуть мозгами и придумать, как обойти имеющуюся проблему.
Например, вы хотите поместить на форму radio list, в котором по умолчанию выбран какой-то элемент. Например, так:

Однако среди списка свойств элемента RadioGroup нет свойства SelectedValue, DefaultItem или чего-то подобного, есть только свойство ItemIndex, в котором хранится выбранный в данный момент элемент. Чтобы обойти эту проблему и иметь выделенный по умолчанию элемент, достаточно создать обработчик события OnShow для нашей формы и написать там следующий код:
UserForms.UserForm1.cxRadioGroup1.ItemIndex = 1;
Теперь при открытии формы у нас будет по умолчанию выделен второй элемент списка.
| Назад: 12 Особенности работы с графическими объектами | Содержание | Дальше: 14 Использование COM-объектов |