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

Фотография

Полезные процедуры и функции


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 32

#1 galogenIt

galogenIt

    Постоянный участник

  • Members
  • PipPipPip
  • 192 сообщений
  • ФИО:Эдуард

Отправлено 12 августа 2008 - 08:37

Содержание библиотеки:
1. Парсинг строки
2. Автоматическое переименование регионов.
3. Получение тестовых данных из Excel или базы данных
4. Вариация на тему парсинг строки
5. Замена подстроки в строке
6. Работа с нестрандартным DataGridView в .NET проектах
7. Функция для активации редактирования стандартного DataGridView (dgv) в .NET проектах
8. Создание, заполнение и редактирование файла xls
9. Функция получения GUID, JS
10. Работа с контекстным меню, элементы которого подгружаются динамически. Для .Net проектов
  • 0
С уважением, Эдуард!

#2 Genka

Genka

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 328 сообщений
  • ФИО:Геннадий Алпаев
  • Город:Украина, Днепр


Отправлено 12 августа 2008 - 09:00

Эдуард, используйте, пожалуйста, для примеров кода соответствующее оформление (на панели инструментов самая правая кнопочка со всплывающей подсказкой "Код"). А то нечитабельно
  • 0

TestComplete для начинающих (видеозаписи курса)

Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)

Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest


#3 Genka

Genka

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 328 сообщений
  • ФИО:Геннадий Алпаев
  • Город:Украина, Днепр


Отправлено 12 августа 2008 - 09:23

Попросил Case'a закрепить эту тему. Давно надо было такую создать, ага
  • 0

TestComplete для начинающих (видеозаписи курса)

Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)

Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest


#4 galogenIt

galogenIt

    Постоянный участник

  • Members
  • PipPipPip
  • 192 сообщений
  • ФИО:Эдуард

Отправлено 12 августа 2008 - 11:40

Эдуард, используйте, пожалуйста, для примеров кода соответствующее оформление (на панели инструментов самая правая кнопочка со всплывающей подсказкой "Код"). А то нечитабельно


Was done
  • 0
С уважением, Эдуард!

#5 Case

Case

    Основатель

  • Members
  • PipPipPipPipPipPip
  • 7 071 сообщений
  • ФИО:Панкратов Вячеслав
  • Город:Украина, Киев.

Отправлено 12 августа 2008 - 15:58

Попросил Case'a закрепить эту тему. Давно надо было такую создать, ага


Done!
  • 0
Слава Панкратов
Редактор портала www.it4business.ru

#6 galogenIt

galogenIt

    Постоянный участник

  • Members
  • PipPipPip
  • 192 сообщений
  • ФИО:Эдуард

Отправлено 13 августа 2008 - 06:25

1. Парсинг строки.

Данный код любезно предоставлен Genka, надеюсь он не против его опубликования. Алгоритм достаточно понятен и прозрачен. Естественно, кто пользуется JScript, могут просто применять соответствующие функции.

DelphiScript

//Преобразовать строку по разделителю в массив
Function Split(Str:string; separator:string);
var iElements, i : integer;
var arr : Variant;
begin
  //считаем количество элементов в строке, разделенных указанным разделителем
  iElements := BuiltIn.GetListCount(Str, separator);
  //создаем массив нужного размера
  arr := BuiltIn.CreateVariantArray(0, iElements-1);
  //последовательно считываем элемент строки и записываем его в массив
  for i := 0 to iElements-1 do
  begin
	arr[i] := BuiltIn.GetListItem(Str, i, separator); 
  end;
  //возвращаем массив строк
  Result := arr;
end;

Теперь остается написать процедурку чтения этих строк из файла
  • 0
С уважением, Эдуард!

#7 5482788

5482788

    Новый участник

  • Members
  • Pip
  • 12 сообщений
  • ФИО:Петр

Отправлено 19 августа 2008 - 14:15

Неплохо было бы в первом посте сделать некое содержание и проиндексировать последующие полезные функции :)
  • 0

#8 Genka

Genka

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 328 сообщений
  • ФИО:Геннадий Алпаев
  • Город:Украина, Днепр


Отправлено 19 августа 2008 - 14:41

Неплохо было бы в первом посте сделать некое содержание и проиндексировать последующие полезные функции :)


+1

galogenIt, это на твоей совести теперь :)
  • 0

TestComplete для начинающих (видеозаписи курса)

Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)

Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest


#9 galogenIt

galogenIt

    Постоянный участник

  • Members
  • PipPipPip
  • 192 сообщений
  • ФИО:Эдуард

Отправлено 22 августа 2008 - 16:45

2. Автоматическое переименование регионов.

Возникает такая потребнобность перенести ранее созданные регионы в новый проект, или регионы сделаны независимым способом, или существуют другие причины, по которым регионы создавались вне текущего проекта.

Простое копирование регионов в папку текущего проекта автоматом не включает добавленные регионы в список доступных и включать их приходится через New Item. Добавление происходит довольно быстро и не вызывает затруднений.

Однако добавленный таким образом регион выглядит так: region1.bmp, в отличии от региона добавленного с помощью инструмента чек-поинт, а именно region1

Если оставить, как есть, т.е. region1.bmp, то при исполнении скрипта возникает ошибка, поскольку в скрипте стоит ссылка region1, а в пространстве имен реально стоит region1.bmp.
Т.е. нужно убирать расширение. Еслидобавлено 1-2 региона это несложно сделать вручную, но если вы добавили сразу много, возникает вынужденная трата времени.

Обратившись за помощью в саппорт, команда сказала мне, что данная фича будет включена в будущий релиз, а пока можно использовать такой вот код:

{Утилита для работы с регионами.
Потребность в ней возникает, когда регионы создаются вне записи скрипта и затем включаются в проект.
В результате такого дейчствия имя элемента в базе регионов имеет расширение, наличие которого
вызывает ошибку при поиски заданного региона при воспроизведении скрипта. Утилита позволяет быстро переопределить
названия элементов, удалив расширения}
procedure DeleteAllExtAtRegions;
  var arrayOfNames : olevariant;
  var PicCount :integer;
  var i:integer;
  
begin
  
  PicCount := Regions.Count();
  arrayOfNames:=BuiltIn.CreateVariantArray(0,PicCount-1);
  
  for i:= 0 to PicCount-1 do 
	  arrayOfNames[i] := Regions.FileNameByIndex(i);
	  
  for i:= 0 to PicCount-1 do
	 Regions.Remove(Regions.NameByIndex(0));
 
  for i:= 0 to PicCount-1 do begin
	 Regions.Add(arrayOfNames[i], ChangeFileExt(ExtractFileName(arrayOfNames[i]), ''));
 end;
И первоначальный вариант от саппорта на JScript

function DeleteAllExtAtRegions()
{
  var curName, curNameWithoutExt;
  var arrayOfNames = new Array();
  var PicCount = Regions.Count();
  for (var i = 0; i < PicCount; i++)
  {
	arrayOfNames[i] = Regions.FileNameByIndex(i);
  }
  for (var i = 0; i < PicCount; i++)
  {
	Regions.Remove(Regions.NameByIndex(0));
  }
  for (var i = 0; i < PicCount; i++)
  {
	curName = arrayOfNames[i];
	Regions.Add(arrayOfNames[i], ChangeFileExt(ExtractFileName(arrayOfNames[i]), ""));
  }
}

  • 0
С уважением, Эдуард!

#10 galogenIt

galogenIt

    Постоянный участник

  • Members
  • PipPipPip
  • 192 сообщений
  • ФИО:Эдуард

Отправлено 22 августа 2008 - 16:49

galogenIt, это на твоей совести теперь :)

Ну совесть у меня резиновая, сделал я, но пока и нет вкладов :)
  • 0
С уважением, Эдуард!

#11 tom_13

tom_13

    Постоянный участник

  • Members
  • PipPipPip
  • 206 сообщений
  • Город:Киев

Отправлено 13 октября 2008 - 11:56

3. Получение набора тестовых данных

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

1. Эта функция фозвращает набор данных с Excel

function GetDataFromExcel(Path, Sheet, ammonth)   
{																		   //  Path - путь 
   var lDriver = DDT["ExcelDriver"](Path, Sheet);	  //  Sheet - лист
   var arrExcelData = new Array();						   //  ammonth - кол-во столбцов
	
   var count=0;
   while (!lDriver["EOF"]())
   {
	 var arrElement = new Array();
	 for (var i=0;i<ammonth;i++)
	  arrElement[i]=lDriver["Value"](i);
	 
	 arrExcelData[count]=arrElement;
	 count++;
	 lDriver["Next"]();
  }
  DDT["CloseDriver"]('lDriver');
  return arrExcelData;
}

2. Для тех кто хранение тестовых даных доверяют базе данных есть вот такая функция
  • 0

#12 tom_13

tom_13

    Постоянный участник

  • Members
  • PipPipPip
  • 206 сообщений
  • Город:Киев

Отправлено 13 октября 2008 - 11:56

3. Получение набора тестовых данных

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

1. Эта функция фозвращает набор данных с Excel

function GetDataFromExcel(Path, Sheet, ammonth)   
{																		   //  Path - путь 
   var lDriver = DDT["ExcelDriver"](Path, Sheet);	  //  Sheet - лист
   var arrExcelData = new Array();						   //  ammonth - кол-во столбцов
	
   var count=0;
   while (!lDriver["EOF"]())
   {
	 var arrElement = new Array();
	 for (var i=0;i<ammonth;i++)
	  arrElement[i]=lDriver["Value"](i);
	 
	 arrExcelData[count]=arrElement;
	 count++;
	 lDriver["Next"]();
  }
  DDT["CloseDriver"]('lDriver');
  return arrExcelData;
}

2. Для тех кто хранение тестовых даных доверяют базе данных есть вот такая функция
  • 0

#13 tom_13

tom_13

    Постоянный участник

  • Members
  • PipPipPip
  • 206 сообщений
  • Город:Киев

Отправлено 13 октября 2008 - 12:01

3. Получение набора тестовых данных

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

1. Эта функция фозвращает набор данных с Excel

// JScript
function GetDataFromExcel(Path, Sheet, ammonth)   
{																		   //  Path - путь 
   var lDriver = DDT["ExcelDriver"](Path, Sheet);	  //  Sheet - лист
   var arrExcelData = new Array();						   //  ammonth - кол-во столбцов
	
   var count=0;
   while (!lDriver["EOF"]())
   {
	 var arrElement = new Array();
	 for (var i=0;i<ammonth;i++)
	  arrElement[i]=lDriver["Value"](i);
	 
	 arrExcelData[count]=arrElement;
	 count++;
	 lDriver["Next"]();
  }
  DDT["CloseDriver"]('lDriver');
  return arrExcelData;
}

2. Для тех кто хранение тестовых даных доверяют базе данных есть вот такая функция
На вход которой идет SQL запрос в виде строки

// JScript
function GetDataFromOracle(txtSQLcommand)
{
  var Query;
  var arrReturn = new Array();
  Query = ADO["CreateADOQuery"]();
  Query["ConnectionString"] = // сюда вписать строку конекта

  Query["SQL"] = txtSQLcommand;
  Query["Open"]();
  Query["First"]();
  var k = 0;
  while (!Query["EOF"])
  {
	var arrEl = new Array();
	for (var i = 0; i < Query["FieldCount"]; i++)
	 arrEl[i] = Query["Field"](i)["Value"];
	arrReturn[k] = arrEl;
	k++;
	Query["Next"]();
  }
  Query["Close"]();
  return arrReturn;
}

Для любителей DelphiScript нужно будет немного переделать , так как Делфи не поддерживает динамические массивы

Вот здесь можно посмотреть набор строк конекта
  • 0

#14 w1zl3

w1zl3

    Новый участник

  • Members
  • Pip
  • 33 сообщений
  • ФИО:Иванюшин Павел Владимирович
  • Город:Украина, г. Харьков

Отправлено 14 ноября 2008 - 16:29

1. Парсинг строки.

Данный код любезно предоставлен Genka, надеюсь он не против его опубликования. Алгоритм достаточно понятен и прозрачен. Естественно, кто пользуется JScript, могут просто применять соответствующие функции.

DelphiScript

//Преобразовать строку по разделителю в массив
Function Split(Str:string; separator:string);
var iElements, i : integer;
var arr : Variant;
begin
  //считаем количество элементов в строке, разделенных указанным разделителем
  iElements := BuiltIn.GetListCount(Str, separator);
  //создаем массив нужного размера
  arr := BuiltIn.CreateVariantArray(0, iElements-1);
  //последовательно считываем элемент строки и записываем его в массив
  for i := 0 to iElements-1 do
  begin
	arr[i] := BuiltIn.GetListItem(Str, i, separator); 
  end;
  //возвращаем массив строк
  Result := arr;
end;

Теперь остается написать процедурку чтения этих строк из файла


помоему так попроще будет...
function SplitString(String str, String separator)
{
  var temp = new Array();
  temp = str.split(separator);
  return temp;				 
}

  • 0

#15 Dmitry N

Dmitry N

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 742 сообщений
  • ФИО:Николаев Дмитрий
  • Город:Где-то в России

Отправлено 14 ноября 2008 - 19:02

Здравствуйте.

А вот так ещё проще ;)
var temp = str.split(separator);

JScript и VBScript имеют встроенные функции 'split'. А вот для DelphiScript эта задачка посложнее.
  • 1
С уважением,
Дмитрий

#16 Genka

Genka

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 328 сообщений
  • ФИО:Геннадий Алпаев
  • Город:Украина, Днепр


Отправлено 17 ноября 2008 - 07:59

А? Топик еще не умер? Ну тогда нате

Замена подстроки в строке (JScript)
Дисклаймер:
а) я знаю, что есть регулярные выражения, но я их не люблю
б) я знаю, что начиная с версии 6.5 есть объект aqString с методом Replace, но функция писалась для ТС 4.х

function StrTran(sString, sSearch, sReplace)
{
  return sString.split(sSearch).join(sReplace);
}

Функция заменяет в строке sString все вхождения подстроки sSearch на sReplace
  • 0

TestComplete для начинающих (видеозаписи курса)

Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)

Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest


#17 DrBlast

DrBlast

    Активный участник

  • Members
  • PipPip
  • 139 сообщений
  • ФИО:Евгений
  • Город:Москва

Отправлено 01 декабря 2008 - 22:58

Для .Net проектов, использующих нестандартный DataGridView.
Бывает разработчики апдейтят стандартный dvg под свои нужды. Из-за этого стандартно кликнуть по нужной ячейке не получается. Поэтому разработана следующая функция:
1. Сначала вычисляем индекс колонки по ее Header.
2. Снимаем выделение со строки "по-умолчанию"
3. Ставим выделение на нужную строку и если нужно подвигаем скроллбар до нужной строки.
4. Вычисляем размер строки стандартным .net методом GetRowDisplayRectangle
5. По размерам прямоугольника получаем нужные координаты, куда нужно кликнуть.
function SelectRow(Grid,SearchText)
{
  var count, Col, j, Rectangle;
  count = Grid.get_RowCount();
 
  Col = GetColIndexById(Grid, "Штрих-код");
  for (j = 0; j < Grid.get_RowCount; j++)
  {
	if (SearchText == GetCellText (Grid, j, Col))
	{
	  Grid.CurrentRow.Selected = false;
	  Grid.Rows.Item(j).Selected = true;
	  Grid.FirstDisplayedScrollingRowIndex = j;
	  Rectangle = Grid.GetRowDisplayRectangle(j, true);
	  Grid.DblClick((Rectangle.Left + Rectangle.Width / 2), (Rectangle.Top +  Rectangle.Height / 2));
	}
  }
}

function GetCellText (Grid, RowIndex, ColumnId)
{
  // Get the column index
  var ColIndex = GetColIndexById (Grid, ColumnId);
  // Get the cell value
  Log.Message('ColIndex = '+ ColIndex +' RowIndex = '+ RowIndex);
  return Grid.Item(ColIndex, RowIndex).FormattedValue.ToString().OleValue;
}
function GetColIndexById (Grid, ColumnId)
{
  // Check if the column is specified by caption or index
  if (VarType(ColumnId) == varOleStr)
  {
	// Search for the column by its caption
	for (i=0; i<Grid.ColumnCount; i++)
	  if (Grid.Columns.Item(i).HeaderText.OleValue == ColumnId)
		return i; // Column is found

	return -1; // Column is not found
  }
  else
	// The column is specified by index; return this index
	return ColumnId;
}

ЗЫ на днях, если интересует, могу выложить функцию для активации редактирования стандартного dgv. Пример - первая строка dgv помечается в приложении, с помощью "*", при этом ее header без индексов также не распознается и надо использовать пару .net методов для активации редактирования нужного контрола.
  • 0
Если ничего не помогает, прочтите наконец инструкцию!

#18 Genka

Genka

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 328 сообщений
  • ФИО:Геннадий Алпаев
  • Город:Украина, Днепр


Отправлено 02 декабря 2008 - 08:35

ЗЫ на днях, если интересует, могу выложить функцию для активации редактирования стандартного dgv. Пример - первая строка dgv помечается в приложении, с помощью "*", при этом ее header без индексов также не распознается и надо использовать пару .net методов для активации редактирования нужного контрола.


давай, давай, выкладывай :) даже если сейчас никому не интересно - может потом кому пригодится
  • 0

TestComplete для начинающих (видеозаписи курса)

Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)

Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest


#19 DrBlast

DrBlast

    Активный участник

  • Members
  • PipPip
  • 139 сообщений
  • ФИО:Евгений
  • Город:Москва

Отправлено 02 декабря 2008 - 09:50

Итак, обещанная функция:

function SetCellValue (Grid, ColumnId, Value)
{
  // Get the column index
  var ColIndex = GetColIndexById (Grid, ColumnId);  
  // Assign the new value to the cell
  if (ColIndex != -1)
  {
		Grid.set_CurrentCell(Grid.Item(ColIndex, get_RowCount - 1));  //Говорим системе с какой ячейкой работаем
		Grid.BeginEdit(true);								   //Начинаем редактирование ячейки.
		Grid.Keys(Value);
  }
  else Log.Message('Column not found');	 
}
В ColumnId необходимо передавать имя или индекс столбца.
RowIndex = Grid.get_RowCount - 1
в таких гридах всегда берем индекс последней строки (пример грида хотел выложить в аттаче, но не получилось...)
BeginEdit стандартный .net метод, параметр true означает, что значение в ячейке будет выделено.
Как только вызывается метод BeginEdit в гриде происходит добавление строки и к остальным столбцам в гриде можно обращаться стандартным образом. Например, Grid.ClickCell(RowIndex, ColumnHeader);

Функция GetColIndexById была в предыдущем сообщении
  • 0
Если ничего не помогает, прочтите наконец инструкцию!

#20 galogen

galogen

    Новый участник

  • Members
  • Pip
  • 4 сообщений
  • ФИО:Эдуард Галиаскаров

Отправлено 06 декабря 2008 - 15:50

Вот сподобился зайти и проиндексировать сделанное другими авторами, но не тут-то было. Моя же тема мне же для редактирования и не доступна. Остается ждать разрешений или обойдемся без индексирования?

Насчет вариаций на тему split. Код, предложенный в начале, ориентирован строго на DelphiScript. Там даже пометочка есть, что тот, кто пишет на JavaScript, спокойно используют УЖЕ ИМЕЮЩУЮСЯ функцию в анналах самого языка!!!
  • 0


Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных