Показаны сообщения с ярлыком QTP Example. Показать все сообщения
Показаны сообщения с ярлыком QTP Example. Показать все сообщения

пятница, 31 июля 2009 г.

Synchronization in qtp

События ожидания в Quik Test Professional (QTP)


В данном посте будут расмотренны вопросы




  1. События ожидания в QTP

  2. Использование свойства Object для обращения к DOM свойствам объекта в Quick Test professional скрипте

  3. Пример programmatic Description в QTP или по русски программируемое описание в QTP

  4. Пример поиска Dom свойств объекта для использования в контексте ожидания загрузки

  5. Примеры использования методов ожидания в QTP



Как-то возник вопрос о том как оценить статус загрузки страницы браузера в QTP и ее дочерних объектов. Между прочим синхронизация очень важный момент при разработки автотестов. В будущем посте я расскажу об основных на мой взгляд правилах создания автотестов и фреймворка для набора тестов.
Первым делом пришла мысль об использование метода Sync объекта Browser.
Суть данного метода в том, что бы тест ожидал пока браузер не осуществит навигацию.
Также можно воспользоваться методом WaitProperty . Вкратце суть данного метода ожидание до того момента, когда заданное свойство объекта сравняется заданному значению свойства.
Еще можно использовать метод Exist. C данным методом все просто. Он возвращает true или false в зависимости от того существует ли заданный объект. И соответственно его удобно применять в if/else конструкциях.



Далее очень полезное свойство объектов Object, правда, к сожалению применимое только в рамках использования браузера Internet Explorer. Через данное свойство можно обращаться к различным DOM свойствам и методов указанного объекта. Приведу пример в рамках данного поста:

Есть веб приложение, в котором после полной загрузки документа border-color таблицы, в которой отображается документ, становится равным определенному цвету. Для начала я написал функцию, ожидающую полной загрузки документа на основании данного условия.



Public browdes
Set browdes = Description.Create
Browdes(“micclass”).Value=”Browser”

Function waitforload()

Set strbC=Browser(browdes).Frame(“html id:=someframe”).WebTable(“html id:=sometable”).Object. borderColor

Do Until strbC = “#00a86b”
Wait 1
Loop

End function



Но как я позже убедился в случае, если возникает ошибка БД и документ не отображается, а вместо него отображается стек трейс ошибки БД, то функция уходит в бесконечное ожидание. Т.к. в данном случае borderColor не изменяется. Также я пробовал экспериментировать со свойством Browser(browdes).Object. StatusText , но это свойство браузера менялось при каждой подгрузки картинки в документе. В итоге я решил использовать свойство фрейма в котором рисовалась таблица документа. А именно свойство readyState. И в итоге получил такую функцию.





Public browdes
Set browdes = Description.Create
Browdes(“micclass”).Value=”Browser”

Function waitforload()

Set strrS=Browser(browdes).Frame(“html id:=someframe”).Object.readyState

Do Until strrS = “complete”
Wait 1
Loop

End function




В итоге получается следующий список советов для поиска нужного свойства


  1. Прочитать про DOM свойства и методы интересуемого объекта или объектов.Например в MSDN

  2. Активно использовать Object Spy и смотреть не только Identification properties, но и Native.

  3. Определить список свойств, которые хочется использовать. И написать тестовую функцию, которая в цикле заданное количество раз обращается к данным свойствам объекта. И выводит их значения в лог например при помощи метода Print.

  4. Метод Ссылка на пример
    SyncSync in QTP
    WaitPropertyWaitProperty in QTP
    ExistExist in QTP

Пример использования метода WaitProperty в Quick Test Proffesional (QTP)


В данном примере показано использование метода WaitProperty в QTP версии 10.0
И обращение к свойствам объектов с использованием конструкции attribute/свойство





Public browdes 'Объяснять не стоит в ранних версиях постов данная конструкция есть
Set browdes = Description.Create
Browdes(“micclass”).Value=”Browser”

If Browser(browdes).Frame("html id:=someframe").WaitProperty("attribute/readyState", "complete", 4000) Then ' QTP ждет в течение 4 секунд пока свойство readyState объекта
' Frame станет равным complete. Если это произойдет до истечения 4 секунд, то
' переходит к клику по первой строке таблицы
Browser(browdes).Frame("html id:=someframe").Table("html id:=table").Object.rows(1).Click ' клик по первой строке таблицы

End If




Подробнее об передаваемых в параметр WaitProperty значениях можно посмотреть в документации к QTP

Sync method example in QTP script

Пример использования метода Sync объекта Browser и метода Exist



В данном примере показано использование метода Exist и Sync в Quick Test Professional (QTP) версии 10.0




Public browdes ' глобальное описание

Set browdes = Description.Create 'вызов метода создания описания

Function startie() ' объявляем функцию

SystemUtil.CloseProcessByName "IEXPLORE.EXE" ' закрываем все открытые окна браузера
' также при желании можно добавить SystemUtil.CloseProcessByName "FIREFOX.EXE"
' и другие браузеры
If Browser("micclass:=Browser").Exist (0) Then ' проверяем есть ли открытые браузеры
' параметр 0 в методе Exist это время в течение которого тест ищет данный объект.
' 0 значит возвращать true или false незамедлительно
Print "Есть открытые окна браузера" ' Пишем в лог
ExitAction(1) 'Выходим из теста
Else Print "Отлично!!! все окна браузера успешно закрыты" ' Пишем в лог
End if
SystemUtil.Run "iexplore.exe" ' запускаем браузер
Print "Открываем новое окно браузера" 'пишем в лог
End Function

Function openmyblog()

Browser(browdes).Navigate("http://testerway.blogspot.com")' осуществляем навигацию
Browser(browdes).Sync ' собственно метод Sync ожидающий окончания навигации

MsgBox "all done"
' Вывод сообщения. В данный кусок кода тест перейдет лишь после окончания навигации

End Function

call startie ' вызовы функций
call openmyblog




Замедлить скорость работы интернета можно при помощи различных программ, которые уменьшают пропускную способность канала или использовать "тормозную" проксю :)

понедельник, 20 июля 2009 г.

Example of QTP script function

Пример функции в Quick Test Professional(QTP). Кликанье или чтение по всем элементам таблицы



В данном примере используется так называемое "программное описание" или "Programmatic Descriptions" и еще иногда называют descriptive programming. Также в примере используется свойство всех веб объектов QTP Object. Данное свойство позволяет обращаться к DOM свойствам и методам web объектов. Но к сожалению в help к QTP написано, что данное свойство работает, только для IE (InternetExplorer).




'Данный пример будет работать только в IE. Т.к. свойство Object , которое тут используется поддерживается только для ie.

Set browdes=Description.Create 'Создается объект описание

browdes("micclass").Value="Browser" 'для описания micclass значение Browser

Function rcTable(obj, strmode, col, row) ' Функция с 4 параметрами на вход, obj - объект(таблица), strmode - строковое значение c(click) или r(read)

Dim intRowcount ' переменная для хранения числа строк в таблице

intRowcount= obj.RowCount ' подсчет числа строк в таблице

If intRowcount >0 Then ' Проверка на то, что число строк в таблице больше 0

For i=row To intRowcount ' Цикл от переданного в функцию параметра row до числа строк в таблице

If strmode="c" Then ' Ветвление для строкового параметра c(click)

obj.Object.rows(i).cells(col).Click 'клик на соответсвующий элемент таблицы. С использованием свойства Object .

elseif mode="r" Then ' Ветвление для строкового параметра r(read)

Print obj.GetCellData(i,col) ' Печать текста соответсвующего элемента таблицы в лог.

End If ' Конец ветвления для строкового параметра

Next ' Переход к следующему значению в цикле, если оно еще не достигло максимального

Else ' Ветвление , если intRowcount >0 = False

MsgBox "Пустая таблица, повторите операцию на другой таблице" ' Вывод окна с сообщением

End If ' Конец ветвления проверки числа строк intRowcount >0


End Function ' Окончание функции

Set objTable=Browser(browdes).Frame("html id:=_frmQueryList").WebTable("html id:=Hitlist1__searchQueriesList__searchQueriesDataGrid") ' Пример инициализации объекта для использования в функции

rcTable objTable,"c",3,1' Пример использования функции