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

Фотография

Запись теста при использовании DevExpress


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

#1 dorado

dorado

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

  • Members
  • Pip
  • 5 сообщений
  • ФИО:Dorado

Отправлено 16 апреля 2013 - 12:33

Добрый день!
Нет опыта в использовании средств автоматизированного тестирования, но пришлось. Надо погонять приложение на Net. Используется DevExpress 12.
Для тестирования берем TestComplete 8.

Записываю тест: Test/Record/Record Script. Получаю код вида:
Sub Test1
  Dim lab2_Win
  Set lab2_Win = Aliases.Lab2_Win
  Call lab2_Win.a6c2c242_d03b_48cf_9785_bf9f7306603b.viewSitePanel.GridControl.DblClick(74, 56) //Здесь открывается окно
  Call lab2_Win.b7611c64_5aad_4a08_a9b4_09ad7b4460e3.BarDockControl.DockedBarControl.ClickItem("Закрыть") //Здесь ошибка
End Sub

Т.е., для обращения к нектороым окнам формируется некий guid в наименовании. Все бы ничего, но при запуске этого теста вновь открываемое автоматически окно получает другой guid, и при выполнении следующей строки возникает ошибка "The object does not exist" (ну и действительно, не exist...)
Подскажите, как с этим бороться - может, опцию какую где-нибудь включить, или еще что-то в этом роде?
  • 0

#2 Rebz

Rebz

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

  • Members
  • PipPipPipPip
  • 471 сообщений


Отправлено 16 апреля 2013 - 14:21

Добрый день!
Нет опыта в использовании средств автоматизированного тестирования, но пришлось. Надо погонять приложение на Net. Используется DevExpress 12.
Для тестирования берем TestComplete 8.

Записываю тест: Test/Record/Record Script. Получаю код вида:

Sub Test1
  Dim lab2_Win
  Set lab2_Win = Aliases.Lab2_Win
  Call lab2_Win.a6c2c242_d03b_48cf_9785_bf9f7306603b.viewSitePanel.GridControl.DblClick(74, 56) //Здесь открывается окно
  Call lab2_Win.b7611c64_5aad_4a08_a9b4_09ad7b4460e3.BarDockControl.DockedBarControl.ClickItem("Закрыть") //Здесь ошибка
End Sub

Т.е., для обращения к нектороым окнам формируется некий guid в наименовании. Все бы ничего, но при запуске этого теста вновь открываемое автоматически окно получает другой guid, и при выполнении следующей строки возникает ошибка "The object does not exist" (ну и действительно, не exist...)
Подскажите, как с этим бороться - может, опцию какую где-нибудь включить, или еще что-то в этом роде?

Проверьте, что включены все соответствующие Extensions ("File - Install Extensions"), .Net Support, WPF Support...
  • 0

#3 dorado

dorado

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

  • Members
  • Pip
  • 5 сообщений
  • ФИО:Dorado

Отправлено 17 апреля 2013 - 05:32

Проверьте, что включены все соответствующие Extensions ("File - Install Extensions"), .Net Support, WPF Support...

Включены. И Developer Explorer Components Support (Version 8.60) тоже.
  • 0

#4 Rebz

Rebz

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

  • Members
  • PipPipPipPip
  • 471 сообщений


Отправлено 17 апреля 2013 - 06:19

Проверьте, что включены все соответствующие Extensions ("File - Install Extensions"), .Net Support, WPF Support...

Включены. И Developer Explorer Components Support (Version 8.60) тоже.

Прошу прощения, невнимательно прочел суть проблемы. Теперь понял.
Для варианта:
Call lab2_Win.a6c2c242_d03b_48cf_9785_bf9f7306603b.viewSitePanel.GridControl.DblClick(74, 56)
Можно искать элемент viewSitePanel по его конкретным свойствам, используя FindChild. Например, по названию класса.

Аналогично для:
Call lab2_Win.b7611c64_5aad_4a08_a9b4_09ad7b4460e3.BarDockControl.DockedBarControl.ClickItem("Закрыть")
Искать элемент BarDockControl.

Тогда Вы не будете зависеть от промежуточных элементов цели, а искать конечный, постоянный.
  • 1

#5 dorado

dorado

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

  • Members
  • Pip
  • 5 сообщений
  • ФИО:Dorado

Отправлено 17 апреля 2013 - 07:30

Большое спасибо за ответ. А если не трудно - можно образец кода? Т.е, какой примерно вид примет эта строка?
Call lab2_Win.b7611c64_5aad_4a08_a9b4_09ad7b4460e3.BarDockControl.DockedBarControl.ClickItem("Закрыть")

Прошу прощения за столь примитивные вопросы, просто висят другие задачи и сейчас нет времени более детально вникать в TestComplete.
  • 0

#6 Rebz

Rebz

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

  • Members
  • PipPipPipPip
  • 471 сообщений


Отправлено 17 апреля 2013 - 08:57

Большое спасибо за ответ. А если не трудно - можно образец кода? Т.е, какой примерно вид примет эта строка?

Call lab2_Win.b7611c64_5aad_4a08_a9b4_09ad7b4460e3.BarDockControl.DockedBarControl.ClickItem("Закрыть")

Прошу прощения за столь примитивные вопросы, просто висят другие задачи и сейчас нет времени более детально вникать в TestComplete.

Я приведу свой кусок кода, т.к. не знаю что у вас за класс и проч., сделайте по аналогии:
  	PropArray = Array("ClrClassName")
  	ValuesArray = Array("MultiTemplateControl")
  	Set MTCObject = Sys.Process(Proc_name).FindChild(PropArray, ValuesArray,10)
  	if MTCObject.Exists then 
 		...
  	end if
С алиасами по-моему такое не пройдет, я их не использовал. Я имею в виду, у алиасов вроде нет метода FindChild. Проверьте это.
Указанный пример можно сделать в виде функции, при этом возвращать искомый объект в моем случае - MTCObject.
  • 2

#7 dorado

dorado

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

  • Members
  • Pip
  • 5 сообщений
  • ФИО:Dorado

Отправлено 18 апреля 2013 - 08:18

Да, придется разбираться... А так хотелось лёгким движением руки данные загнать! :)
  • 0

#8 dorado

dorado

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

  • Members
  • Pip
  • 5 сообщений
  • ФИО:Dorado

Отправлено 22 апреля 2013 - 09:28

Да, получилось. Как-то так:
Dim MainPropArray, MainValuesArray
  Dim PropArray, ValuesArray
  MainPropArray = Array("ClrFullClassName")        
  MainValuesArray = Array("DevExpress.ExpressApp.Win.Templates.MainForm")
  Set MainFormObject = Sys.Process("MyProject.Win").FindChild(MainPropArray, MainValuesArray,10)
 
  if MainFormObject.Exists then
    Call MainFormObject.WinFormsObject("viewSitePanel").WinFormsObject("GridControl", "").DblClick(48, 53) 
    PropArray = Array("ClrFullClassName","Enabled")
    ValuesArray = Array("DevExpress.ExpressApp.Win.Templates.DetailViewForm",True)
    Set DetailObject = Sys.Process("MyProject.Win").FindChild(PropArray, ValuesArray,10)
    Call DetailObject.WinFormsObject("BarDockControl","",5).WinFormsObject("DockedBarControl","",2).ClickItem("Закрыть")
  end if

Не знаю, пойдет ли для практического применения - поскольку слишком уж трудоемко вручную писать при наличии большого количества контролов.
Меня немного удивляет отсутствие подобных тем, при том что TestComplete официально для тестирования DevExpress рекомендован и должен по идее широко использоваться (вот тут нечто похожее мелькнуло, про 'This problem often appears if windows are created and destroyed dynamically', но не совсем то). То ли мало кто тестирует, то ли у меня все-таки какие-то настройки неправильные...
  • 0

#9 Rebz

Rebz

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

  • Members
  • PipPipPipPip
  • 471 сообщений


Отправлено 22 апреля 2013 - 10:55

Да, получилось. Как-то так:

Dim MainPropArray, MainValuesArray
  Dim PropArray, ValuesArray
  MainPropArray = Array("ClrFullClassName")        
  MainValuesArray = Array("DevExpress.ExpressApp.Win.Templates.MainForm")
  Set MainFormObject = Sys.Process("MyProject.Win").FindChild(MainPropArray, MainValuesArray,10)
 
  if MainFormObject.Exists then
    Call MainFormObject.WinFormsObject("viewSitePanel").WinFormsObject("GridControl", "").DblClick(48, 53) 
    PropArray = Array("ClrFullClassName","Enabled")
    ValuesArray = Array("DevExpress.ExpressApp.Win.Templates.DetailViewForm",True)
    Set DetailObject = Sys.Process("MyProject.Win").FindChild(PropArray, ValuesArray,10)
    Call DetailObject.WinFormsObject("BarDockControl","",5).WinFormsObject("DockedBarControl","",2).ClickItem("Закрыть")
  end if

Не знаю, пойдет ли для практического применения - поскольку слишком уж трудоемко вручную писать при наличии большого количества контролов.
Меня немного удивляет отсутствие подобных тем, при том что TestComplete официально для тестирования DevExpress рекомендован и должен по идее широко использоваться (вот тут нечто похожее мелькнуло, про 'This problem often appears if windows are created and destroyed dynamically', но не совсем то). То ли мало кто тестирует, то ли у меня все-таки какие-то настройки неправильные...

Мне кажется, что это уже от программистов зависит. У меня при работе с DevExpress была так: в пути к главному окну были неменяющиеся контролы, я их "файндчайдил", но была и следующая пакость. При обновлении DevExpress менялась вся архитектура контролов и приходилось заново переопределять эти штуковины. Правда, мой тест был написан так, что это пришлось сделать в одном месте, остальное практически без изменений заработало.
  • 0


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

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