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

Фотография

Помогите различить объекты


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

#1 AuRum

AuRum

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

  • Members
  • Pip
  • 25 сообщений
  • ФИО:Andrey Simonov
  • Город:Россия, Москва

Отправлено 12 января 2007 - 08:39

Коллеги!

Возникла проблема - не могу с помощью QTP 6.5 различить два объекта - это совершенно одинаковые кнопки. Есть список юзеров и у каждой записи есть кнопка "Delete User". То есть такие кнопки различаются только тем, в какой табличке они находятся. И главное: тест состоит в том, чтобы создать запись, а потом удалить ее! Т.е. эта кнопка появляется во время прогона теста!

Скриншот с кнопками и Object Properties я приложил.

Заранее спасибо.

Прикрепленные файлы

  • Прикрепленный файл  screen.gif   24,59К   75 Количество загрузок:

  • 0

#2 Alexander K.

Alexander K.

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

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

Отправлено 12 января 2007 - 10:41

Посмотрите на форуме ) этот вопрос уже поднимался ) добавьте свойство индекс для каждой кнопки и будет вам счастье )
  • 0

#3 AuRum

AuRum

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

  • Members
  • Pip
  • 25 сообщений
  • ФИО:Andrey Simonov
  • Город:Россия, Москва

Отправлено 12 января 2007 - 10:45

А по какому ключевому слову искать?
  • 0

#4 Alexander K.

Alexander K.

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

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

Отправлено 12 января 2007 - 11:11

Что-нибудь типа распознание объектов ) Ветка Hp -Mercury
  • 0

#5 AuRum

AuRum

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

  • Members
  • Pip
  • 25 сообщений
  • ФИО:Andrey Simonov
  • Город:Россия, Москва

Отправлено 12 января 2007 - 11:58

Посмотрите на форуме ) этот вопрос уже поднимался ) добавьте свойство индекс для каждой кнопки и будет вам счастье )

Просмотр сообщения


как же я смогу добавить свойство к кнопке, если ее нет (она появляется при прогоне теста)?

Что-нибудь типа распознание объектов ) Ветка Hp -Mercury

Просмотр сообщения


не могу найти, помогите пожалуйста
проблему так и не решил
  • 0

#6 Alexander K.

Alexander K.

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

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

Отправлено 15 января 2007 - 08:06

Для начала посмотрите вот это (раздел касательно распознания) http://software-test...ury-qtp-faq.htm
а вообще в репозитории объектов найдите (добавьте с помощью Spy) объект войдите в его свойства и добавьте новое
  • 0

#7 AuRum

AuRum

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

  • Members
  • Pip
  • 25 сообщений
  • ФИО:Andrey Simonov
  • Город:Россия, Москва

Отправлено 15 января 2007 - 09:41

Alexander K.,

сейчас у меня уже вся эта проблема свелась к тому, чтобы нажать на кнопку, зная только ее RO property. Это реально? Как?
  • 0

#8 Alexander K.

Alexander K.

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

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

Отправлено 15 января 2007 - 10:04

Я не пробовал этого делать в QTP 6.5 , но в 8ой версии это делается следующим образом , открывается Object Repository находите нужный вам control и добавляете ему еще одно свойство, по которому вы и будете различать ваши объекты )
  • 0

#9 AuRum

AuRum

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

  • Members
  • Pip
  • 25 сообщений
  • ФИО:Andrey Simonov
  • Город:Россия, Москва

Отправлено 15 января 2007 - 10:22

Я не пробовал этого делать в QTP 6.5 , но в 8ой версии это делается следующим образом , открывается Object Repository находите нужный вам control и добавляете ему еще одно свойство, по которому вы и будете различать ваши объекты )

Просмотр сообщения


Александр, я же уже говорил, я не могу добавить свойство. Объект появляется во время теста!!! Есть только RO Property, которое я заранее знаю! И мне нужно по этому RO Propery обратиться к объекту, который, еще раз говорю, появится только когда часть скрипта выполнится! Если можно как-то еще обратиться к такому объекту, то скажите пожалуйста, как.
  • 0

#10 Mike

Mike

    Консультант

  • Members
  • PipPipPipPipPipPip
  • 1 079 сообщений
  • Город:Москва

Отправлено 15 января 2007 - 11:21

Вообще-то, в моей статье (ссылка на которую есть в KB), довольно подробно описано, как достучаться до объекта по его свойствам во время исполнения. Этот трюк назвается "descriptive programming", и состоит в том, что вместо использования ссылки на Object Repository, используется непосредственное описание свойств объекта. Например,
Browser("title:=Mercury Tours")
Если надо распознавать по набору свойств, это делается так:

Browser("title:=Mercury Tours").Page("index:=0").WebElement("html tag:=SPAN","index:=0")

Добавить программно (во время исполнения) свойство распознавания можно даже при использовании объектного репозитория. Для этого используется метод SetTOProperty, который есть у всех типов объектов.

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

Browser("SiteUnderTest").Page("Page").WebTable("table1").WebButton("title:=Delete").Click

Browser("SiteUnderTest").Page("Page").WebTable("table2").WebButton("title:=Delete").Click

  • 0
Best regards,
Майк.

#11 AuRum

AuRum

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

  • Members
  • Pip
  • 25 сообщений
  • ФИО:Andrey Simonov
  • Город:Россия, Москва

Отправлено 15 января 2007 - 12:46

Спасибо, Майк. То есть к Run-time свойствам объектов, как я понял, можно так же обращася, как и к TO-свойствам?


У меня уникальное свойсво такое:

outerHTML со значением:

<INPUT onclick="setFormValue ('delete', '100000074')" type=button value="Delete User">

И вот я хочу нажать на эту кнопку,

Browser("Development").Page("Development").WebButton

("outerHTML:=<INPUT onclick="setFormValue ('delete', '100000074')" type=button value="Delete User">").Click


Не работает! Проблема со служебными символами. Нужно как-то расставить \, никак не получается...

Может это не то свойство? Я искал другие, но именно уникального я не нашел, при том что эта кнопка не будет существовать на странице до запуска скрипта.
  • 0

#12 Mike

Mike

    Консультант

  • Members
  • PipPipPipPipPipPip
  • 1 079 сообщений
  • Город:Москва

Отправлено 15 января 2007 - 13:09

Несколько замечаний. Первое - у нас с Вами вышла терминологическая путаница. Run-time properties это не свойства Run-time объекта (.object), а просто свойства (обычные QTP-шные свойства тестового объекта) во время исполнения. Если Вам надо распознавать по свойствам Run-time объекта, то (это работает ТОЛЬКО с Web-объектами) это делается так:

Browser("MyBrowser").Page("attrbute/readyState:=interactive").Sync()
- распознавание по свойству readyState

И главное. Мне кажется, что Вы подошли к проблеме не с того конца. Начать хотя-бы с того, что доступ к объектам внутри таблиц удобнее всего осуществлять с помощью метода объекта WebTable "ChildItem"

Ну, и, наконец, можете спросить у девелоперов, как-бы они нажали бы на кнопку "изнутри" страницы. И сделайте так-же, используя свойство .object тестового объекта .Page.
  • 0
Best regards,
Майк.

#13 Mike

Mike

    Консультант

  • Members
  • PipPipPipPipPipPip
  • 1 079 сообщений
  • Город:Москва

Отправлено 15 января 2007 - 13:16

...Или, что проще, как Вам с самого начала предложили, распознавать кнопки по мета-свойству "index"

То есть
Browser("Developer").Page("Developer").WebButton("name:=Delete","index:=1").Click

Browser("Developer").Page("Developer").WebButton("name:=Delete","index:=0").Click

  • 0
Best regards,
Майк.

#14 AuRum

AuRum

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

  • Members
  • Pip
  • 25 сообщений
  • ФИО:Andrey Simonov
  • Город:Россия, Москва

Отправлено 15 января 2007 - 13:37

Спасибо за ответ.

Несколько замечаний. Первое - у нас с Вами вышла терминологическая путаница. Run-time properties это не свойства Run-time объекта (.object), а просто свойства (обычные QTP-шные свойства тестового объекта) во время исполнения. Если Вам надо распознавать по свойствам Run-time объекта, то (это работает ТОЛЬКО с Web-объектами) это делается так:

Browser("MyBrowser").Page("attrbute/readyState:=interactive").Sync()
- распознавание по свойству readyState

Просмотр сообщения


да, мне нужно распознать по Run-time Object Properties, их я узнаю из Object Spy.

И главное. Мне кажется, что Вы подошли к проблеме не с того конца. Начать хотя-бы с того, что доступ к объектам внутри таблиц удобнее всего осуществлять с помощью метода объекта WebTable "ChildItem"

Просмотр сообщения


Я уже пытался подойти к проблеме с этого конца. Он не определяет таблицу как родителя кнопки :((

...Или, что проще, как Вам с самого начала предложили, распознавать кнопки по мета-свойству "index"

То есть

Browser("Developer").Page("Developer").WebButton("name:=Delete","index:=1").Click

Browser("Developer").Page("Developer").WebButton("name:=Delete","index:=0").Click

Просмотр сообщения


А с этим проблема, так как сама кнопка создается заново каждый раз, и индекс ей присваивается неизвестно какой! На странице эта кнопка может появиться на 1-5 месте.
Тут вопрос: я как-то могу этот индекс в реальном времени узнать и передать функции?

Второй вопрос: если я все-таки обращаюсь к объекту через его Runtime свойства, могу я указать что-то такого типа:

attribute/readyState:=*.100000074.* ?

Мне же нужно только ID вынуть из вот этого значения:

<INPUT onclick="setFormValue ('delete', '100000074')" type=button value="Delete User">

Третий вопрос, а в какой справочной лит-ре (в хелпе я не нашел) есть описание вот этого синтаксиса:

Page("attrbute/readyState:=interactive") ?
  • 0

#15 Mike

Mike

    Консультант

  • Members
  • PipPipPipPipPipPip
  • 1 079 сообщений
  • Город:Москва

Отправлено 15 января 2007 - 13:46

Я уже пытался подойти к проблеме с этого конца. Он не определяет таблицу как родителя кнопки :((


C этого места по-подробнее. Как именно Вы пробовали? Есть два способа. Через ChildItem либо просто ссылаться на кнопку как на дочерний объект таблицы. Первый способ гарантированно работает, и Вы его не пробовали ;). Второй способ может глючить в некоторых версиях QTP. В девятке он работает. В 6.5 - не уверен, но, вроде тоже должен. Может вы на таблицу неправильно ссылаетесь?

Второй вопрос: если я все-таки обращаюсь к объекту через его Runtime свойства, могу я указать что-то такого типа:

attribute/readyState:=*.100000074.* ?


можете.


Третий вопрос, а в какой справочной лит-ре (в хелпе я не нашел) есть описание вот этого синтаксиса:

Page("attrbute/readyState:=interactive")  ?

Просмотр сообщения

Синтаксис - attribute/имя_родного_свойства

Воспользуйтесь в Help закладкой "Search" вместо "index", и будет Вам счастье :crazy:
  • 0
Best regards,
Майк.

#16 Mike

Mike

    Консультант

  • Members
  • PipPipPipPipPipPip
  • 1 079 сообщений
  • Город:Москва

Отправлено 15 января 2007 - 13:49

На первый вопрос - ответ - "В общем случае - никак" :crazy: Но, так как тест - Ваш, я думаю, вы всё-таки должны знать, сколько у Вас где кнопок. Просто сначала clean-up надо произвести. То есть, привести тестируемую систему в некое начальное "чистое" состояние.
  • 0
Best regards,
Майк.

#17 AuRum

AuRum

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

  • Members
  • Pip
  • 25 сообщений
  • ФИО:Andrey Simonov
  • Город:Россия, Москва

Отправлено 16 января 2007 - 09:21

Майк еще раз большое спасибо :)

Пока меня перебросили на другое задание, коллега продолжает дело :)

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

#18 AuRum

AuRum

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

  • Members
  • Pip
  • 25 сообщений
  • ФИО:Andrey Simonov
  • Город:Россия, Москва

Отправлено 16 января 2007 - 16:08

Перешли на QTP 9.0, пока из изменений заметил только то, что некоторые property стали как TO, так и RO, а раньше были только RO.

<...>
Есть два способа. Через ChildItem либо просто ссылаться на кнопку как на дочерний объект таблицы. Первый способ гарантированно работает, и Вы его не пробовали ;).  Второй способ может глючить в некоторых версиях QTP. В девятке он  работает. В 6.5 - не уверен, но, вроде тоже должен. Может вы на таблицу неправильно ссылаетесь?


Получилось! Всего-то ушло 3 дня. Код такой:

dim webedit

set webedit = Browser("Development - Login Page").Page("title:=Development - User Management Page").WebTable("innertext:=User Role:  ADMINISTRATORFirst Name:  dLast Name:  dEmail:  d@d.dd").ChildItem(1, 4, "WebButton", 0)

webedit.click

Спасибо, Майк! Надеюсь, Вы нас не оставите в бою с QuickTest и в будущем :)
  • 0

#19 Mike

Mike

    Консультант

  • Members
  • PipPipPipPipPipPip
  • 1 079 сообщений
  • Город:Москва

Отправлено 16 января 2007 - 16:11

Поздравляю :good:. Обращайтесь ещё :help:.
  • 0
Best regards,
Майк.

#20 Mike

Mike

    Консультант

  • Members
  • PipPipPipPipPipPip
  • 1 079 сообщений
  • Город:Москва

Отправлено 16 января 2007 - 16:19

Да, кстати я не понял, почему Вы не используете Object Repository? Никто не мешает использовать одновременно описания из object repository и описания по свойствам. Главное, чтобы у объектов, определённых по набору свойств не было дочерних объектов, определяемых из объектного репозитория. Определять таблицу по innertext - дело последнее, кстати сказать - innertext - это то что меняется в первую очередь. Да и распознование таблиц по нему зачастую подглючивает. Рекоммендую либо по индексу (правда, его прийдётся подбирать методом тыка), либо по каким-нибудь осмысленным свойствам типа className, html id, и т.п. Для этого попросите девелоперов эти свойства добавить.

Уверен, что работать должно было при использовании любого, из предложеных Вам способов. Советую, всё-таки их всех попробовать - приобретёте много полезных навыков, и, возможно, всё-таки начнёте понимать, как работает QTP.
  • 0
Best regards,
Майк.


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

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