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

Публикации Jed Meyers

11 публикаций создано Jed Meyers (учитываются публикации только с 29 марта 2023)


#72955 Рекурсивная проверка сайта

Отправлено автор: Jed Meyers 24 декабря 2009 - 10:01 в Hewlett-Packard (Mercury) - Functional Testing

По поводу первого случая. У Browser и Page обычно описания совпадают. Попробуйте так.
Dim sUrlPart, oBrowserDesc, oLinks, oAllLinks 


Set oBrowserDesc = Description.Create
Set oLinks = Description.Create

oBrowserDesc("url").Value = ".*" & sUrlPart & ".*" 
'для обьединения стрингов используйте оператор &
'если в sUrlPart есть символы RegExp вроде ? то перед ними надо ставить \, что бы они обрабатывались как обычные стринги

oLinks ("micclass").Value = "Link"

Set oAllLinks =  Browser(oBrowserDesc).Page(oBrowserDesc).ChildObjects(Links)


Во втором случае, вы можете использовать BitmapCheckpoint. А для проверки пропертей обьекта можно просто использовать if.
Например, вы знаете заранее, что у картинок "html id" равен "image1", "image2", и тд. Вы хотите проверить что href картинок равен "http://test.url/1", "http://test.url/2"
Заносите это все в таблицу в столбики HTML_ID и HREF например. Потом:

Dim iRow, sSheetID, sImageHref, oImageDesc, oBrowserDesc

'используем локальный sheet в дата таблице
'такой код будет работать даже если action переименовать или поменять местами
sSheetID = Environment("ActionName")

'создаем обьект описания для картинки и браузера
Set oImageDesc = Description.Create
Set oBrowserDesc = Description.Create
oBrowserDesc("url").Value = "browser url"

'Проходим по каждой заполненой строке в таблице
For iRow = 1 To DataTable.GetSheet(sSheetID).GetRowCount
  DataTable.SetCurrentRow(iRow)

  'получаем из таблицы нужный html id картинки
  oImageDesc("html id").Value = DataTable.Value("HTML_ID", sSheetID)

  'из нужной картинки на странице вытягиваем href
  sImageHref = Browser(oBrowserDesc).Page(oBrowserDesc).Image(oImageDesc).GetROProperty("href")

  'если полученый href соответствует заданному в таблице
  If sImageHref = DataTable.Value("HREF", sSheetID) Then
	'то выводим в репорт Pass
	Reporter.ReportEvent micPass, "Проверка href", "Image html id = " & DataTable.Value("HTML_ID", sSheetID)
  Else
	'тут в выводе Fail в последний параметр можно добавить ожидаемый и полученный href
	Reporter.ReportEvent micFail, "Проверка href", "Image html id = " & DataTable.Value("HTML_ID", sSheetID)
  End If
'переходим на следущую строку в таблице  
Next



#72949 [QTP 10] More than one object found error

Отправлено автор: Jed Meyers 23 декабря 2009 - 19:22 в Hewlett-Packard (Mercury) - Functional Testing

Думаю, что подразумевался следующий вывод:


Там куча ссылок с разными URL. При попытке нажатия на любую вылазит еррор.
Кстати

.ChildObjects(oDesc).Count 'как мы помним выдает 1
.ChildObjects(oDesc).Item(0).Click ' выдает general run error



#72943 Рекурсивная проверка сайта

Отправлено автор: Jed Meyers 23 декабря 2009 - 15:46 в Hewlett-Packard (Mercury) - Functional Testing

1. где можно найти подробное описание методов ChildObjects и descriptive programming (на русском или английском)
2. Реализация чекпоинтов через функции - это я так понял если не использовать стандартные чекпоинты, есть ли способ
делать проверки по стандартным чекпоинтам в случае если они заранее не определены?
3. Добавление объектов в OR. Да объекты действительно идентичны и добавлять их в OR мне тоже не хочется, но как сильно я потеряю
в функциональности? Может мне стоит заносить в OR страницу как объект, колдовать над ней а потом удалять?


1. В хелпе с примерами описано. На sqaforums есть пару тем.
2. Приведите, пожалуйста, примеры чекпоинтов которые вам понадобятся.
3. Исходя из того что вы сказали, я бы рекомендовал не использовать OR.



#72942 [QTP 10] More than one object found error

Отправлено автор: Jed Meyers 23 декабря 2009 - 15:39 в Hewlett-Packard (Mercury) - Functional Testing

Попробуйте указать micclass когда задаете описание объекта.
mydesc("micclass").value="webLink"


В QTP 10 нет такого класса обьектов как webLink, есть только Link.
И если я укажу mydesc("micclass").value="webLink" то вылезет эррор "object doesn't support this property or method"

И покажите что получилось, когда были выбраны объекты - интерeсует их список - какой линк получился в текстовом варианте

Не совсем понял вопрос. Где выбраны? Список чего?



#72930 [QTP 10] More than one object found error

Отправлено автор: Jed Meyers 23 декабря 2009 - 07:43 в Hewlett-Packard (Mercury) - Functional Testing

Единственное объяснение, которое мне пока пришло, — это то, что иногда в соседнем табе открыта страница с url="http://address:port/...IVITY_ID=SY010"
Если так, то QTP действительно не может разобраться, надо ли ему работать со страницей, у которой url="http://address:port/...IVITY_ID=SY010" или же со ссылкой на другой странице, у которой такой же url.
Попробуйте явно указать класс объекта при задании описания:
MyDesc(“Class”).Value = "Link"


Открыта только одна страница во время запуска. MyDesc(“micclass”).Value = "Link" дает тот же результат.
Мне кажется, тут какая то проблема с внутренней обработкой RegExp.



#72925 [QTP 10] More than one object found error

Отправлено автор: Jed Meyers 22 декабря 2009 - 15:01 в Hewlett-Packard (Mercury) - Functional Testing

1. А какая версия IE?
2. В IE табы включены отключены?
3. Когда первый раз в коде встречается .Link(MyDesc).Click (с комментарием "'в этом месте QTP обычно нажимает на ссылку, но иногда получается так что не нажимает. Рандомное поведение.") и QTP не кликает на ссылку, то он как-то сообщает, почему он не кликнул?
4. Где-нибудь до представленного кода проверяется, что QTP видит родительский объект (Browser("title:=Browser Title").Page("title:=Page Title").Frame("name:=appFrame").Exist что возвращает)?
5. На VMWare какая ОС эмулирована?



1. IE 7.0.6001.18000CO
2. Включены
3. Та же ошибка. More than one object found.
4. Видит, и может кнопки нажимать там, к примеру. Возвращает True.
5. Vista



#72923 Рекурсивная проверка сайта

Отправлено автор: Jed Meyers 22 декабря 2009 - 14:52 в Hewlett-Packard (Mercury) - Functional Testing

Не могу подсказать как все правильно в вашем случае оформить, но метод ChildObjects и descriptive programming вам могут помочь.

1. Получение первой ссылки из некого массива
Этот массив можно задавать через DataTable

2. Открытие страницы
.Link().Click
3. Занесение ее в OR
Если считаете нужным. При большом обьеме похожих обьектов я лично считаю это нецелесообразным.

4. Создание чекпоинтов
Если все чекпоинты заранее известны и фиксированы, то параметры для них можно тоже хранить в DataTable.

5. Проверка по чекпоинтам
Чекпоинты можно реализовать с помощью функций и вывода результата в Reporter.

6. Сбор всех (уникальных) ссылок со страницы и занесение их в массив
Set ObjDesc = Description.Create
ObjDesc("micclass").Value = "Link"
.ChildObjects(ObjDesc)
7. Переход по следующей ссылке из массива
8. переход к пункту 2

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



#72922 [QTP 10] More than one object found error

Отправлено автор: Jed Meyers 22 декабря 2009 - 14:36 в Hewlett-Packard (Mercury) - Functional Testing

У нас есть обычные десктопы с Вистой и VMWare. При запуске тестов на VMWare стала вылазить очень неприятная проблема с обьектами Link и WebElement.
Описание проблемы в комментариях к коду
With Browser("title:=Browser Title").Page("title:=Page Title").Frame("name:=appFrame")

	Dim iChildCount
	Set MyDesc = Description.Create
	MyDesc(“url”).Value = "http://address:port/application/SiteMaintenance?ACTIVITY_ID=SY010"
	MyDesc(“url”).RegularExpression = False
	'в этом месте QTP обычно нажимает на ссылку, но иногда получается так что не нажимает. Рендомное поведение.
	.Link(MyDesc).Click 

	MyDesc(“url”).Value = ".*ACTIVITY_ID=SY010"
	MyDesc(“url”).RegularExpression = True

	'При запуске теста iChildCount становится равной 1
	iChildCount = .ChildObjects(MyDesc).Count 

	'в этом месте тест падает практически всегда
	'вылазит ошибка "more than one object exist with given description"
	'на странице гарантированно только одна ссылка где есть ACTIVITY_ID=SY010
	'ChildObjects.Count подтверждает это
	.Link(MyDesc).Click 
End With

Если делать record/play через object repository то все работает. Не знаю даже что делать, кроме как обращаться в суппорт, что займет полгода в лучшем случае.
Надеюсь на ребят из Логики, может воспроизведете такой баг у себя :smile:



#71845 [QTP 10] RegExp в окне Replace

Отправлено автор: Jed Meyers 26 октября 2009 - 10:28 в Hewlett-Packard (Mercury) - Functional Testing

При этом Replace All работает корректно.


Не сразу заметил эту строчку, но она мне очень помогла :)

Надо было заменить GetSFC("string") на DtRead("string", 2) во многих местах.

Сделал так:
Find what: GetSFC\((\:q)\)
Replace with: DtRead(\1, 2)



#70735 [QTP 10] RegExp в окне Replace

Отправлено автор: Jed Meyers 09 сентября 2009 - 14:45 в Hewlett-Packard (Mercury) - Functional Testing

Добрый день.

Я, к примеру, пытаюсь в коде заменить строку
test6
на
pass6
Хелп говорит, что надо в диалоге Replace в поле Find what написать: test(\:n), а в Replace with: pass\1

Но в результате таких действий я получаю pass\1.

В чем проблема? Бага в QTP?

p.s. Regular expression чекбокс включен конечно же.



#69838 QTP работает со своим кешем ?

Отправлено автор: Jed Meyers 14 августа 2009 - 08:31 в Hewlett-Packard (Mercury) - Functional Testing

Я понимаю что тема закрыта, но может у меня получиться немного прояснить ситуацию.
Когда вы делаете:
Environment("id") = Browser("Browser").Page("test").Link("test1").GetTOProperty("href")
вы получаете проперти href из обьекта который сохранен в обьектной репозитории (может это для вас и есть "кеш").
Для того что бы получить href реально отображаемого обьекта надо вызывать GetROProperty причем проверьте, что бы href не был mandatory проперти у обьекта Link в репозитории, иначе обьект на странице не будет найден.
Environment("id") = Browser("Browser").Page("test").Link("test1").GetROProperty("href")