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

Практикум по тест-дизайну 2.0
онлайн, начало 29 ноября
Тестирование мобильных приложений
онлайн, начало 27 ноября
Автоматизатор мобильных приложений
онлайн, начало 27 ноября
Программирование на Python для тестировщиков
онлайн, начало 22 ноября
Фотография

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


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 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 327 сообщений
  • ФИО:Геннадий Алпаев
  • Город:Украина, Днепр


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

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

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

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


#3 Genka

Genka

    Гуру

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


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

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

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 327 сообщений
  • ФИО:Геннадий Алпаев
  • Город:Украина, Днепр


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

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


+1

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

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 327 сообщений
  • ФИО:Геннадий Алпаев
  • Город:Украина, Днепр


Отправлено 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

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 327 сообщений
  • ФИО:Геннадий Алпаев
  • Город:Украина, Днепр


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

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


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

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


Организация автоматизированного тестирования
онлайн
Автоматизация функционального тестирования
онлайн
Selenium WebDriver: полное руководство
онлайн
Школа Тест-Аналитика
онлайн



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

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

Яндекс.Метрика
Реклама на портале