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

Фотография

"improper Command" При Попытке Вызвать Метод Clickbutton() К


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

#1 stakanoff

stakanoff

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

  • Members
  • Pip
  • 18 сообщений

Отправлено 07 августа 2007 - 08:20

Есть продукт, написанный на .NET.

Я пишу скрипт на JScript, он выполняет ряд простых операций с объектами программы, в т.ч. нажимает кнопки.

Есть одна "специальная" кнопка в стандартном диалоге Yes/No, зовут её Yes (WndClass=Button).
У кнопки целый список методов для нажатия (ClickButton, Click, ClickR, ClickM). Выполняю нажатие вызовом одного из методов.
Проблема в том, что часто нажатие на кнопку не выполняется (за один прогон скрипта выполняется несколько итераций нажатия), в лог проекта валится ошибка "Improper command". От чего зависит - не понимаю. Перепробовал вызов всех методов.
На всякий случай увеличил у проекта свойство method invoke timeout - не помогло.

Может кто сталкивался ?

Environment:
WinXp Prof SP2 с последними обновлениями.
.Net 1.1 SP1
Test Complete 5.14.523.3
  • 0

#2 Rifle

Rifle

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

  • Members
  • Pip
  • 37 сообщений
  • ФИО:Vitaliy
  • Город:Kyiv

Отправлено 07 августа 2007 - 09:36

А если попробовать перед каждым нажатием ставить Sys.Delay(1000) или больше?
  • 0

#3 stakanoff

stakanoff

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

  • Members
  • Pip
  • 18 сообщений

Отправлено 07 августа 2007 - 11:07

А если попробовать перед каждым нажатием ставить Sys.Delay(1000) или больше?


не помогает.
ещё заметил следующее: успешно выполняется ТОЛЬКО первый вызов метода. Последующие - либо с ошибкой improper command, либо ТС не может найти окно-родитель кнопки.
чтобы упростить ситуацию, перед вызовом метода искал окно-родитель и саму кнопку с помощью WaitChild("Object",10000) - всё находится успешно, менее чем за секунду, но improper command остаётся.

а нельзя ли как-нить перед вызовом, спросить у объекта, типа "а у тебя такой метод есть ?" и "а можно я выполню вот это ?" ?
  • 0

#4 Rifle

Rifle

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

  • Members
  • Pip
  • 37 сообщений
  • ФИО:Vitaliy
  • Город:Kyiv

Отправлено 07 августа 2007 - 12:42

А вы с кнопкой работаете напрямую, или сначала присваиваете полный путь к кнопке в переменную какую-то?
  • 0

#5 stakanoff

stakanoff

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

  • Members
  • Pip
  • 18 сообщений

Отправлено 08 августа 2007 - 06:46

А вы с кнопкой работаете напрямую, или сначала присваиваете полный путь к кнопке в переменную какую-то?


полный путь не использую в принципе.
докапываюсь до кнопки с помощью череды вызовов метода WaitChild и FindChild. все чайлды находятся, в т.ч. и кнопка, я могу обращаться ко всем её свойствам, а вот вызвать метод ClickButton() не могу.
делаю так, потому что имя контролов могут меняться от сборки к сборке, и я не нашёл информации о том, что в полном пути можно использовать wildcards или регулярные выражения.

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

и ещё...пообщался с человеком , плотно работавшим с ТС3, он сказал, что использование JScript - от лукавого, все патчи , которые выпускаются, как правило лечат проблемы с неродными языками ТС, а родной язык - Delphi(Pascal). В общем, переписываю свой код на паскале, посмотрим что из этого выйдет.
  • 0

#6 APC

APC

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

  • Members
  • PipPipPipPip
  • 293 сообщений
  • ФИО:Похилько Андрей Федорович
  • Город:Москва


Отправлено 09 августа 2007 - 06:43

Обязательно напишите, что получилось!
Мы пишем на DelphiScript и тоже натыкались на странный глюк с .NET приложением, когда TC пытался ткнуть в кнопку, которая была в прошлом диалоге... Мы обошли это с помощью бубна, но хотелось бы докопаться до сути.
  • 0

#7 ЮстусТретий

ЮстусТретий

    Постоянный участник

  • Members
  • PipPipPip
  • 201 сообщений
  • ФИО:Сергей

Отправлено 09 августа 2007 - 18:07

посмотрите что у вас выводится в панели Remarks когда вы выбираете строку с Improper Command в TestLog
  • 0

#8 stakanoff

stakanoff

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

  • Members
  • Pip
  • 18 сообщений

Отправлено 10 августа 2007 - 08:30

посмотрите что у вас выводится в панели Remarks когда вы выбираете строку с Improper Command в TestLog


спасибо за Remarks, я не знал об их существовании.
в общем, там пишется "Possible reason: the application or window stopped responding." и указано имя окна диалога, содержащем "проблемную" кнопку.
Но, повторюсь, окно и кнопка отвечают, я могу выводить в лог значения их свойств и т.п. - не могу только вызвать метод.

Однако, выход из ситуации найден :)

ранее, я адресовался к окну диалога с помощью метода WaitChild.
теперь попробовал метод Window.Window примерно так:

MyDialog_Wnd=MyMainWindow.Window("MyDialog_WndClass", "MyDialog_WndCaption");

затем с помощью метода WaitChild адресуюсь к кнопке, и вызываю метод ClickButton();

Кстати, при записи скрипта автоматически, TC использует именной такой способ адресования. Но я его сознательно не использовал.

Ещё наблюдение:

в зависимости от того, как было запущено тестируемое приложение (вручную или из скрипта), нужно использовать методы адресования либо через поиск детей, либо указывать путь к окну или вызывать метод Window.
  • 0

#9 Dmitry N

Dmitry N

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 742 сообщений
  • ФИО:Николаев Дмитрий
  • Город:Где-то в России

Отправлено 22 августа 2007 - 04:32

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

Можно еще попробовать обновлять дерево объектов вызовом метода Refresh для родительского объекта кнопки.

А по поводу "родного" языка для TestComplete -- нет такого понятия. В TestComplete 3 была лучшая поддержка DelphiScript отладчиком, так как этот язык предоставляет больше встроенных инструментов для отладки. В TestComplete 5 это уже неактуально, в AutomatedQA обошли это ограничение других языков. А вот встроенная функциональность DelphiScript, на мой взгляд, гораздо беднее JScript'а и VBScript'а. Ведь DelphiScript это всего лишь урезанная версия Delphi, тогда как JScript и VBScript изначально были скриптовыми языками. В JScript, например, есть нативная поддержка регулярных выражений, а также замечательные объекты String и Array, которые позволяют очень легко и удобно работать со строками и массивами.
  • 0
С уважением,
Дмитрий


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

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