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

Фотография

Проблема после запуска тестируемого приложения


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 7

#1 M.A.N.

M.A.N.

    Новый участник

  • Members
  • Pip
  • 14 сообщений
  • ФИО:Александр

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

и т д. всё работает на "Ура".
  • 0

#2 Darkus

Darkus

    Опытный участник

  • Members
  • PipPipPipPip
  • 424 сообщений
  • Город:Казахстан, г.Астана

Отправлено 17 марта 2005 - 03:40

Не удивляйся, некоторые вещи приходиться после "рекорда" подправлять ручками.
Попробуй не просто w.OK.Click, а вроде w.Window("Button", "ОК").Click (в твоём контексте)
  • 0

#3 M.A.N.

M.A.N.

    Новый участник

  • Members
  • Pip
  • 14 сообщений
  • ФИО:Александр

Отправлено 17 марта 2005 - 08:10

Спасибо за ответ.
Если так подправлять руками ( w.Window('TButton', 'OK').Click; ), то сильно много ручной работы - где же автоматизация желанная? :)
Это ведь стиль "закрытого приложения".
Проблема в способе запуска - ручном или программном. Хотя какая по-идее разница? Переменная p всё равно указывает на один и тот же процесс. Путём долгих исканий я теперь делаю так (ну совсем не элегантно):

app := TestedApps.Items[0];
p := app.Run;

а затем вроде бы ненужную строку:

p := Sys.WaitProcess('App',10000);

иначе глюки с дальнейшим распознаванием...
  • 0

#4 Гость_Alexei Karas_*

Гость_Alexei Karas_*
  • Guests

Отправлено 17 марта 2005 - 10:04

Приветствую, M.A.N.,

Судя по записанной строке кода (w.OK.Click;), ваше приложение является открытым для TestComplete. Если это так, то получать ссылку на процесс рекомендуется с установкой третьего параметра функции (Wait)Process() в True. Это явно указывает TestComplete, что приложение является открытым и задерживает возврат из WaitProcess() до тех пор, пока TestComplete не обработает и не распознает все объекты в приложении. (За дополнительной информацией см. раздел Sys.WaitProcess в справочной системе).


Regards,
Alex
[TeamAQA]
================================

#5 M.A.N.

M.A.N.

    Новый участник

  • Members
  • Pip
  • 14 сообщений
  • ФИО:Александр

Отправлено 17 марта 2005 - 14:25

Спасибо, Alexei Karas, за ответ.
Т.е. всё-таки после программного запуска приложения

app := TestedApps.Items[0];
p := app.Run;

необходимо сделать:

p := Sys.WaitProcess('App',10000, True); ?

Вопрос был в принципе в том, что переменную p приходится фактически переинициализировать после
p := app.Run;
о чём, если не ошибаюсь, нигде не написано в документации, как о необходимом действии для корректной работы с открытым приложением после программного запуска.
  • 0

#6 Гость_Alexei Karas_*

Гость_Alexei Karas_*
  • Guests

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

M.A.N.

    Новый участник

  • Members
  • Pip
  • 14 сообщений
  • ФИО:Александр

Отправлено 18 марта 2005 - 13:35

Спасибо, Alexei Karas, за ответ.
Exists я конечно же широко использую.
Вопрос (а теперь уже скорее утверждение, основанное на экспериментах) был в том, что недостаточно
сделать p := app.Run; (как в документации по TestComplete, при этом переменная уже указывает на процесс), а для нормальной работы открытого приложения также необходимо в любом случае вызвать p := Sys.WaitProcess('App',10000, True); (можно и без True). и т д.
Вы, судя по всему, представитель фирмы-разработчика?
В документации, в частности в разделе "Working With the TestedApps Object. Example"
после p := app.Run идет непосредственно тест (правда там, возможно, тестируется закрытое приложение). Если делать так для открытого приложения, возможно будут проблемы с распознаванием.
Было бы неплохо, чтобы был пример для открытого приложения, так как указано в вашем ответе.
  • 0

#8 Гость_Alexei Karas_*

Гость_Alexei Karas_*
  • Guests

Отправлено 21 марта 2005 - 12:24

Приветствую,

Вы, судя по всему, представитель фирмы-разработчика?

Нет, я не представитель AutomatedQA, а один из пользователей ее продуктов. Просто я уже достаточно давно сотрудничаю с этой компанией и имею некоторый опыт по использованию ее продуктов. По результатам деятельности, некоторым из пользователей, компанией AutomatedQA Corp. предоставлено право использовать добавление [TeamAQA] в своей подписи. Это ни в коей мере не означает, что наши сообщения являются официальным ответом или точкой зрения компании.

[...] для нормальной работы открытого приложения также необходимо в любом случае вызвать p := Sys.WaitProcess('App',10000, True); (можно и без True)

Как раз для нормальной работы открытого приложения необходимо устанавливать третий параметр в True. Как я уже писал, это указывает TestComplete провести дополнительную обработку тестируемого приложения прежде чем продолжать выполнение скрипта.
Как вы уже заметили, в случае открытого приложения меняется синтаксис, по которому производится распознавание и работа с элементами приложения (кроме того, для открытого приложения TestComplete-у доступно гораздо больше информации, по сравнению с закрытым приложением). Поэтому, в общем случае, если для открытого приложения вы будете писать скрипт как для закрытого, то вы просто лишитесь части наглядности в коде и доступа к некоторым данным. Если-же вы будете писать скрипт как для открытого приложения, но не указывать, что приложение является открытым, то возможны (практически - гарантируются;) ) проблемы с распознаванием.

Было бы неплохо, чтобы был пример для открытого приложения

Согласен. На news://forums.automatedqa.com/automatedqa....ic.testcomplete или http://www.automated...tcomplete&utag= доступна новостная группа по TestComplete поддерживаемая компанией-разработчиком. На форуме можно найти много ответов на различные вопросы, связанные с TestComplete и высказать свои замечания и пожелания к продукту.


Regards,
Alex
[TeamAQA]
================================


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

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