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

Публикации Rumata

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



#46366 Tc Не Видит Кнопку По Которой Надо Кликнуть

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

Здравствуйте все у меня такая вот ошибка, второй день над ней мучаюсь

Использую TectComplete 5.12.454.7
Тестируемая программа написана на java
язык скрипта Delphi

Суть программы такова, есть удалённые Unix сервера которые чего там делают
Программа же их администрирует

так вот
у меня еся на форме проги кнопка "Отчёты" по клику на ней вылазит маленькое окошко где размещены пять кнопок на различные отчеты.
ошибка вот в чем первые две кнопки сверху кликаются без проблем , третья же не хотит: в логе лезит ошибкаThe window is disabled. The action cannot be executed.

Так вот пробовал вчера первые две процедуры комментировать - не работало, теперь же работает клик по третьей кнопке если нет первых процедур
весь прикол в том что процедуры идентичны почти там просто разные имена кнопок
и по проверке кнопка как бы существует
if Sys.Process('javaw').SwingObject('JDialog', 'Окно отчетов ', -1).SwingObject('JRootPane', '', 0).SwingObject('null.layeredPane').SwingObject('null.contentPane').SwingObject('Box', '', 0).SwingObject('JButton', 'Отчет о перезагрузках прикладного сервера', 2).Exists then
begin
// кликаем по кнопке о выводе отчёта( 3-й с верху)
// кнопку он видит пробуем кликнуть
Log.Message('Кнопка экзистится пробуем кликануть по ней');
Sys.Process('javaw').SwingObject('JDialog', 'Окно отчетов ', -1).SwingObject('JRootPane', '', 0).SwingObject('null.layeredPane').SwingObject('null.contentPane').SwingObject('Box', '', 0).SwingObject('JButton', 'Отчет о перезагрузках прикладного сервера', 2).Click();
t := true;
end

исключение не возникает код рабочий.

и скажите ещё у testcomplita порой глюки лезят , это нормальный режим работы ? :)

пробовал ставить у окна свойсва enabled и focus в true всё равно не работает
refresh тоже не работает

скриншот прилагаю
и полный код скрипта
Помогите пожалуста, или есть у кого нить какие идеи по этому поводу

Прикрепленные файлы




#46392 Tc Не Видит Кнопку По Которой Надо Кликнуть

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

Пасиб Большое Refresh помог!!!
весь день экспериментировал со всякой лабудой, а так не догадался :)

А насчет ошибок: бывает при одном запуске скрипт отрабатывает а потом нет, еще было рабочие процедуры перестали работать, потом ради эксперимента убрал комментарии на других которые делали совершенно другие действия и всё заработало...



#46419 Работа С Командной Строкой

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

Использую TectComplete 5.12.454.7
Тестируемая программа написана на java
язык скрипта Delphi

Тут возникла необходимость получить данные которые выводяться в командню строку, кто нить знает как это сделать???
Я пытался сделать кодом Delphi который нашел в инете:


procedure com;
var ProcInfo: TProcessInformation;
StartupInfo: TStartupInfo;
SecAtrtrs: TSecurityAttributes;
hOut: THandle;
begin
with SecAtrtrs do
begin
nLength := SizeOf(TSecurityAttributes);
lpSecurityDescriptor := nil;
bInheritHandle := true; // ВОТ ОНО !!! Наша рукоятка будет НАСЛЕДУЕМОЙ
end;

// Создаем файл в который и будем переназначать StdOut
// Например, с такими настройками, вы можете их изменить под свои нужды
hOut := CreateFile('c:\MyStdOut.txt', GENERIC_WRITE, 0, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
if (hOut = INVALID_HANDLE_VALUE) then RaiseLastWin32Error;

GetStartupInfo(StartupInfo);
with StartupInfo do
begin
wShowWindow := SW_HIDE; // не показывать окно
dwFlags := dwFlags or STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
hStdOutput := hOutDup; // присваиваем рукоятку на свой файл
end;

// для примера будем запускать [c:\program files\Borland\Delphi5\Bin]grep.exe с ключом '?'
// Вызов CreateProcess с флагом bInheritHandles = TRUE !!!
Win32Check(CreateProcess(nil, 'ipconfig /all', nil, nil, TRUE, CREATE_NEW_CONSOLE, nil, nil, StartupInfo, ProcInfo));

// ждем пока наш процесс отработает
WaitForSingleObject(ProcInfo.hProcess, INFINITE);

Win32Check(CloseHandle(ProcInfo.hProcess));

//если вы больше ничего не хотите делать с файлом, в который перенаправили StdOut, то закроем его
Win32Check(CloseHandle(hOut));
end;


но testcomplet при компиляции даёт ошибку, хотя в редакторе ошибки не идентифицируются
Если кто делал что нить подобное напишите пожалуста



#46445 Работа С Командной Строкой

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

А не проще работать с файлом после вывода?

с помощью добавления к консоли ">имяф_файла" - вывод будет направлен в файл.
Хотя скорее всего я просто не до конца вник в текст


Не проще т.к. команды пишу unuix серверу а он их не поймёт



#46447 Работа С Командной Строкой

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

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



Можете использовать ClrBridge, чтобы сделать это через .NET. Вот так:

procedure Test;
var
  p, output;
begin
  p := dotNET.System_Diagnostics.Process.zctor();
  p.StartInfo.FileName := 'c:\Windows\System32\cmd.exe';
  p.StartInfo.Arguments := '/c ipconfig';
  p.StartInfo.UseShellExecute := False;
  p.StartInfo.RedirectStandardOutput := True;
  p.Start;
  
  while not p.HasExited do Delay(100);
  output := p.StandardOutput.ReadToEnd();
  Log.Message(output);
end;



Чтобы этот код заработал, надо добавить ассемблю System.dll в ваш проект TestComplete'а. Для этого дважды щёлкните на имени проекта в Project Explorer, откройте страницу Properties редактора проекта и в опциях 'CLR Bridge' нажмите 'Browse GAC...'.


Спасибо большое за ответ.
Но у меня правда чего не получается:
Поставил себе .NET Framework 3.0
Сделал переконфигурацию testcomplete
потом всё так как вы написали , но он ругается что не знает такого "System_Diagnostics" до этого ругался на "dotNET", я уже внёс в список всё dll какие только были, значиться у меня её нет? как можно её найти?
Подскажите пожалуста



#46448 Работа С Командной Строкой

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

я тут нашёл ещё...
так не пойдёт заменить ту строку??
p := dotNET.System.System_Diagnostics_Process.ctor();



#46449 Работа С Командной Строкой

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

Заменил в коде строку p := dotNET.System_Diagnostics.Process.zctor(); на p := dotNET.System.System_Diagnostics_Process.ctor();
и вроде всё заработало только вот я не пойму как организовать такое действие:
Я запускаю cmd через testcomplete и данные тоже ввожу только им а вот полученыы результат уже и выводить
мне надо не одну не две команды написать , нужно организовать целую серию запросов-ответов



#46450 Работа С Excel

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

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

Например указываешь диапазон в цикле и он тупо переносит значения из Excel в массив например



#46488 Работа С Excel

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

Вот на скорую руку сделал, может как-то так =)

Set ExcelApp = CreateObject("Excel.Application")        pathFile = "C:\..\.xls"        ExcelApp.Workbooks.Open(pathFile)        Set Ran = ExcelApp.Sheets(1).Range("F9:G12")        ReDim arr(Ran.Cells.Count)        For nRow = 1 To Ran.Rows.Count                Set Row = Ran.Rows(nRow)                For nCell = 1 To Row.Cells.Count                        arr((nRow - 1) * Row.Cells.Count + nCell - 1) = Row.Cells(nCell).value                Next        Next



я забыл сказать я на delphi

если возможно можно на этом языке

я пытался переделать приведённый код, вот что получилось

var
m : array of string;
ExcelApp, Ran : olevariant;
ExcelApp := CreateObject('Excel.Application');
pathFile := "C:\123.xls';
ExcelApp.Workbooks.Open(pathFile)
Ran := ExcelApp.Sheets(1).Range('F9 : G12');
setlength(m, Ran.Rows.Count) // присваиваю массиву длину
For nRow := 1 To Ran.Rows.Count do
begin
Row := Ran.Rows(nRow);
For nCell := 1 To Row.Cells.Count
m[nRow, nCell] := Row.Cells(nCell).value;
end;


но лезут ошибки массивы он чтоли не понимает на объявлении переменных??



#46588 Работа С Командной Строкой

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

Dmitry N, начал пытаться реализовать вашу процедуру, так у меня при компиляции ругается на input.WriteLine('ver'); пишет что происходит несовпадение типов, а там ведь и правда не получиться так сделать.
Кстати интересный факт теперь у меня ваша строка p := dotNET.System_Diagnostics.Process.zctor();, работает, а моя(которая ещё в пятницу отрабатывала) p := dotNET.System.System_Diagnostics_Process.ctor(); не хотит :)



#46589 Работа С Excel

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

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

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

MSE:= Sys.OleObject('Excel.Application');
   MSE.Workbooks.Open('C:\PurchaseOrder.xls');
   Log.Message(VarToString(MSE.Cells(i,j).value)); // i и j номер строки и столбца.


Где же ты раньше был? :)



#46591 Работа С Командной Строкой

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

Заменил WriteLine на WriteLine_11 нормально заработало, но возникла другая проблема: мне ведь надо работать с telnet , и если просто ручками вызываешь cmd а потом телнет то сеанс нормально работает но testcomplete видимо воспринимает телнет как другой процесс и не передаёт ему команды которые я пишу , пробовал заменять p.StartInfo.FileName := 'c:\Windows\System32\cmd.exe'; на p.StartInfo.FileName := 'c:\Windows\System32\telnet.exe'; но тогда вообще логи пустые, мелькнёт окошко и всё
Как можно это обойти? или телнету нельзя так же команты передавать и читать как cmd ?



#46618 Работа С Командной Строкой

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

Вспомнил я ведь правда убрал "TestComplete 3 Compatibility"
Вот код процедуры всё также

procedure com;
var
p, input, output;
begin
p := dotNET.System_Diagnostics.Process.zctor();
p.StartInfo.FileName := 'C:\WINDOWS\system32\telnet.exe';
p.StartInfo.UseShellExecute := False;
p.StartInfo.RedirectStandardOutput := True;
p.StartInfo.RedirectStandardInput := True;
p.Start;
input := p.StandardInput;
output := p.StandardOutput;
input.WriteLine_11('?');
while not p.HasExited do
Delay(100);
while not output.EndOfStream do
Log.Message(output.ReadLine());

end;


окошко мелькает и исчезает, хотя cmd хотя бы на экране остаётся, поучается что запуск идёт неправильно может дело в dll System_Diagnostics ведь у нёё название содержит смысл "Диагностика" что как то с telnet -ом не вяжется???
вообщем я завяз и думаю может написать на Delphi элементарнейший клиент и из него уже таскать данные???



#46651 сокрытие приложения

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

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



#46656 сокрытие приложения

Отправлено автор: Rumata 18 сентября 2007 - 08:54 в SmartBear (AutomatedQA) - Functional Testing

Да я чего то забыл :)
использую DelphiScript
Win XP
тестируемые приложения (точнее не тестируемые в них я делаю дополнительную обработку данных из за чего их желательно скрыть) :
telnet и notepad



#47254 Проверка на наличие процесса

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

Привет Всем!
помогите плиз вопрос возник

TestComplete 5.12.474.7
delphiscript
приложение на Java

У меня есть процесс:
Sys.Process('javaw').SwingObject('JDialog', 'Окно архивирования лог файла', -1).SwingObject('JRootPane', '', 0).SwingObject('null.layeredPane').SwingObject('null.contentPane').SwingObject('LogArchivePanel', '', 0).SwingObject('JPanel', '', 0).SwingObject('JScrollPane', '', 0).SwingObject('JViewport', '', 0).SwingObject('JList', '', 0).AWTObject('CellRendererPane', '', 0).SwingObject('DefaultListCellRenderer$UIResource', '20070918.log.gz', 0)


в конце имя лог файла 20070918.log.gz и оно меняется

мне нужно подставлять в цикле вместо этого имени значение строковой переменной и проверять наличие этого процесса
если его нет то я провожу действие в тестируемом приложении(перехожу на другую запись в списке) в результате которого меняется имя лог-файла в процесе(который реально существует) и опять проверяю наличие моего процесса ; если есть то делаю определённое действие

вопрос : как сделать проверить существование процесса в имени которого можно динамически менять параметр



#47268 Проверка на наличие процесса

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

чегото у меня не работает и зачем нужна 1000 в ('DefaultListCellRenderer$UIResource', logName, 0, 1000); ???
не может найти объект


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



Как я понимаю, вам надо проверить существование объекта в приложении, а не процесса. Сделать это можно с помощью метода WaitSwingObject.

logName := '20070918.log.gz';
  w1 := Sys.Process('javaw').SwingObject('JDialog', 'Окно архивирования лог файла', -1).SwingObject('JRootPane', '', 0).SwingObject('null.layeredPane').SwingObject('null.contentPane').SwingObject('LogArchivePanel', '', 0).SwingObject('JPanel', '', 0).SwingObject('JScrollPane', '', 0).SwingObject('JViewport', '', 0).SwingObject('JList', '', 0).AWTObject('CellRendererPane', '', 0);
  w2 := w1.WaitSwingObject('DefaultListCellRenderer$UIResource', logName, 0, 1000);
  if w2.Exists then
	Log.Message('Log file is found')
  else
	Log.Error('Log file is not found');




#47357 Проверка на наличие процесса

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

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



Прежде всего хочу заметить, что в TestComplete замечательная справочная система. Задокументировано практически все, и при этом очень доступно и с примерами. Это к вопросу о 1000 в вызове метода WaitSwingObject.



А по поводу невозможности найти объект, в скрипте упоминается 12 объектов -- возможно не находится какой-нибудь другой объект. Запостите сюда сообщение об ошибке вместе с содержимым панели Remarks.


Сейчас невозможно показать поиск потому же объекту что я приводил в начале, поэтому я покажу аналогичный пример.
Здесь он просто переходит по ветке ELSE и выводит в лог "нет"

fff : string;
xx, xxx : olevariant;


Sys.Process('TOTALCMD').Window('TTOTAL_CMD', 'Total Commander 6.03a - ISS GmbH Heidelberg', 1).refresh;
sleep(500);
xx := Sys.Process('TOTALCMD').Window('TTOTAL_CMD', 'Total Commander 6.03a - ISS GmbH Heidelberg', 1).Window('TMyPanel', '', 2);
fff := '[_нет_] 15 122 276 КБ из 61 440 560 КБ свободно';
xxx := xx.WaitSwingObject('TMyPanel', fff, 1, 1000);
if xxx.exists then
log.message('есть')
else
log.message('нет');



Параллельно проверял кодом

if Sys.Process('TOTALCMD').Window('TTOTAL_CMD', 'Total Commander 6.03a - ISS GmbH Heidelberg', 1).Window('TMyPanel', '', 2).Window('TMyPanel', '[_нет_] 15 122 276 КБ из 61 440 560 КБ свободно', 1).exists then
log.message('есть 1')
else
log.message('нет 1');

и процесс нормально обнаруживается



#47358 Проверка на наличие процесса

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

Я сам разобрался, нужно было использовать WaitWindow вместо WaitSwingObject



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

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

TC 5.12.454.7
Delphiscript

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



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

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

delphiscript

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

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

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

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



#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;



#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" добавился в данную директорию

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



#47484 Работа с TreeView

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

delphiscript
TC 5.12
тестируемое приложение на Java

Подскажите как можно вытащить имя текущей ноды из TreeView.
В объектах ничего не отображается.:(
т.е. кликнул по TreeView, определил имя ноды, кликнул в другом TreeView нашел тама ноду с таким же именем.



#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;



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