13. Пользовательские формы

Назад: 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-объектов