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

Фотография

Как проверить что объект сущесвтует на странице?


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

#1 madboy4ik

madboy4ik

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

  • Members
  • Pip
  • 62 сообщений
  • ФИО:Александр Александрович
  • Город:Kharkov

Отправлено 18 октября 2010 - 09:18

Добрый день
подскажите пожалуйста как в QTP проверить что объект существует на странице. И может ли он делать такое вообще ?
Приведу банальный пример:
SystemUtil.Run "iexplore.exe","http://google.com"
wait 3
If Browser("Browser").Page("Google").WebButton("Поиск Google").Exist Then 
MsgBox "Exist"
Else 
MsgBox "Doesn't exist"
End If
В данном примере выдаст Exist - всё честно
А теперь меняем google.com на ya.ru
SystemUtil.Run "iexplore.exe","http://ya.ru"
wait 3
If Browser("Browser").Page("Google").WebButton("Поиск Google").Exist Then 
MsgBox "Exist"
Else 
MsgBox "Doesn't exist"
End If

И всё равно выдаст Exist. В чём прикол ? Кнопка Browser("Browser").Page("Google").WebButton("Поиск Google") добавлена в локальный репозиторий.
  • 0

#2 M@ks

M@ks

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

  • Members
  • Pip
  • 21 сообщений
  • ФИО:Гриневич Максим

Отправлено 18 октября 2010 - 11:45

а свойства этой кнопки, по которым вы её определяете, покажите..
  • 0
Мой блог - «Я тестер!»

#3 ch_ip

ch_ip

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

  • Members
  • PipPipPipPipPipPip
  • 1 097 сообщений
  • ФИО:Павел Абдюшев
  • Город:Москва


Отправлено 18 октября 2010 - 11:52

1. Закрывается ли первый браузер после выполнения первого теста и перед запуском второго?
2. Нужен скриншот Вашего OR, с фокусом на кнопке "поиск Google"
3. Версия QTP?
  • 0

#4 madboy4ik

madboy4ik

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

  • Members
  • Pip
  • 62 сообщений
  • ФИО:Александр Александрович
  • Город:Kharkov

Отправлено 18 октября 2010 - 11:59

а свойства этой кнопки, по которым вы её определяете, покажите..


пробовал получить visible, но даже если кнопки нет оно true возвращает

это стандартная гугловская кнопка
  • 0

#5 madboy4ik

madboy4ik

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

  • Members
  • Pip
  • 62 сообщений
  • ФИО:Александр Александрович
  • Город:Kharkov

Отправлено 18 октября 2010 - 12:01

1. Закрывается ли первый браузер после выполнения первого теста и перед запуском второго?
2. Нужен скриншот Вашего OR, с фокусом на кнопке "поиск Google"
3. Версия QTP?


Это один и тот же скрипт
мы всего лишь меняем http://google.com на http://ya.ru и запускаем скрипт по новой. Дабы удостоверится что гугловской кнопки нет на сайте Яндекса
Версия qtp 10
  • 0

#6 ch_ip

ch_ip

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

  • Members
  • PipPipPipPipPipPip
  • 1 097 сообщений
  • ФИО:Павел Абдюшев
  • Город:Москва


Отправлено 18 октября 2010 - 13:00


1. Закрывается ли первый браузер после выполнения первого теста и перед запуском второго?
2. Нужен скриншот Вашего OR, с фокусом на кнопке "поиск Google"
3. Версия QTP?


Это один и тот же скрипт
мы всего лишь меняем http://google.com на http://ya.ru и запускаем скрипт по новой. Дабы удостоверится что гугловской кнопки нет на сайте Яндекса

Браузер закрывается между запусками?
Если добавить с скрипт строку SystemUtil.KillProcessByName "iexplore.exe"
результат поменяется или нет?
2. Нужен скриншот Вашего OR, с фокусом на кнопке "поиск Google"
  • 0

#7 madboy4ik

madboy4ik

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

  • Members
  • Pip
  • 62 сообщений
  • ФИО:Александр Александрович
  • Город:Kharkov

Отправлено 18 октября 2010 - 13:08



1. Закрывается ли первый браузер после выполнения первого теста и перед запуском второго?
2. Нужен скриншот Вашего OR, с фокусом на кнопке "поиск Google"
3. Версия QTP?


Это один и тот же скрипт
мы всего лишь меняем http://google.com на http://ya.ru и запускаем скрипт по новой. Дабы удостоверится что гугловской кнопки нет на сайте Яндекса

Браузер закрывается между запусками?
Если добавить с скрипт строку SystemUtil.KillProcessByName "iexplore.exe"
результат поменяется или нет?
2. Нужен скриншот Вашего OR, с фокусом на кнопке "поиск Google"


Вы наверное меня неправильно поняли.
скрип выглядит так:

SystemUtil.Run "iexplore.exe",siteName
wait 3
If Browser("Browser").Page("Google").WebButton("Поиск Google").Exist Then
MsgBox "Exist"
Else
MsgBox "Doesn't exist"
End If

1.Написали его присвоили siteName = http://google.com запустили,
2.Появляется меседж бокс "Exist" Тест прошёл
3.Закрываем браузер

4.В существуюем скрипте призваиваем siteName =http://ya.ru запускаем скрипт
5.Когда дело доходит до If-a, QTP - долго думает, затем появляется меседж бокс "Exist" - а не должен

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

  • Прикрепленный файл  googlebtn.png   22,67К   13 Количество загрузок:

  • 0

#8 ch_ip

ch_ip

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

  • Members
  • PipPipPipPipPipPip
  • 1 097 сообщений
  • ФИО:Павел Абдюшев
  • Город:Москва


Отправлено 18 октября 2010 - 18:02

Вы наверное меня неправильно поняли.
скрипт выглядит так:
...
1.Написали его присвоили siteName = http://google.com запустили,
2.Появляется меседж бокс "Exist" Тест прошёл
3.Закрываем браузер

Я вас отлично понял. Но, во-первых, в первом посте не было ничего про закрытие браузера между запусками скрипта, потому и уточнил, ибо это первая причина проблемы, которая приходит на ум. Если же отбросить эту самую тривиальную причину, то для дальнейшего анализа было необходимо понять, каким образом у вас распознается кнопка "поиск Google". Поэтому я 2 (два) раза написал вам о том, что

2. Нужен скриншот Вашего OR, с фокусом на кнопке "поиск Google"

Вероятно, моя ошибка оказалась в том, что я употребил привычное для меня сокращение OR, поэтому вместо скриншота объектного репозитория получил скриншот из Object Spy. Он нам мало чем поможет, поскольку он на всех компьютерах одинаковый, в отличие от настроек распознавания элементов (Tools -> Object Identification), которые задаются для всего приложения QuickTest Pro на конкретной машине, и от которых зависит, какую информацию QTP собирает об объектах того или иного класса.
Однако ваш код и последующие комментарии о том, как себя ведет скрипт:

4.В существуюем скрипте призваиваем siteName =http://ya.ru запускаем скрипт
5.Когда дело доходит до If-a, QTP - долго думает, затем появляется меседж бокс "Exist" - а не должен

,позволяют предположить следующую причину проблему, а точнее 3 причины:
1. Вы получили этот тест путем записи ваших действий встроенным рекордером.
2. Вы не меняли настройки распознавания для Web-объектов
3. У вас отключена опция "Disable Smart Identification during the run session"

Если моя догадка верна, то у вас происходит следующее:
QTP всегда находит браузер и страницу. Это потому что по умолчанию для классов Browser и Page не задано вообще никаких свойств, по которым они должны распознаваться. Поэтому и при записи скрипта, и потом, при воспроизведении, QTP обращается к первому открытому браузеру и странице в нем (и при таких настройках ему совершенно все равно, какую вы там открыли страницу: google.com, yandex.ru или http://software-testing.ru/forum).
Если бы были заданы конкретные настройки, например title для браузера и страницы, то во втором случае до поиска кнопки дело бы даже не дошло, поскольку QTP не нашел бы страницу (у гугла и яндекса разные заголовки :))
Дальше — интереснее. Для класса webButton заданы более/менее работоспособные настройки идентификации в виде "html tag", "name" и "type". И вроде как если опираться только на эти свойства, кнопка "поиск Google" никак не может находиться на сайте яндекса. Тут надо заметить, что для всех объектов в Web Environment включена опция "Enable Smart Identification". Это означает, что по факту QTP запоминает для объектов сильно больше свойств, нежели указано в листах Mandatory и Optional Properties внутри Object Identifiaction. В принципе, ничего страшного в запоминании лишних свойств нет, и часто это удобно, особенно при работе с ActiveScreen и добавлении проверок после окончания записи. "Самое страшное" — это непосредственно механизм Smart Identitfication, который включается, когда QTP не может обнаружить объект из объектного репозитория по значениям Mandatory и Optional Properties. Подробно про алгоритм можете прочитать в справке. Вкратце суть такая: он отбрасывает всю информацию из Mandatory и Optional Properties и пытается найти объект заново по сопоставлению свойств, записанных для Smart Iddentification. И если в какой-то момент у него получается только 1 объект, соответствующий какому-то подмножеству этих свойств, то QTP решает, что это как раз тот объект, который и был нужен.
Алгоритм такого распознавания весьма ненадежен, поэтому я всегда рекомендую данную фичу отключать для всех тестов, благо сделать это очень просто:
File -> Settings -> Run -> включить опцию "Disable Smart Identification during the run session".
Прикрепленный файл  Disable SI during test run in Test settings dialog.png   12,27К   21 Количество загрузок:

Поскольку алгоритм идентификации включается только после принятия решения, что искомый объект в репозитории не найден, то и возникает тот таймаут, в течение которого QTP долго думает — это стандартный таймаут на поиск объекта. После него срабатывает Smart Identification и решает, что единственная кнопка на странице ya.ru и есть искомая, поскольку ее класс и тег совпадают с тегом кнопки гугла (удивительно, правда? :)). QTP решает, что объект нашел, поэтому и во втором случае у вас тест выдает "Exist".
Работу Smart Identification отлично видно в логе:
Прикрепленный файл  Smart Identification на примере Google И Yandex.png   87,91К   21 Количество загрузок:.
Проверьте, не содержит ли ваш лог упоминание о Smart Identification. Если причина не в нем, будем думать дальше.

Кстати, спасибо за пост, — получился отличный пример для тренингов. Возьму на заметку.
  • 0

#9 madboy4ik

madboy4ik

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

  • Members
  • Pip
  • 62 сообщений
  • ФИО:Александр Александрович
  • Город:Kharkov

Отправлено 18 октября 2010 - 19:25


Вы наверное меня неправильно поняли.
скрипт выглядит так:
...
1.Написали его присвоили siteName = http://google.com запустили,
2.Появляется меседж бокс "Exist" Тест прошёл
3.Закрываем браузер

Я вас отлично понял. Но, во-первых, в первом посте не было ничего про закрытие браузера между запусками скрипта, потому и уточнил, ибо это первая причина проблемы, которая приходит на ум. Если же отбросить эту самую тривиальную причину, то для дальнейшего анализа было необходимо понять, каким образом у вас распознается кнопка "поиск Google". Поэтому я 2 (два) раза написал вам о том, что

2. Нужен скриншот Вашего OR, с фокусом на кнопке "поиск Google"

Вероятно, моя ошибка оказалась в том, что я употребил привычное для меня сокращение OR, поэтому вместо скриншота объектного репозитория получил скриншот из Object Spy. Он нам мало чем поможет, поскольку он на всех компьютерах одинаковый, в отличие от настроек распознавания элементов (Tools -> Object Identification), которые задаются для всего приложения QuickTest Pro на конкретной машине, и от которых зависит, какую информацию QTP собирает об объектах того или иного класса.
Однако ваш код и последующие комментарии о том, как себя ведет скрипт:

4.В существуюем скрипте призваиваем siteName =http://ya.ru запускаем скрипт
5.Когда дело доходит до If-a, QTP - долго думает, затем появляется меседж бокс "Exist" - а не должен

,позволяют предположить следующую причину проблему, а точнее 3 причины:
1. Вы получили этот тест путем записи ваших действий встроенным рекордером.
2. Вы не меняли настройки распознавания для Web-объектов
3. У вас отключена опция "Disable Smart Identification during the run session"

Если моя догадка верна, то у вас происходит следующее:
QTP всегда находит браузер и страницу. Это потому что по умолчанию для классов Browser и Page не задано вообще никаких свойств, по которым они должны распознаваться. Поэтому и при записи скрипта, и потом, при воспроизведении, QTP обращается к первому открытому браузеру и странице в нем (и при таких настройках ему совершенно все равно, какую вы там открыли страницу: google.com, yandex.ru или http://software-testing.ru/forum).
Если бы были заданы конкретные настройки, например title для браузера и страницы, то во втором случае до поиска кнопки дело бы даже не дошло, поскольку QTP не нашел бы страницу (у гугла и яндекса разные заголовки :))
Дальше — интереснее. Для класса webButton заданы более/менее работоспособные настройки идентификации в виде "html tag", "name" и "type". И вроде как если опираться только на эти свойства, кнопка "поиск Google" никак не может находиться на сайте яндекса. Тут надо заметить, что для всех объектов в Web Environment включена опция "Enable Smart Identification". Это означает, что по факту QTP запоминает для объектов сильно больше свойств, нежели указано в листах Mandatory и Optional Properties внутри Object Identifiaction. В принципе, ничего страшного в запоминании лишних свойств нет, и часто это удобно, особенно при работе с ActiveScreen и добавлении проверок после окончания записи. "Самое страшное" — это непосредственно механизм Smart Identitfication, который включается, когда QTP не может обнаружить объект из объектного репозитория по значениям Mandatory и Optional Properties. Подробно про алгоритм можете прочитать в справке. Вкратце суть такая: он отбрасывает всю информацию из Mandatory и Optional Properties и пытается найти объект заново по сопоставлению свойств, записанных для Smart Iddentification. И если в какой-то момент у него получается только 1 объект, соответствующий какому-то подмножеству этих свойств, то QTP решает, что это как раз тот объект, который и был нужен.
Алгоритм такого распознавания весьма ненадежен, поэтому я всегда рекомендую данную фичу отключать для всех тестов, благо сделать это очень просто:
File -> Settings -> Run -> включить опцию "Disable Smart Identification during the run session".
Прикрепленный файл  Disable SI during test run in Test settings dialog.png   12,27К   21 Количество загрузок:

Поскольку алгоритм идентификации включается только после принятия решения, что искомый объект в репозитории не найден, то и возникает тот таймаут, в течение которого QTP долго думает — это стандартный таймаут на поиск объекта. После него срабатывает Smart Identification и решает, что единственная кнопка на странице ya.ru и есть искомая, поскольку ее класс и тег совпадают с тегом кнопки гугла (удивительно, правда? :)). QTP решает, что объект нашел, поэтому и во втором случае у вас тест выдает "Exist".
Работу Smart Identification отлично видно в логе:
Прикрепленный файл  Smart Identification на примере Google И Yandex.png   87,91К   21 Количество загрузок:.
Проверьте, не содержит ли ваш лог упоминание о Smart Identification. Если причина не в нем, будем думать дальше.

Кстати, спасибо за пост, — получился отличный пример для тренингов. Возьму на заметку.


И Вам спасибо за ответ ! Я с QTP дружу пока только пару недель так что толком ещё не сильно разобрался. и что такое OR тоже дошло не сразу :), но теперь буду знать что это Object Repository.

И всё сражу же сработало :) Ещё раз огромное спасибо за очень детальное объяснение, таких ньюансов про Qtp мне ещё никто не поведывал :)
  • 0


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

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