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

Фотография

запуск приложения


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

#1 held1r

held1r

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

  • Members
  • Pip
  • 21 сообщений
  • ФИО:Крючков Вячеслав

Отправлено 10 мая 2006 - 21:19

то ли лыжи не едут, то ли я...

не могу найти, как запустить приложение :aggressive:

SYS_Execute не помогает, MainWin.Start тоже - приложение детектится как window DialogBox

хелп, плиз!
  • 0

#2 Genka

Genka

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

  • Members
  • PipPipPipPipPipPip
  • 1 328 сообщений
  • ФИО:Геннадий Алпаев
  • Город:Украина, Днепр


Отправлено 11 мая 2006 - 06:34

если детектится как ДиалогБокс, попробуй сначала принудительно обозвать его МейнВином и использовать Start()

если таки не поможет, то попробуй через 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
  • 0

TestComplete для начинающих (видеозаписи курса)

Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)

Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest


#3 held1r

held1r

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

  • Members
  • Pip
  • 21 сообщений
  • ФИО:Крючков Вячеслав

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

  • 0

#4 held1r

held1r

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

  • Members
  • Pip
  • 21 сообщений
  • ФИО:Крючков Вячеслав

Отправлено 11 мая 2006 - 20:41

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

коряво конечно, но работает
возможно есть лучшее решение?
  • 0

#5 KaNoN

KaNoN

    АЦЦКИЙ СОТОНА

  • Members
  • PipPipPipPipPipPip
  • 1 260 сообщений
  • ФИО:Колесник Николай
  • Город:Днепропетровск > Киев > Лондон

Отправлено 12 мая 2006 - 05:48

Для запуска вообще стандартно используются SysExecute или метод Start. В твоем случае используется метод Start (то есть запуск стандартен). То, что главное окно твоего приложения является диалоговым - это специфика данного приложения, а перехват исключения это приспособление скрипта под данное приложение.
Так что другого решения искать не имеет смысла. Максимум разобраться, чего же нехватает для аналогичного запуска через SysExecute. Но это по желанию.

Единственное замечание:
Как MainWin окно объявлять необязательно (этого же окна реально нет). В таких случаях удобно обращаться к окну через его оконный класс. Например, у нас есть объявление окна:
window MainWin wMyMainWin
       tag "Some Tag"

Динамически вызвать запуск приложения с таким окном можно кодом:
MainWin("Some Tag").Start( <arguments>)

То есть окно обявлять не надо. Нам фактически нужен только метод Start.
Если есть желание, то попробуй. Не надо засорять фрейм лишними объявлениями

P.S. А если все-таки хочешь найти более пристойное решение, то попробуй и ShellExecute, как присоветовал Genka. Пробуй все решения. Какое-то из них может подойти
  • 0

#6 VegaX

VegaX

    Активный участник

  • Members
  • PipPip
  • 85 сообщений

Отправлено 12 мая 2006 - 10:51

А кто является родителем DialogBox?

Можешь попробывать еще один способ объявления MainWin:

[-] WINDOW MainWin wMain
	[ ] tag "[DialogBox]Some Tag"

Может поможет, может нет :aggressive:
  • 0

#7 Genka

Genka

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

  • Members
  • PipPipPipPipPipPip
  • 1 328 сообщений
  • ФИО:Геннадий Алпаев
  • Город:Украина, Днепр


Отправлено 12 мая 2006 - 11:29

хм...
я, наверное, в первый раз не так выразился, но именно такой способ объявления МейнВина я и имел ввиду
тэг ему исправлять на [MainWin] нельзя безусловно

простите меня, если что :)
  • 0

TestComplete для начинающих (видеозаписи курса)

Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)

Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest


#8 Genka

Genka

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

  • Members
  • PipPipPipPipPipPip
  • 1 328 сообщений
  • ФИО:Геннадий Алпаев
  • Город:Украина, Днепр


Отправлено 12 мая 2006 - 11:37

кстати, с такой ерундой я сталкивался, когда пытался описать окно MS Access'a.

Там главное окно тоже распознается как ДиалогБокс

только вот запускать его не возникало надобности
  • 0

TestComplete для начинающих (видеозаписи курса)

Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)

Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest


#9 held1r

held1r

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

  • Members
  • Pip
  • 21 сообщений
  • ФИО:Крючков Вячеслав

Отправлено 12 мая 2006 - 12:06

2 VegaX: нет родителей у этого дилогбокса, сирота...


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

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

что присходит в силктесте: для каждой формы я объявляю окно - кепшн у каждого свой, объекты (поля, кнопки) у каждого свои, я их детектил рекордером, НО почему-то они не выстраиваются в иерархию от главного (как я предполагал), а существуют каждое отдельно. В принципе-то все работает, но вообще это нормально?

Как следствие не удобно писать тесткейсы, получается что-то вроде:
Sales.TypeKeys("123<F6>", 0.1)
Clients.TypeKeys("Петров<F3>", 0.1)
т.е. клавиши постоянно нажимаются в другом окне, и мне нужно вычислять, какое окно сейчас должно быть активно и как же я его обозвал :)
возможно ли посылать нажатия клавиш просто "в эфир", не привязываясь к окну?
  • 0

#10 KaNoN

KaNoN

    АЦЦКИЙ СОТОНА

  • Members
  • PipPipPipPipPipPip
  • 1 260 сообщений
  • ФИО:Колесник Николай
  • Город:Днепропетровск > Киев > Лондон

Отправлено 12 мая 2006 - 12:56

что присходит в силктесте: для каждой формы я объявляю окно - кепшн у каждого свой, объекты (поля, кнопки) у каждого свои, я их детектил рекордером, НО почему-то они не выстраиваются в иерархию от главного (как я предполагал), а существуют каждое отдельно. В принципе-то все работает, но вообще это нормально?

Вообще это нормально для диалогов и дочерних окон. Силк необязательно их привязывает к одному главному окну. Может разве что ключевым словом parent обозначить родительское окно. При желании фрейм можно корректировать


т.е. клавиши постоянно нажимаются в другом окне, и мне нужно вычислять, какое окно сейчас должно быть активно и как же я его обозвал :)
возможно ли посылать нажатия клавиш просто "в эфир", не привязываясь к окну?

Такой вариант возможен, но лучше все-таки привязываться к окнам - так хоть можно определить, с чем ты сейчас работаешь. Более того, когда работаешь с несколькими окнами, часть из которых появляется/изчезает желательно ожидать определенного события, например, когда некоторое окно не активируется. В противном случае ты просто не сможешь с ним работать.
Если посылать нажатие клавиш "в эфир", то высока вероятность "схода с рельс", когда нужная форма не появилась, а нахатие клавиши уже посылается не туда.
  • 0

#11 VegaX

VegaX

    Активный участник

  • Members
  • PipPip
  • 85 сообщений

Отправлено 12 мая 2006 - 13:01

Пробуй :wink:

А вообще, я бы создал отдельную функцию. Которая бы брала активное окно (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. Код является примером, так что возможно не работает (зависит от твоего приложения и проекта) :help:

И я согласен с KaNoN с проверкой или окно загрузилось. В моем коде нужно будет заменить код "return TRUE" на функцию/switch проверки или переход произошел.
  • 0

#12 KaNoN

KaNoN

    АЦЦКИЙ СОТОНА

  • Members
  • PipPipPipPipPipPip
  • 1 260 сообщений
  • ФИО:Колесник Николай
  • Город:Днепропетровск > Киев > Лондон

Отправлено 12 мая 2006 - 13:08

Ну зачем же извращаться? Есть окно Desktop, которому можно сделать TypeKeys, а фактически эти нажатия клавиш сработают для активного окна

Опять же это для тех случаев, когда никакое окно не надо активировать самостоятельно (то есть они появляются по мере ввода данных).

А вообще, лучше принять за должное, что специфика работы Силктеста в том, что он свои активные действия (нажатия клавиш, клики мышью) привязывает к объектам.

А чтобы быть уверенным, что в данный момент ты работаешь с нужным окном, нужно дописать код, который проверяет, что окно появилось или активно. Это ведь тоже фактически проверка функциональности.
  • 0


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

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