Проблема после запуска тестируемого приложения
#1
Отправлено 16 марта 2005 - 15:06
Проблема:
Запускаю из TestComplete тестируемое приложение:
app := TestedApps.Items[0];
p := app.Run;
Затем в тесте пристутствует фрагмент:
w := p.WaitWindow('TMessageForm','*',-1,1000);
if w.Exists then
begin
w.Activate;
w.OK.Click;
end;
TestComplete не может найти OK, хотя если приложение запускать вручную, то всё нормально.
Причем присутствует какая-то непонятная "избирательность" в распознавании при программном запуске приложения: что-то распознается, что-то нет. Хотя при ручном запуске и дальнейшем вызове
p := Sys.Process('App');
и т д. всё работает на "Ура".
#2
Отправлено 17 марта 2005 - 03:40
Попробуй не просто w.OK.Click, а вроде w.Window("Button", "ОК").Click (в твоём контексте)
#3
Отправлено 17 марта 2005 - 08:10
Если так подправлять руками ( w.Window('TButton', 'OK').Click; ), то сильно много ручной работы - где же автоматизация желанная? :)
Это ведь стиль "закрытого приложения".
Проблема в способе запуска - ручном или программном. Хотя какая по-идее разница? Переменная p всё равно указывает на один и тот же процесс. Путём долгих исканий я теперь делаю так (ну совсем не элегантно):
app := TestedApps.Items[0];
p := app.Run;
а затем вроде бы ненужную строку:
p := Sys.WaitProcess('App',10000);
иначе глюки с дальнейшим распознаванием...
#4 Гость_Alexei Karas_*
Отправлено 17 марта 2005 - 10:04
Судя по записанной строке кода (w.OK.Click;), ваше приложение является открытым для TestComplete. Если это так, то получать ссылку на процесс рекомендуется с установкой третьего параметра функции (Wait)Process() в True. Это явно указывает TestComplete, что приложение является открытым и задерживает возврат из WaitProcess() до тех пор, пока TestComplete не обработает и не распознает все объекты в приложении. (За дополнительной информацией см. раздел Sys.WaitProcess в справочной системе).
Regards,
Alex
[TeamAQA]
================================
#5
Отправлено 17 марта 2005 - 14:25
Т.е. всё-таки после программного запуска приложения
app := TestedApps.Items[0];
p := app.Run;
необходимо сделать:
p := Sys.WaitProcess('App',10000, True); ?
Вопрос был в принципе в том, что переменную p приходится фактически переинициализировать после
p := app.Run;
о чём, если не ошибаюсь, нигде не написано в документации, как о необходимом действии для корректной работы с открытым приложением после программного запуска.
#6 Гость_Alexei Karas_*
Отправлено 18 марта 2005 - 10:49
Не могу сказать, необходимо-ли, но лично я всегда делал примерно так:Т.е. всё-таки после программного запуска приложения [...] необходимо сделать: [...]
app := TestedApps.Items[0];
app.Run;
p := Sys.WaitProcess('App',10000, True);
if (p.Exists())
{
...
}
else
...
Скорее - это общий рекомендуемый подход, при работе с окнами/процессами в TestComplete: (Wait)Process()/(Wait)Window()/(Wait)Child() возвратит вам объект соответствующего типа в любом случае, независимо от того, присутствует-ли он в системе/на экране. Поэтому и рекомендуется всегда проверять с помощью Exists, что объект существует (или не существует, в зависимости от логики вашего теста).
Regards,
Alex
[TeamAQA]
================================
#7
Отправлено 18 марта 2005 - 13:35
Exists я конечно же широко использую.
Вопрос (а теперь уже скорее утверждение, основанное на экспериментах) был в том, что недостаточно
сделать p := app.Run; (как в документации по TestComplete, при этом переменная уже указывает на процесс), а для нормальной работы открытого приложения также необходимо в любом случае вызвать p := Sys.WaitProcess('App',10000, True); (можно и без True). и т д.
Вы, судя по всему, представитель фирмы-разработчика?
В документации, в частности в разделе "Working With the TestedApps Object. Example"
после p := app.Run идет непосредственно тест (правда там, возможно, тестируется закрытое приложение). Если делать так для открытого приложения, возможно будут проблемы с распознаванием.
Было бы неплохо, чтобы был пример для открытого приложения, так как указано в вашем ответе.
#8 Гость_Alexei Karas_*
Отправлено 21 марта 2005 - 12:24
Нет, я не представитель AutomatedQA, а один из пользователей ее продуктов. Просто я уже достаточно давно сотрудничаю с этой компанией и имею некоторый опыт по использованию ее продуктов. По результатам деятельности, некоторым из пользователей, компанией AutomatedQA Corp. предоставлено право использовать добавление [TeamAQA] в своей подписи. Это ни в коей мере не означает, что наши сообщения являются официальным ответом или точкой зрения компании.Вы, судя по всему, представитель фирмы-разработчика?
Как раз для нормальной работы открытого приложения необходимо устанавливать третий параметр в True. Как я уже писал, это указывает TestComplete провести дополнительную обработку тестируемого приложения прежде чем продолжать выполнение скрипта.[...] для нормальной работы открытого приложения также необходимо в любом случае вызвать p := Sys.WaitProcess('App',10000, True); (можно и без True)
Как вы уже заметили, в случае открытого приложения меняется синтаксис, по которому производится распознавание и работа с элементами приложения (кроме того, для открытого приложения TestComplete-у доступно гораздо больше информации, по сравнению с закрытым приложением). Поэтому, в общем случае, если для открытого приложения вы будете писать скрипт как для закрытого, то вы просто лишитесь части наглядности в коде и доступа к некоторым данным. Если-же вы будете писать скрипт как для открытого приложения, но не указывать, что приложение является открытым, то возможны (практически - гарантируются;) ) проблемы с распознаванием.
Согласен. На news://forums.automatedqa.com/automatedqa....ic.testcomplete или http://www.automated...tcomplete&utag= доступна новостная группа по TestComplete поддерживаемая компанией-разработчиком. На форуме можно найти много ответов на различные вопросы, связанные с TestComplete и высказать свои замечания и пожелания к продукту.Было бы неплохо, чтобы был пример для открытого приложения
Regards,
Alex
[TeamAQA]
================================
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных