Перейти к содержимому

modbear

Регистрация: 18 апр 2007
Offline Активность: 02 дек 2016 09:45
*****

#106643 Скрипт для обработки пользовательской формы

Написано modbear 13 июня 2012 - 11:44

Сначала общие советы/замечания:
  • Кнопке "Отмена" поставьте ModalResult = mrCancel, Cancel = True.
  • Вместо TextEdit + кнопка я бы посоветовала использовать компонент TcxButtonEdit, в котором кнопки встроенные. Зайдите в редактор свойства Properties.Buttons и установите кнопке Kind = bkText и Caption = Очистить. Получится так, как на скриншоте в аттаче.
    Так лучше в плане user experience - понятно, что кнопка "Очистить" относится именно к данному полю.
    К тому же, компоненту TcxButtonEdit можно назначить маску, чтобы запретить ввод невалидных символов (букв и т.п.).
  • На кнопку "OK" я бы навесила дополнительную проверку, что текст непустой.
Код - примерно так:
function Main() {
  var frm = UserForms.Form1;

  var res = frm.ShowModal();
  if (res == mrOk) {
    NumProject = parseInt(frm.cxButtonEdit1.Text);
  }
  else {
    Runner.Stop();
  }
}

// Этот обработчик надо прикрутить к событию OnButtonClick компонента TcxButtonEdit
function Form1_cxButtonEdit1_OnButtonClick(Sender, AButtonIndex) {
  UserForms.Form1.cxButtonEdit1.Text = "";
}

// Этот обработчик надо прикрутить к событию OnClick кнопки "ОК"
function Form1_cxButton1_OnClick(Sender) {
  if (UserForms.Form1.cxButtonEdit1.Text == "") {
    ShowMessage("Пожалуйста, введите номер проекта.");
  }
  else {
    UserForms.Form1.ModalResult = mrOk;
  }
 }
 

Прикрепленные изображения

  • ClearButton.png

  • 1


#105995 Запуск ТС в вин 7 на ВМ

Написано modbear 25 мая 2012 - 14:48

Попробуйте способ, описанный здесь:
TestComplete Tip: Running Tests in Minimized Remote Desktop Windows
  • 1


#105811 Использование массивов

Написано modbear 21 мая 2012 - 15:19

Используйте проектную переменную типа Table.
  • 1


#105251 Ftp+testcomplete

Написано modbear 07 мая 2012 - 13:14

Кстати, подскажите люди добрые, как можно из кода запустить бат файл? Я что-то не разобрался ,поэтому пришлось его добавлять как TestedApps?

Используйте скриптовый метод WshShell.Run:
Sys.OleObject("WScript.Shell").Run("C:\\ftpload.bat", 1, true);
По-идее, можно даже обойтись без bat-файла, как-то так:
Sys.OleObject("WScript.Shell").Run("ftp -s:C:\\commands.txt", 1, true);

  • 2


#104960 Мониториг процессов на удаленной машине

Написано modbear 27 апреля 2012 - 08:31

Если на сервере - Windows, то можно использовать WMI:
Monitoring Performance Data
  • 2


#104448 Ftp+testcomplete

Написано modbear 18 апреля 2012 - 08:24

Есть куча способов работать с FTP из скриптов, например:
* Скриптовый объект InetCtls.Inet из msinet.ocx;
* Сторонние скриптовые компоненты для работы с FTP, см. примеры http://www.robvander...nternet_ftp.php;
* Командная утилита ftp, входящая в Windows; см. пример здесь;
* .NET класс System.Net.FtpWebRequest - через CLR Bridge;
* Java-библиотеки для работы с FTP - через Java Bridge.
  • 2


#104443 Работа с UserForms

Написано modbear 18 апреля 2012 - 07:33

Решение оказалось очень простым, но, вполне возможно не совсем грамотным.
Есть обработчики событий в формах (Events). В одном чекбоксе выбираем Events OnClick и добавляем новый скрипт, в котором и будет идти обработка события.
Мой скрипт выглядит примерно так (На самом деле выглядит жутко, но работает):

function UserForm4_cxCheckBox12_OnMouseEnter(Sender)
{
 if (UserForms.UserForm4.cxCheckBox12.Checked == true){
 UserForms.UserForm4.cxCheckBox1.Checked = true;
 UserForms.UserForm4.cxCheckBox2.Checked = true;
 UserForms.UserForm4.cxCheckBox3.Checked = true;
 UserForms.UserForm4.cxCheckBox4.Checked = true;
 UserForms.UserForm4.cxCheckBox5.Checked = true;
 UserForms.UserForm4.cxCheckBox6.Checked = true;
 }
 else{
 UserForms.UserForm4.cxCheckBox1.Checked = false;
 UserForms.UserForm4.cxCheckBox2.Checked = false; 
 UserForms.UserForm4.cxCheckBox3.Checked = false; 
 UserForms.UserForm4.cxCheckBox4.Checked = false; 
 UserForms.UserForm4.cxCheckBox5.Checked = false; 
 UserForms.UserForm4.cxCheckBox6.Checked = false; 
}
}

Мне кажется, лучше обрабатывать не OnClick/OnMouseEnter, а OnChange.

Также могу предложить более короткий, но чуть менее читабельный код:
var form = UserForms.UserForm4;
var state = form.cxCheckBox12.Checked;
for (var i = 1; i <= 6; i++)
  form["cxCheckBox" + i].Checked = state;

  • 2


#104274 Подсчет количества ошибок с помощью FolderErrCount()

Написано modbear 16 апреля 2012 - 12:48

Не FolderErrCount, а Log.FolderErrCount.


  • 1


#103806 Проверка подключения к интернету

Написано modbear 09 апреля 2012 - 15:44

Про пинг теоритически понятно, а вот как это будет выглядеть на практике?
Я просто не представляю как это реализовать. запустить cmd команду на пинг из TC смогу, а вот как получить результат пинга и как его обработать?!

Лично мне больше нравится вариант с WMI-классом Win32_PingStatus:
http://www.robvander...etwork_ping.php

В таком случае не надо возиться с cmd и парсить результат.
  • 1


#103533 Анализ потребления ресурсов

Написано modbear 04 апреля 2012 - 12:14

Еще вопрос, требуется определить сколько на систему установлено оперативной памяти, у какого обекта можно узнать эту проперти?

См. тему Physical Memory Получение параметров физической памяти
  • 1


#103042 Тестируемое приложение зависает при попытке доступа к AccessibilityObj

Написано modbear 27 марта 2012 - 11:32


Есть и другие способы. Например, если wValue(row, column) возвращает собственно картинку, т.е. .NET System.Drawing.Bitmap, то можно сделать ей Save_2(fileName), а затем "сконвертировать" в TestComplete'овский объект Picture, используя Utils.Picture.LoadFromFile(fileName).

А нет ли что-нибудь для сохранения в Clipboard?

Получаете TestComplete'овский объект Picture и сохраняете его в Sys.Clipboard.

.NET картинки, возможно, можно записывать в clipboard как-нибудь напрямую, например, используя .NET класс System.Windows.Clipboard, но я не пробовала, поэтому точно сказать не могу.
  • 1


#103026 Тестируемое приложение зависает при попытке доступа к AccessibilityObj

Написано modbear 27 марта 2012 - 09:59

А скажите, не появится ли в этом случае возможность извлекать из ячейки рисунок? Сейчас пользуюсь свойством Value только для того, чтобы определить присутствует он в ячейке, или нет (null). Сам же рисунок приходится получать при помощи метода picture по координатам ячейки.

Насколько я знаю, метода "из коробки" для этого нет.

Ваш вариант - один из возможных.

Есть и другие способы. Например, если wValue(row, column) возвращает собственно картинку, т.е. .NET System.Drawing.Bitmap, то можно сделать ей Save_2(fileName), а затем "сконвертировать" в TestComplete'овский объект Picture, используя Utils.Picture.LoadFromFile(fileName).
  • 1


#103013 Тестируемое приложение зависает при попытке доступа к AccessibilityObj

Написано modbear 27 марта 2012 - 06:32

Перерыв материалы на сайте AutomatedQA/SmartBear, с удивлением обнаружил, что для DataGridView, с которым я работаю, нет метода клика по определенной ячейке ClickCell()...

Как я уже писала здесь, ClickCell/wValue и т.п. для вашего грида изначально нет, потому что у него нестандартное имя класса. Вам надо добавить его в Object Mapping для DataGridView. После этого ClickCell как раз и появится. 
  • 1


#102166 Как получить значение определённого формата из буфера обмена

Написано modbear 14 марта 2012 - 07:26

Если на компьютере имеется .NET 3+, то вместо Sys.Clipboard можно использовать .NET класс System.Windows.Clipboard. Например, так:
// JScript
var FORMAT_RTF = dotNET.System_Windows.DataFormats.Rtf;
var oClip, oData, strRtf;

oClip = dotNET.System_Windows.Clipboard;
oData = oClip.GetDataObject();
if (oData.GetDataPresent(FORMAT_RTF))
{
  var strRtf = oData.GetData(FORMAT_RTF).OleValue;
  Log.Message(strRtf);
}
Для работы такого скрипта надо в проектные настройки CLR Bridge добавить PresentationCore.dll. Также может понадобиться выбрать опцию Single-threaded apartment; по крайней мере, у меня без этой опции GetDataObject не работает. 
  • 1


#101902 Как использовать две взаимосвязанные переменные в разных функциях

Написано modbear 06 марта 2012 - 10:29

Можно определить strName и strPrice как глобальные переменные:
var strName, strPrice;

function ranName()
 {
 ...
 var rowCount; //, strName, strPrice;
 ...
 }

Хотя если у вас несколько скриптовых юнитов, то лучше использовать переменные проекта (в Project Explorer правый клик по проекту > Edit > Variables):
function ranName()
 {
 ...
 Project.Variables.strName = Excel.Cells(row, 1).Value.toString();
 Project.Variables.strPrice = Excel.Cells(row, 2).Value.toString();
 }

  • 1