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

Фотография

Нужно ли использовать ChildFind?


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

#1 Rebz

Rebz

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

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


Отправлено 21 сентября 2011 - 06:57

Коллеги, приветствую!
У меня дилемма, интересно мнение тех людей, кто уже юзал оба подхода, и их выводы.
Итак, есть 2 варианта определения объекта. Рассматриваю WPF.
1) К примеру, передаем переменной w путь до объекта (VBScript).
Set w = Sys.Proccess("App").WPFObject("Grid", "", 1).WPFObject("barManager").WPFObject("DockPanel", "", 1).WPFObject("Grid", "", 1).WPFObject("dockContainer").WPFObject("MultiTemplateControl", "", 1).WPFObject("MDIDocument", "", 2).WPFObject("ContentPresenter", "", 1).WPFObject("AdvertisingMessageView", "", 1).WPFObject("Grid", "", 1).WPFObject("Grid", "", 3).WPFObject("ComboBox", "", 1)
Минусы этого подхода:
- статический путь, который может меняться при следующей сборке (частая правка кода)
- затруднительна читабильность кода
- нагромаждение (но это смотря как организовать фреймворк)

2) поиск объекта через FindChild
...
Вот хотел бы узнать какие приемущества/подводные камни по сравнению с первым способом поиска нужного объекта (приминительно к WPF или др.кода, где путь до объекта занимает пару строк :))?
  • 0

#2 checo

checo

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

  • Members
  • PipPipPipPip
  • 400 сообщений
  • Город:Н.Новгород

Отправлено 21 сентября 2011 - 09:17

FindChild - отличный метод, т.к. позволяет искать объекты по любой совокупности свойств. Большой плюс - для тех объектов, у которых есть какой-либо видимый атрибут, например WndCaption, мы можем искать по нему, а не по имени объекта, т.е. приблизить действия автотестов к тому, как работает пользователь.
Подводные камни такие:
1) Иногда всё равно приходится апдейтить тесты для новых сборок, т.к. поменяться могут любые свойства.
2) Бывают объекты, которые ну никак нельзя различить, даже по имени: например совершенно одинаковые галочки в разных вкладках PageControl или списки в разных панелях. Тогда приходится искать ступенчато (обычно хватает двух вызовов FindChild, чтобы найти специфичный путь, но это опять привязка к иерархии).
3) Как правило, приходится заводить дополнительные переменные, тогда как при прямом обращении к объектам можно сразу применять методы (...WPFObject(...).Click - сработает, а FindChild(...).Click - не обязательно)
  • 1

#3 kazachis4e

kazachis4e

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

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

Отправлено 21 сентября 2011 - 09:29

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

#4 anagramma

anagramma

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

  • Members
  • PipPip
  • 87 сообщений
  • Город:Moskow

Отправлено 21 сентября 2011 - 10:17

Большое количество вызовов FindChild может значительно затормозить выполнение теста.
Читабельность теста с FindChild значительно лучше, но это не главный показатель.
Как писалось выше

checo Изображение

3) Как правило, приходится заводить дополнительные переменные, тогда как при прямом обращении к объектам можно сразу применять методы (...WPFObject(...).Click - сработает, а FindChild(...).Click - не обязательно)


Не всегда будут доступны все методы объекта.

Есть еще вариант просить разрабов написать метод для формы, который по имени объекта возвратит сам объект. Поиск быстрее полюбому, но это если они согласятся и если имена в пределах формы уникальны.
  • 0

#5 Rebz

Rebz

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

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


Отправлено 21 сентября 2011 - 12:21

Спасибо за полезную информацию, коллеги :)
  • 0


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

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