запуск приложения
#1
Отправлено 10 мая 2006 - 21:19
не могу найти, как запустить приложение
SYS_Execute не помогает, MainWin.Start тоже - приложение детектится как window DialogBox
хелп, плиз!
#2
Отправлено 11 мая 2006 - 06:34
если таки не поможет, то попробуй через API-функцию ShellExecute
[-] dll "shell32.dll" [ ] HINSTANCE ShellExecute (in HWND hwnd,in STRING lpOperation,in STRING lpFile,in STRING lpParameters,in STRING lpDirectory, in INT nShowCmd) alias "ShellExecuteA"
ну а вызов будет выглядеть так примерно
ShellExecute(0,"","msimn","","",SW_SHOWNORMAL)
это пример запуска Outlook Express'a
TestComplete для начинающих (видеозаписи курса)
Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)
Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest
#3
Отправлено 11 мая 2006 - 18:38
помогло объявить МейнВином, приложение стартует, но появилась другая проблема:
*** Error: Window '[MainWin]MyApp' was not found
код тесткейса такой:
[-] testcase strt() [ ] if (!MyApp.Exists ()) [ ] MyApp.Start ("D:\Program Files\MyApp\main.exe", "D:\Program Files\MyApp")
#4
Отправлено 11 мая 2006 - 20:41
коряво конечно, но работает
возможно есть лучшее решение?
#5
Отправлено 12 мая 2006 - 05:48
Так что другого решения искать не имеет смысла. Максимум разобраться, чего же нехватает для аналогичного запуска через SysExecute. Но это по желанию.
Единственное замечание:
Как MainWin окно объявлять необязательно (этого же окна реально нет). В таких случаях удобно обращаться к окну через его оконный класс. Например, у нас есть объявление окна:
window MainWin wMyMainWin tag "Some Tag"
Динамически вызвать запуск приложения с таким окном можно кодом:
MainWin("Some Tag").Start( <arguments>)
То есть окно обявлять не надо. Нам фактически нужен только метод Start.
Если есть желание, то попробуй. Не надо засорять фрейм лишними объявлениями
P.S. А если все-таки хочешь найти более пристойное решение, то попробуй и ShellExecute, как присоветовал Genka. Пробуй все решения. Какое-то из них может подойти
#6
Отправлено 12 мая 2006 - 10:51
Можешь попробывать еще один способ объявления MainWin:
[-] WINDOW MainWin wMain [ ] tag "[DialogBox]Some Tag"
Может поможет, может нет
#7
Отправлено 12 мая 2006 - 11:29
я, наверное, в первый раз не так выразился, но именно такой способ объявления МейнВина я и имел ввиду
тэг ему исправлять на [MainWin] нельзя безусловно
простите меня, если что :)
TestComplete для начинающих (видеозаписи курса)
Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)
Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest
#8
Отправлено 12 мая 2006 - 11:37
Там главное окно тоже распознается как ДиалогБокс
только вот запускать его не возникало надобности
TestComplete для начинающих (видеозаписи курса)
Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)
Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest
#9
Отправлено 12 мая 2006 - 12:06
раз уж тут так хорошо отвечают, грех не поспрашивать
я с силктестом несколько дней всего, вопросы может и глупые, но надо ж учится
ситуация такая: в приложении несколько рабочих форм, все это работает на полный экран и в один момент времени на экране только одна форма, формы меняют кепшн приложения, очень часто происходит переход из одной формы в другую (заполнили одно поле, нажали F3, перешли в другую форму, тут чего-то поклацали, нажали F7, перешли еще куда-нить и т.д.).
что присходит в силктесте: для каждой формы я объявляю окно - кепшн у каждого свой, объекты (поля, кнопки) у каждого свои, я их детектил рекордером, НО почему-то они не выстраиваются в иерархию от главного (как я предполагал), а существуют каждое отдельно. В принципе-то все работает, но вообще это нормально?
Как следствие не удобно писать тесткейсы, получается что-то вроде:
Sales.TypeKeys("123<F6>", 0.1) Clients.TypeKeys("Петров<F3>", 0.1)т.е. клавиши постоянно нажимаются в другом окне, и мне нужно вычислять, какое окно сейчас должно быть активно и как же я его обозвал :)
возможно ли посылать нажатия клавиш просто "в эфир", не привязываясь к окну?
#10
Отправлено 12 мая 2006 - 12:56
Вообще это нормально для диалогов и дочерних окон. Силк необязательно их привязывает к одному главному окну. Может разве что ключевым словом parent обозначить родительское окно. При желании фрейм можно корректироватьчто присходит в силктесте: для каждой формы я объявляю окно - кепшн у каждого свой, объекты (поля, кнопки) у каждого свои, я их детектил рекордером, НО почему-то они не выстраиваются в иерархию от главного (как я предполагал), а существуют каждое отдельно. В принципе-то все работает, но вообще это нормально?
Такой вариант возможен, но лучше все-таки привязываться к окнам - так хоть можно определить, с чем ты сейчас работаешь. Более того, когда работаешь с несколькими окнами, часть из которых появляется/изчезает желательно ожидать определенного события, например, когда некоторое окно не активируется. В противном случае ты просто не сможешь с ним работать.т.е. клавиши постоянно нажимаются в другом окне, и мне нужно вычислять, какое окно сейчас должно быть активно и как же я его обозвал :)
возможно ли посылать нажатия клавиш просто "в эфир", не привязываясь к окну?
Если посылать нажатие клавиш "в эфир", то высока вероятность "схода с рельс", когда нужная форма не появилась, а нахатие клавиши уже посылается не туда.
#11
Отправлено 12 мая 2006 - 13:01
А вообще, я бы создал отдельную функцию. Которая бы брала активное окно (GetActive) и принимала параметр куда перейти (задал бы их как константные строчки).
Лучше на примере:
[ ] const FORMA1="<F6>" [-] BOOLEAN Navigate(STRING sTo) [-] do [ ] MainWin(DialogBox.WndTag).GetActive().TypeKeys(sTo) [ ] return TRUE [-] except [ ] ExceptLog() [ ] return FALSE [-] main() [ ] Navigate(FORMA1)
Где DialogBox - это твое главное окно. Можешь заменить MainWin(DialogBox.WndTag) именем твоего главного окна, если оно обьявлено как MainWin. Код является примером, так что возможно не работает (зависит от твоего приложения и проекта)
И я согласен с KaNoN с проверкой или окно загрузилось. В моем коде нужно будет заменить код "return TRUE" на функцию/switch проверки или переход произошел.
#12
Отправлено 12 мая 2006 - 13:08
Опять же это для тех случаев, когда никакое окно не надо активировать самостоятельно (то есть они появляются по мере ввода данных).
А вообще, лучше принять за должное, что специфика работы Силктеста в том, что он свои активные действия (нажатия клавиш, клики мышью) привязывает к объектам.
А чтобы быть уверенным, что в данный момент ты работаешь с нужным окном, нужно дописать код, который проверяет, что окно появилось или активно. Это ведь тоже фактически проверка функциональности.
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных