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

Публикации Rumata

65 публикаций создано Rumata (учитываются публикации только с 18 июня 2023)



#48829 Работа с Уникодами

Отправлено автор: Rumata 12 ноября 2007 - 10:37 в SmartBear (AutomatedQA) - Functional Testing

Delphiscript
TC 5.12
Здравствуйте!
Возникла необходимость в тестовых случаях вводить буквы казахского шрифта, в системе он предустановлен.
В TC буквы алфавита вводятся нормально, но после сохранения от букв остаются одни вопросики :(
Тогда я сохранил набор символов в файле(.txt, кодировка UTF-8) и подтягиваю во время выполнения скрипта данные из него в переменную, но в лог опять же выводиться совсем не то да и в тестируемое приложение неизвестно что попадёт.
Подскажите пожайлуста как можно обойти эту проблему.



#49105 Работа с Уникодами

Отправлено автор: Rumata 19 ноября 2007 - 05:09 в SmartBear (AutomatedQA) - Functional Testing

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

А компьютер перегрузили? Это опция ('Language for non Unicode programs') действует только после перезагрузки компьютера.


Ну конечно! не настолько я же безнадёжен :-)



#48860 Работа с Уникодами

Отправлено автор: Rumata 13 ноября 2007 - 04:31 в SmartBear (AutomatedQA) - Functional Testing

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

Вы можете задать для проекта формат хранения скриптов UFT-16. Двойным щелчком по проекту в панели Project Explorer открываете редактор проекта, переходите на закладку Properties и меняете значение свойства 'Character Encoding' в группе опций General.

Также читайте раздел справки 'Support for Unicode'. В нём описано как TestComplete может работать с Unicode.


Спасибо теперь после пересохранения символы остаются, но в helpe ссылки на форум а тама я чего то запутался, поэтому ничего так и выяснил :(



#52625 Текстовый файл

Отправлено автор: Rumata 08 февраля 2008 - 06:47 в SmartBear (AutomatedQA) - Functional Testing

можно записать все строки в массив(я делала так) и потом из массива вытаскивала по штуке.
PS (тоже встречалась с такой фигней что не освобождался файл и потом приходилось перегружать ТС - как избавиться на 100 % так не поняла)


классная идея спасибо!!!
счас вот реализую

Сначала перекидываю весь файл в двумерный массив а потом с ним работаю.

Если не я один с этим столкнулся выложу исходники может кому поможет



#52631 Текстовый файл

Отправлено автор: Rumata 08 февраля 2008 - 09:11 в SmartBear (AutomatedQA) - Functional Testing

ошибочка:
не
s := readln(f) ---> s := massiv[q+1];
а
readln(f,s) ---> s := massiv[q];
q:= q+1;


вот примерно так



#52773 Текстовый файл

Отправлено автор: Rumata 12 февраля 2008 - 05:15 в SmartBear (AutomatedQA) - Functional Testing

С массивом всё работает как швейцарские часы! :dirol:

+ то что можно получить доступ к любой строке файла быстро и без проблем
большой + то что(ведь в TC нельзя открыть одновременно больше одного файла одновременно, по крайней мере в версии 5.12.454), можно одновременно обрабатывать кучу файлов на приличной скорости



#52643 Текстовый файл

Отправлено автор: Rumata 08 февраля 2008 - 11:27 в SmartBear (AutomatedQA) - Functional Testing

при работе с массивами очень полезные функции - BuiltIn.VarArrayRedim() и VarArrayHighBound(). Когда точно не известно заранее сколько будет элементов в массиве без них не обойтись


А можно поподробнее насчёт этих функций?


кстати, почему не работает

for ks_i := 1 to ks do
readln(fff,m_file[ks_i]);


приходиться в массив писать через дополнительную строковую переменную
for ks_i := 1 to ks do
begin
readln(fff,qwer);
m_file[ks_i] := qwer;
end;



#52629 Текстовый файл

Отправлено автор: Rumata 08 февраля 2008 - 08:50 в SmartBear (AutomatedQA) - Functional Testing

можно записать все строки в массив(я делала так) и потом из массива вытаскивала по штуке.
PS (тоже встречалась с такой фигней что не освобождался файл и потом приходилось перегружать ТС - как избавиться на 100 % так не поняла)


классная идея спасибо!!!
счас вот реализую

Сначала перекидываю весь файл в двумерный массив а потом с ним работаю.

Если не я один с этим столкнулся выложу исходники может кому поможет


вот процедура которя пишет в массив
procedure From_file_in_file(file_ : elevariant);
var
fff; // файловая переменная
ks : integer; // количество строк в файле
ks_i : integer; // счётчик
str_f;
begin
if debug then
log.message('DEBUG: Начало процедуры перенесения файла в массив');
if not(fileexists(file_)) then
begin
Fatal_Error('Невозможно найти файл сценария: ',file_);
end;
AssignFile( fff, file_ );
Reset(fff);
// нужно определить размерность массивa
if debug then
log.message('DEBUG: Определяю размерность массива');
ks := 0;
while not(eof(fff)) do
begin
readln(fff,str_f);
ks := ks + 1;
end;
closefile(fff);
Reset(fff);
// создаю массив необходимой размерности
m_file := BuiltIn.CreateVariantArray(1, ks);
//заполняю массив
for ks_i := 1 to ks do
readln(fff,m_file[ks_i]);
closefile(fff);
if debug then
log.message('DEBUG: размерность массива: '+ inttostr(ks));
end;


в коде нужно сделать определ глоб переменную непример q
a потом заменить или делать по аналогии

reset(f) ---> q:=1
s := read(f) ---> s := massiv[q];
s := readln(f) ---> s := massiv[q+1];

вообщем всё просто и сердито :)



#52622 Текстовый файл

Отправлено автор: Rumata 08 февраля 2008 - 03:01 в SmartBear (AutomatedQA) - Functional Testing

Delphi script

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

Столкнулся с такой проблемой: ассоциирую переменную с файлом
AssignFile( f, file_association );
Reset(f);


потом в скрипте у меня выполняются какие то действия по сценарию этого файла
но заморочка в том что у меня может в любой момент чтото отвалиться и файл не закрывается(использую CloseFile( f ); ), а нужно его отредактировать в реальном времени что нельзя сделать так как он заблокирован, приходиться перегружать TC

пробовал try-except, вызовы в критических кусках кода закрытия файла, но не получается отследитьвсе вариаты: либо возникает повторная ошибка закрытия либо файл блокируется

Подскажите как можно закрыть файл в людом случае при любых обстоятельствах.
А возможно ли запихать всё содержимое файла в переменную и работать с ней так же как и с файлом?



#53004 Создание автотеста софта, до того как этот софт появился

Отправлено автор: Rumata 19 февраля 2008 - 11:39 в SmartBear (AutomatedQA) - Functional Testing

Привет Всем!

Есть ли у кого интересные идеи по этому вопросу?

Почему возникла идея написать...

Предложили мне такую штуку сделать, я сначала сказал что это в принципе не реально :)
Потом подумал и возникла идейка как это можно сделать.
идея вот в чём:
по СТПО(спецификация требований к программ обеспечен) пишется методика испытаний(ПиМИ)
Теперь составляю "файл ассоциации" эта такой файл где пишутся имена(собственно придуманные и удобные для звучания :)) предполагаемых кнопок, меток полей и др.
Потом по ПиМИ я составляю ещё один файл "файл сценария", и в нём пишу сценарий тестирования по ПиМИ.
Этот сценарий состоит из этих самых "имён" и пара десятка зарез. слов
И весь смысл того что в идеале когда придёт софт я только должен буду воткнуть в файле ассоциации напротив каждого придуманного имени, полное имя настоящего объетка на интерфейсе. и будет всё работать.
Данная система у меня более менее работает
НО
я на неё угрохал кучу времени
она на самом деле не такая уж замечательная как казалась вначале
:(
Вообщем я почти полностью разуверился в этой "Идее" и работаю с ней только потому что жаль потраченного времени и в этих скриптах неплохой набор процедур...
в принципе система неплохая, но она не окупает главного - того что автоматизация должна занимать меньше времени чем мануальное тестирование...

вот...

Если есть мысли по данному вопросу и по тому как я попытался это решить, скажите.



#53033 Создание автотеста софта, до того как этот софт появился

Отправлено автор: Rumata 20 февраля 2008 - 03:39 в SmartBear (AutomatedQA) - Functional Testing

http://www.simplytes...rs/Articles.htm


эт конечно всё интересно, но я с английским не особо дружу чтоб литературу на нём читать :)



#47430 Как определить был ли создан файл

Отправлено автор: Rumata 08 октября 2007 - 10:12 в SmartBear (AutomatedQA) - Functional Testing

delphiscript

Тут опять вопрос появился, может кто что подобное делал?

У меня тестируемое приложение при моих определенных действиях создает в нужной директории файл формата ХХХХХХХХХ_20071008152634.xls

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

Есть у кого нить идеи?
если можно то с исходником



#47491 Как определить был ли создан файл

Отправлено автор: Rumata 09 октября 2007 - 10:15 в SmartBear (AutomatedQA) - Functional Testing

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



Вот, примерчик сделал.

function getNewFiles(path, oldFileList);
var
  i : Integer;
  SearchRec : TSearchRec;
  newFileList;
begin
  SearchRec := TSearchRec;
  i := FindFirst(path, faAnyFile, SearchRec);
  
  newFileList := '';
  while i = 0 do
  begin
	  if Pos(Utilities.LowerCase(SearchRec.Name), Utilities.LowerCase(oldFileList)) = 0 then
	  begin
		  newFileList := newFileList + SearchRec.Name + #13#10;
	  end;
	  i := FindNext(SearchRec);
	end;
  Utilities.FindClose(SearchRec);
  
  Result := Utilities.Trim(newFileList);
end;

procedure Main;
var
  path, fileList, newFileList; 
begin
  path := 'C:\Folder\*.xls';
  fileList := getNewFiles(path, '');
  Log.Message(path, fileList);

  //.. Создать файл
  
  newFileList := getNewFiles(path, fileList);
  Log.Message(path, newFileList);
end;



ОГРОМНОЕ СПАСИБО!!!
Всё получилось!



#47462 Как определить был ли создан файл

Отправлено автор: Rumata 09 октября 2007 - 05:11 в SmartBear (AutomatedQA) - Functional Testing

есть идеи, исходника нету :)

варианты:
1) перед запуском программы удалять из папки все XLS файлы, а в нужный момент проверять, что файл с таким расширением появился

2) я так предполагаю, что это какой-то репорт, который генерится при определенных условиях (например, при нажатии на кнопку в приложении). В момент, когда наступают эти условия, можно запомнить время с точностью до минуты и потом проверить, что файл XXXX_YYYYMMDDHHNN**.xls существует. Тут есть один недостаток: допустим, вы запомнили время в момент 11:59:59 и нажали соответствующую кнопку в приложении. Естественно, что файл не будет иметь имя XXX_20071008115959, а будет типа XXX_20071008120030. Еще хуже, если скрипт запомнит время ночью, скажем в 23-59-59/ Там изменится не только время, но и дата

3) ваш вариант с простой проверкой количества файлов не очень удачный, так как в этой папке могут создаваться/удаляться и другие файлы, что повлияет на результат непредсказуемо. То же самое касается проверки даты модификации директории. Если уж и проверять количество, то только файлов формата XXX_YYYY*****.xls

Сам я, когда решал подобную задачу (правда, с помощью СилкТеста, но это не важно), использовал вариант 1+2, т.е. сначала удалял все подобные файлы, потом дожидался, пока текущее время будет HH:NN:01, запоминал эти HH:NN и генерировал репорт, а потом проверял наличие файла XXX_YYYYDDMMHHNN**.xls. У такого варианта есть только один способ свалиться: если запоминаемое время прийдется как раз на 23:59 и файл будет генерироваться больше минуты, что обычно не наблюдается и вообще маловероятно =)


да тоже были похожие мысли
В этой директории файлы никакие другие файлы больше не создаются поэтому ошибок не возникнет
Поэтому самый оптимальный вариант пересчитывать каждый раз количество файлов в директории и по изменившемуся количеству определить создался файл али нет.
Мне в принципе не важно контролировать параметры файла кроме расширения. нужно зафиксировать только то что файл с расширением ".xls" добавился в данную директорию

Только я не знаю как это сделать а время поджимает



#47492 Как определить был ли создан файл

Отправлено автор: Rumata 09 октября 2007 - 10:22 в SmartBear (AutomatedQA) - Functional Testing

Рекомендую почитать вот это надеюсь поможет тут находиться очень хорошее руководство!!!


Спасибо!



#57830 Почему код работает ТАК ?

Отправлено автор: Rumata 27 июня 2008 - 04:54 в SmartBear (AutomatedQA) - Functional Testing

Привет!

А если на потоке ввода взвести свойство AutoFlush? Поток наверняка буферизованый и то что вы в него пишете, скорее всего, какое-то время лежит в буфере.
Например:
Код output.BaseStream.SetLength(100000);

input.AutoFlush := true;

Или вручную дергать метод Flush, после каждой записи в поток.

Возможно, буфер влияет и на поток вывода. Он переполянется и все. Что если у базового потока увеличить длину.
Вот так:
output.BaseStream.SetLength(100000);


не получается

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

Я не совсем понял, а CMD.exe в конце закрывается или нет? Если нет, по попробуйте закрывать его (только корректно) перед попыткой чтения выходного потока.

По поводу необходимости нажатия Enter -- это, наверно, приложение не так отрабатывает нажатия, как CMD. Попробуйте использовать метод Write_10(MyCommand + #13).


смд закрываеться , там ведь есть команда quid
Write_10(MyCommand + #13) не работает

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

теперь вот пытаюсь стабилизировать всё что делал...



#57711 Почему код работает ТАК ?

Отправлено автор: Rumata 25 июня 2008 - 09:24 в SmartBear (AutomatedQA) - Functional Testing

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

А можно узнать, что такое 'read_name_install_file' и 'PosEnd'?


процедуры

read_name_install_file - возвращает полное имя файла который я запускаю в цмд

PosEnd -
последнее вхождение символа в строку


вот я переделал немного, правда теперь приходиться ентер жать после каждого ввода команды :friends:
procedure Main;
  var 
  dir,f : string;
  k : integer;
  p, input, output,cmd;
  st : boolean;
  s : string;
  ss : widestring;
  begin 
  opred_form_log;
  file_mame_rez_log := 'Install_server_rezult_log.mht';
  ResultDir := 'C:\NAT_EAR_COPY_RESULTS\';
  ArchiveDir := 'C:\artifakts\';   
  p := dotNET.System_Diagnostics.Process.zctor();
  p.StartInfo.FileName := 'c:\Windows\System32\cmd.exe';
  p.StartInfo.UseShellExecute := false;
  p.StartInfo.RedirectStandardOutput := True;
  p.StartInfo.RedirectStandardInput := True;
  p.Start;
  f := read_name_install_file;
  k := PosEnd('\',f);
  dir := copy(f,1,k-1);  // директория запускаемого батника
  f := copy(f,k+1,length(f)-k); // здесь имя батника который запускаю 
  input := p.StandardInput;
  output := p.StandardOutput;
  cmd := Sys.Process('cmd',2).Window('ConsoleWindowClass', '*'); // вторая запущеная цмд
  input.WriteLine_11('cd '+dir); // переход в директорию батника
  input.WriteLine_11(f); // запуск батника
  // теперь идут запросы батника
  input.WriteLine_11('C:\j2sdk1.4.2_12'); // ввод корня  jsd
  cmd.Keys('[Enter]');					  // эмуляция долбанного ентера
  input.WriteLine_11('C:\Sop\jboss-portal-2.6.1.GA');   // ввод корня  jboss-portal-
  cmd.Keys('[Enter]');				// эмуляция долбанного ентера
  input.WriteLine_11('update');	   // выбор сбособа установки
  cmd.Keys('[Enter]');				// эмуляция долбанного ентера
  input.WriteLine_11('127.0.0.1');	// айпи сервера
  cmd.Keys('[Enter]');				// эмуляция долбанного ентера
  input.WriteLine_11('quit');		 //выход
  st := false;
  Log.Message('3');
  while not p.HasExited do // если еще цмд открыто
	Delay(500);
  ss := '';
  Log.Message('4');
  while not output.EndOfStream do
	begin
	if not(st) then
	  if (pos('INFO  [Server] JBoss ',s)<> 0) and (pos('Started in',s)<> 0) then
		st := true;
	s := output.ReadLine();
	ss := ss+#13+s;	
	end;
  Log.Message('Лог запуска сервера', ss, pmNormal, debug_attr );   
  if st then
	Log.Message('Сервер запущен!', '', pmNormal, debug_attr )  
  else
	Log.Message('Сервер не был запущен!', '', pmNormal, error_attr ); 
  ExportResults(ResultDir + file_mame_rez_log);
  add_results_archive(file_mame_rez_log);
  if st then  
	SendEmail(e-mail, e-mail, 'Логи автоинсталлирования сервера', 'На север была успешно произведена установка обновления'+#13+'Логи во вложении', ArchiveName+'.rar')
  else
	SendEmail(e-mail, e-mail, 'Логи автоинсталлирования сервера', 'Установка обновления на север была не удалась'+#13+'Логи во вложении', ArchiveName+'.rar');
  end;



#57804 Почему код работает ТАК ?

Отправлено автор: Rumata 26 июня 2008 - 11:27 в SmartBear (AutomatedQA) - Functional Testing

вот весь уже скока мучусь, как то криво получается :(((

может кто знает, извлечь данные из цмд?

причем просто перенаправлять не получиться так как я запускаю батник(а он jar-ник) а потом уже общаюсь с ним.

сей час немного прогу переделал, добавил Delay(1000); после каждого writeline, так команды стали выполняться(интересно с какого?) но в выходной поток не все данные пишутся выводит пары десятков строчек лога и всё :(

в чём причина хз

подскажите пожалуста возможные решения



#57687 Почему код работает ТАК ?

Отправлено автор: Rumata 25 июня 2008 - 05:37 в SmartBear (AutomatedQA) - Functional Testing

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

Сейчас делал импорт данных из смд, но столкнулся с проблеммой их вводить :)
так вот данные вводяться прекрасно, пока я незапускаю батник из смд, после данные вводяться как одна строка, но если ввести [Enter], то потом данные опять вводяться в поток нормально, объясните почему такое бывает.

вот процедурина
procedure Main;
   var 
   dir,f : string;
   k : integer;
   p, input, output,cmd;
   begin	
   p := dotNET.System_Diagnostics.Process.zctor();
   p.StartInfo.FileName := 'c:\Windows\System32\cmd.exe';
   p.StartInfo.UseShellExecute := false;
   p.StartInfo.RedirectStandardOutput := True;
   p.StartInfo.RedirectStandardInput := True;
   p.Start;
   f := read_name_install_file;
   k := PosEnd(f);
   dir := copy(f,1,k-1);
   f := copy(f,k+1,length(f)-k);  
   input := p.StandardInput;
   output := p.StandardOutput;
   cmd := Sys.Process('cmd',2).Window('ConsoleWindowClass', '*');
   //cmd.Keys('[Enter]');
   input.WriteLine_11('cd '+dir);
   input.WriteLine_11(f);
   input.WriteLine_11('C:\j2sdk1.4.2_12');
   cmd.Keys('[Enter]'); //без этой строки все команды, начиная с предыдущей, 
		 //объединяються в одну и вводятся как одна
   input.WriteLine_11('C:\Sop\jboss-portal-2.6.1.GA');
   input.WriteLine_11('update');
   input.WriteLine_11('127.0.0.1');
   input.WriteLine_11('quit');
 
   while not p.HasExited do 
	 Delay(1000);
   while not output.EndOfStream do
	 Log.Message(output.ReadLine());
   //dotNET.System_Diagnostics.Process.zctor.
   end;



#52851 WEB testing

Отправлено автор: Rumata 13 февраля 2008 - 10:43 в SmartBear (AutomatedQA) - Functional Testing

Вопрос № 2 :)

При записи тестов все пишеться отлично только вот идет адресация по ячейкам таблиц не веб страницах. страницы такие что места нужных елементов могут меняться. Как можно еще к ним обращаться?


У нас была такая же проблема

Метод Find (даже если бы и помогал) работает так долго что всё преимущество автоматизации убивается
Решения:

1) Писать автотест по строго определённому сценарию, тогда можно хоть как то определить ячейки
2) самый действенный, Просить программистов чтобы они фиксировали имена объектов



#48591 по строковому имени процесса сделать действие

Отправлено автор: Rumata 07 ноября 2007 - 02:53 в SmartBear (AutomatedQA) - Functional Testing

ОГРОМНОЕ СПАСИБО!!!
РАБОТАЕТ!!!
правда нужно изменить на

Evaluate (arr[i] + '.Click;')


да, в ДелфиСкрипте я не силен, однако. Ну, работает - и отлично


Нет, вы правильно написали, по идее у события "клик" есть параметры, а если их не указывать то можно ставить пустые скобки, но видимо сама функция "Evaluate" чего то там преобразовывает и поэтому потом ругается на эти самые скобки



#48532 по строковому имени процесса сделать действие

Отправлено автор: Rumata 06 ноября 2007 - 11:15 в SmartBear (AutomatedQA) - Functional Testing

delphiscript
tc 5.12


Привет Всем
Проблема вот в чём:

Есть файл 123.txt
в нём написаны имена процессов:
Sys.Process('calc').Window('SciCalc', 'Калькулятор').Window('Button', 'CE')
Sys.Process('calc').Window('SciCalc', 'Калькулятор').Window('Button', '7')
Sys.Process('calc').Window('SciCalc', 'Калькулятор').Window('Button', '8')
Sys.Process('calc').Window('SciCalc', 'Калькулятор').Window('Button', '9')
и так далее
теперь в скрипте я считываю имена процессов в массив(olevariant)

mass_obj := BuiltIn.CreateVariantArray(1, kk); // присваиваю массиву длину
while not eof(f) do
begin
kk := kk + 1;
readln( f, s);
mass_obj[kk] := s;
end;

потом в другой процедуре пытаюсь кликнуть
l_mass_obj := BuiltIn.CreateVariantArray(1, dl_mass); // присваиваю массиву длину
l_mass_obj := mass_obj;
tpm := l_mass_obj[l_i];
tpm.click();

tc ругается на неизвестное имя click
подскажите пжл как можно сделать то что я хочу



#48537 по строковому имени процесса сделать действие

Отправлено автор: Rumata 06 ноября 2007 - 12:03 в SmartBear (AutomatedQA) - Functional Testing

delphiscript
tc 5.12
tc ругается на неизвестное имя click
подскажите пжл как можно сделать то что я хочу


т.е. вы пытаетесь из строк сделать объекты?
это, конечно, возможно, но не так, как вы пытаетесь сделать (через VariantArray)

если я правильно понял, задача звучит так: есть текстовый файл, в котором хранятся имена объектов, по которым надо кликать. Хранятся в текстовом виде.

Вам проще сделать так: считать содержимое файла в массив, а затем для каждого элемента массива делать так
допустим, массив строк называется arr

Evaluate (arr[i] + '.Click();')
не уверен, но по-моему знак "+" в делфискрипте означает конкатенацию строк.
Основной момент здесь - это использование функции Evaluate, которая позволяет выполнить любой кусок текста, как код скрипта



ОГРОМНОЕ СПАСИБО!!!
РАБОТАЕТ!!!
правда нужно изменить на
Evaluate (arr[i] + '.Click;')



#47432 Буфер обмена

Отправлено автор: Rumata 08 октября 2007 - 10:36 в SmartBear (AutomatedQA) - Functional Testing

вот как на delphiscript:


AssignFile( fff, 'c:\123.txt' );
try
Rewrite(fff);
Write(fff,Sys.Clipboard);
finally
CloseFile( fff );
end;



#47373 Буфер обмена

Отправлено автор: Rumata 05 октября 2007 - 10:04 в SmartBear (AutomatedQA) - Functional Testing

TC 5.12.454.7
Delphiscript

Привет всем!
Подскажите как можно записать в текстовый файл содержимое буфера.
Мне нужно переписать файл.