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

Фотография

обход динамического дерева каталогов


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

#1 vvv

vvv

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

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

Отправлено 28 сентября 2010 - 10:30

Здравствуйте!
Очень требуется помощь.
Тестируется web-приложение, написанное на ASP.Net, компонент Telerik. Браузер - IE6. Инструмент - TestComplete7. Язык JScript
На одной странице существует очень большое динамическое дерево объектов. При нажатии на каждый item дерева на этой же странице отображается несколько текстбоксов и табличек, которые нужно проверить на функциональность. Это дерево необходимо рекурсивно пройти, проверяя все ли пункты загружаются и на всех ли работают необходимые функционалы. Как пройти такое дерево??
Заранее спасибо за ответ)
  • 0

#2 Dmitry N

Dmitry N

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

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

Отправлено 28 сентября 2010 - 10:37

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

Кейс сложный, автоматической записью не решается. Надо анализировать структуру внутренних объектов дерева и писать скрипт, который будет, зная эту структуру, проходить по ней так, как вам необходимо.
  • 0
С уважением,
Дмитрий

#3 vvv

vvv

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

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

Отправлено 28 сентября 2010 - 10:49

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

Кейс сложный, автоматической записью не решается. Надо анализировать структуру внутренних объектов дерева и писать скрипт, который будет, зная эту структуру, проходить по ней так, как вам необходимо.


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

#4 VitalyD

VitalyD

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

  • Members
  • PipPipPipPip
  • 285 сообщений
  • Город:Санкт-Петербург

Отправлено 28 сентября 2010 - 11:00

Передовать можно к примеру узел.
ТОгда не привязываясь к конкретному языку метод будет выглядить так:

function ClickAllNodes(node)
{
    node.Click();
    node.Expand();
    if (node.HasChild()) {
       for (var i = 0; i<node.ChildCount;i++) {
          ClickAllNodes(node.Child(i));
       }
    }
}

ну и в тесте вызываете метод передавая туда корневой узел дерева
  • 0

#5 vvv

vvv

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

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

Отправлено 28 сентября 2010 - 11:34

спасибо за совет, но я не могу его применить, к сожалению. попытаюсь объяснить в чем проблема. зарание извиняюсь за корявости.
у меня нету корневого каталога дерева. есть web страница, на которой сразу есть три ветки дерева:
+ ветка1
+ ветка2
+ ветка3
сама по себе ссылка на ветки не имеет children. При нажатии на + ветка открывается так:
+ ветка1
+ ветка11
+ ветка22
...
+ ветка2
+ ветка3
и т.д.Вложение может доходить до нескольких десятков и структуру вложений я не знаю.
Т.е. подкаталоги появляются только при нажатии на +.
Вопрос: могу ли обходить это дерево рекурсивно или нет? Если да, то что мне передавать как параметр? Передавать как параметр узел я не могу, т.к. он не содержит в себе информации об дочерних объектах
  • 0

#6 VitalyD

VitalyD

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

  • Members
  • PipPipPipPip
  • 285 сообщений
  • Город:Санкт-Петербург

Отправлено 28 сентября 2010 - 12:31

Именно потому что узел не содержит в себе информации о дочерних объектах у меня в методе используется сначала Expand() - т.е. нажатие на плюсик. После этого то вы уже можете получить информацию о том появились новые подузлы и если да то сколько их появилось...
В целом как и при любой рекурсии вам нужно:
1)Нажимаете на узел
2)Нажимаете плюсик на узле
3) Получаете список вновь появившихся узлов
4)Выполняете для всех появившихся объектов все с начала (с пункта 1).

То что нет корневого узла - дела совершенно не меняет, просто эта последовательность выполняется поочередно для трех ваших корневых узлов (for i=0; i<3;i++)




  • 0

#7 vvv

vvv

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

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

Отправлено 28 сентября 2010 - 15:58

Именно потому что узел не содержит в себе информации о дочерних объектах у меня в методе используется сначала Expand() - т.е. нажатие на плюсик. После этого то вы уже можете получить информацию о том появились новые подузлы и если да то сколько их появилось...
В целом как и при любой рекурсии вам нужно:
1)Нажимаете на узел
2)Нажимаете плюсик на узле
3) Получаете список вновь появившихся узлов
4)Выполняете для всех появившихся объектов все с начала (с пункта 1).

То что нет корневого узла - дела совершенно не меняет, просто эта последовательность выполняется поочередно для трех ваших корневых узлов (for i=0; i<3;i++)


спасибо большое! буду пробовать. как только получится - я напишу)
  • 0

#8 Tuchka_84

Tuchka_84

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

  • Members
  • PipPip
  • 105 сообщений
  • ФИО:Маша

Отправлено 29 сентября 2010 - 06:03


Именно потому что узел не содержит в себе информации о дочерних объектах у меня в методе используется сначала Expand() - т.е. нажатие на плюсик. После этого то вы уже можете получить информацию о том появились новые подузлы и если да то сколько их появилось...
В целом как и при любой рекурсии вам нужно:
1)Нажимаете на узел
2)Нажимаете плюсик на узле
3) Получаете список вновь появившихся узлов
4)Выполняете для всех появившихся объектов все с начала (с пункта 1).

То что нет корневого узла - дела совершенно не меняет, просто эта последовательность выполняется поочередно для трех ваших корневых узлов (for i=0; i<3;i++)


спасибо большое! буду пробовать. как только получится - я напишу)

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

У меня примерно было тоже самое с компонентом SysTreeView32. Я так же рекурсивно обходила все дерево, раскрывая ветки и "ветки веток" ..., не зная сколько их будет точно. Правда компонент SysTreeView32 по-крайней мере знает на один уровень ниже сколько у него "подобъектов". Т.е. при действии SelectItem можно было узнать сколько у данного узла wItemCount. И если число wItemCount было равно 0 , то это значило, что выделенный объект является последним узлом дерева и его можно было использовать в нужной функции.
Также при использовании SysTreeView32 и описанного выше метода обхода, можно записать все конечные пути в массив строк и потом передать их все скопом для обработки в функцию. Т.к. при передаче SysTreeView32 на селектирование полного пути до узла , к примеру, .ClickItem('|Узел1|Узел12|Узел121'); он кликнет именно по нужному элементу.
  • 0

#9 vvv

vvv

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

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

Отправлено 29 сентября 2010 - 14:16

пробую сделать как вы написали. но возник вопрос:
я же передаю в функцию node(это узел-ссылка). Он имеет уникальный ID. Мне нужно его развернуть при помощи Expand().
но у плюсика при этом node другой ID - на 1 меньше, чем у node. как можно высчитывать ID этого плюсика и передавать в функцию 2 параметра?
я вызываю функцию вот так:
ClickAllNodes(page.document.all.Item(650));
  • 0

#10 Dmitry N

Dmitry N

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

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

Отправлено 30 сентября 2010 - 04:52

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

Судя по всему, вы работаете с моделью DOM. Как мне кажется, в вашем случае гораздо удобнее будет работать с моделью Tree. Структура объектов будет более понятной и по ней будет проще проходить. Подробнее о моделях читайте в этом разделе справки.
  • 0
С уважением,
Дмитрий


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

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