Полезные процедуры и функции
#1
Отправлено 12 августа 2008 - 08:37
1. Парсинг строки
2. Автоматическое переименование регионов.
3. Получение тестовых данных из Excel или базы данных
4. Вариация на тему парсинг строки
5. Замена подстроки в строке
6. Работа с нестрандартным DataGridView в .NET проектах
7. Функция для активации редактирования стандартного DataGridView (dgv) в .NET проектах
8. Создание, заполнение и редактирование файла xls
9. Функция получения GUID, JS
10. Работа с контекстным меню, элементы которого подгружаются динамически. Для .Net проектов
#2
Отправлено 12 августа 2008 - 09:00
TestComplete для начинающих (видеозаписи курса)
Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)
Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest
#3
Отправлено 12 августа 2008 - 09:23
TestComplete для начинающих (видеозаписи курса)
Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)
Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest
#4
Отправлено 12 августа 2008 - 11:40
Эдуард, используйте, пожалуйста, для примеров кода соответствующее оформление (на панели инструментов самая правая кнопочка со всплывающей подсказкой "Код"). А то нечитабельно
Was done
#5
Отправлено 12 августа 2008 - 15:58
Попросил Case'a закрепить эту тему. Давно надо было такую создать, ага
Done!
Редактор портала www.it4business.ru
#6
Отправлено 13 августа 2008 - 06:25
Данный код любезно предоставлен 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;
Теперь остается написать процедурку чтения этих строк из файла
#7
Отправлено 19 августа 2008 - 14:15
#8
Отправлено 19 августа 2008 - 14:41
Неплохо было бы в первом посте сделать некое содержание и проиндексировать последующие полезные функции :)
+1
galogenIt, это на твоей совести теперь :)
TestComplete для начинающих (видеозаписи курса)
Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)
Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest
#9
Отправлено 22 августа 2008 - 16:45
Возникает такая потребнобность перенести ранее созданные регионы в новый проект, или регионы сделаны независимым способом, или существуют другие причины, по которым регионы создавались вне текущего проекта.
Простое копирование регионов в папку текущего проекта автоматом не включает добавленные регионы в список доступных и включать их приходится через 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]), "")); } }
#10
Отправлено 22 августа 2008 - 16:49
Ну совесть у меня резиновая, сделал я, но пока и нет вкладов :)galogenIt, это на твоей совести теперь :)
#11
Отправлено 13 октября 2008 - 11:56
Если вы не против, я вставлю свои пять копеек.
Для хранения набора тестовых данных очень часто использется 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. Для тех кто хранение тестовых даных доверяют базе данных есть вот такая функция
#12
Отправлено 13 октября 2008 - 11:56
Если вы не против, я вставлю свои пять копеек.
Для хранения набора тестовых данных очень часто использется 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. Для тех кто хранение тестовых даных доверяют базе данных есть вот такая функция
#13
Отправлено 13 октября 2008 - 12:01
Если вы не против, я вставлю свои пять копеек.
Для хранения набора тестовых данных очень часто использется 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 нужно будет немного переделать , так как Делфи не поддерживает динамические массивы
Вот здесь можно посмотреть набор строк конекта
#14
Отправлено 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; }
#15
Отправлено 14 ноября 2008 - 19:02
А вот так ещё проще ;)
var temp = str.split(separator);
JScript и VBScript имеют встроенные функции 'split'. А вот для DelphiScript эта задачка посложнее.
Дмитрий
#16
Отправлено 17 ноября 2008 - 07:59
Замена подстроки в строке (JScript)
Дисклаймер:
а) я знаю, что есть регулярные выражения, но я их не люблю
б) я знаю, что начиная с версии 6.5 есть объект aqString с методом Replace, но функция писалась для ТС 4.х
function StrTran(sString, sSearch, sReplace) { return sString.split(sSearch).join(sReplace); }
Функция заменяет в строке sString все вхождения подстроки sSearch на sReplace
TestComplete для начинающих (видеозаписи курса)
Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)
Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest
#17
Отправлено 01 декабря 2008 - 22:58
Бывает разработчики апдейтят стандартный 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 методов для активации редактирования нужного контрола.
#18
Отправлено 02 декабря 2008 - 08:35
ЗЫ на днях, если интересует, могу выложить функцию для активации редактирования стандартного dgv. Пример - первая строка dgv помечается в приложении, с помощью "*", при этом ее header без индексов также не распознается и надо использовать пару .net методов для активации редактирования нужного контрола.
давай, давай, выкладывай :) даже если сейчас никому не интересно - может потом кому пригодится
TestComplete для начинающих (видеозаписи курса)
Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)
Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest
#19
Отправлено 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 была в предыдущем сообщении
#20
Отправлено 06 декабря 2008 - 15:50
Насчет вариаций на тему split. Код, предложенный в начале, ориентирован строго на DelphiScript. Там даже пометочка есть, что тот, кто пишет на JavaScript, спокойно используют УЖЕ ИМЕЮЩУЮСЯ функцию в анналах самого языка!!!
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных