Функция Wait () в QTP - PullRequest
       5

Функция Wait () в QTP

4 голосов
/ 19 августа 2010

Может ли какой-либо орган предложить мне функцию, которую я могу использовать в QTP для следующего сценария ...

Так как иногда переход по страницам занимает время, из-за которого наш скрипт выдает ошибку. Для этого мы используем функцию wait(time), но это фиксированное время, в течение которого ожидает управление QTP. Я хочу использовать функцию (я слышал о функции синхронизации, но не знаю, как ее использовать), чтобы QTP ожидал только время, затраченное на навигацию (не более / менее, чем оно).

Ответы [ 11 ]

6 голосов
/ 19 августа 2010

Стандартный способ работы с такого рода сценариями - использование метода .Sync объектов Page (или в некоторых случаях Browser).

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

Эта проблема, по-видимому, связана в основном с приложениями Web 2.0 (на основе AJAX).Соединение веб-страницы с сервером обычно закрывается гораздо раньше, чем асинхронное соединение, открываемое сценарием Java.

Если есть визуальное руководство, указывающее, что эта страница все еще загружается, вы можете написать цикл и проверить этот объект.Как только объект исчезнет, ​​вы можете возобновить выполнение теста.

Чтобы сэкономить на написании этого кода в любом месте, где вам нужно синхронизировать, вы можете переписать собственный метод QTP своей собственной версией со следующим кодом:

RegisterUserFunc "Page", "Sync", "SyncToPage"
Function SyncToPage(oPage)
    'Call native function first'
    oPage.Sync

    'Custom sync code'

End Function

Спасибо, Мацей

2 голосов
/ 19 августа 2010

Функциональность синхронизации - это то, что вам нужно.Вы можете использовать его различными способами, например:

  • Для загрузки веб-страницы.
  • Чтобы кнопка была включена или отключена.
  • Для завершения взаимодействия клиент-сервер.

Подумайте о том, что происходит в графическом интерфейсе, чтобы показать вамчто операция завершена.Этот конкретный объект и / или свойство - это то, что вы хотите синхронизировать.

http://qtp.blogspot.com/2007/09/qtp-sync-wait-and-synchronization.html

Другие варианты включают использование команд WaitProperty и Exist для синхронизации скрипта с приложением.

http://www.sqaforums.com/showflat.php?Number=555273

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

1 голос
/ 18 декабря 2011

Метод WaitProperty - лучшее решение для этого сценария.

Ожидает, пока указанное свойство объекта не достигнет указанного значения или не превысит указанное время ожидания, прежде чем перейти к следующему шагу.

Возвращаемое значение: логическое значение. Возвращает TRUE, если свойство достигает значения, и FALSE, если тайм-аут достигнут до того, как свойство достигает значения. Возвращаемое значение FALSE не указывает на неудачный шаг.

0 голосов
/ 13 июня 2017

Вы можете использовать из этих 4 свойств:

  1. Подождите - здесь также вы можете указать желаемое время, которое вы хотите.
    Ex - wait 0,500
  2. Sync - будет ожидать обновления страницы.
    Например - browser.page.sync() или browser.page.sync(30)
  3. Свойство Wait - Вы можете указать время ожидания вручную.
    Экс - подождите 25 секунд:
    browser.page.WaitProperty "text", "Simple Interest",25000
  4. Exist - Проверяет, присутствует ли объект в течение требуемого времени.
    Ex - browser.page.exist(30)
0 голосов
/ 14 февраля 2017
'Set here the timeout so that the code doesn't stuck here (infinite loop)
var_timeout = 60 

x=0
do
  x=x+1
loop until Browser("Browser").Page("Page").WinElement("Message").Exist(1) or x>var_timeout

После того, как вы определили объект, который изменяется в вашем приложении, после нажатия определенной кнопки, как, например, после нажатия кнопки Сохранить, приложение возвращает сообщение, вы можете поместить объект с помощью оператора Exist (1).

Параметр «1» объекта представляет время, в которое элемент должен быть проверен, ниже, чем это не будет работать всегда (я говорю это из опыта), и выше, не желательно.

ЭтоФрагмент, который я использую очень часто, и у меня хорошие результаты, и я думаю, что он будет соответствовать вашим потребностям.

Если у объекта нет метода Exist, попробуйте .Object.isDisabled или .Object.(проверьте, что здесь показывает автозаполнение), например, Браузер ("Браузер"). Страница ("Страница"). WinElement ("Сообщение"). Object.isDisabled, где "Объект" - это метод, который пытается использовать собственные методы объекта.

Обратите внимание, что UFT используется для автоматического функционального тестирования, и проверка объекта займет некоторое время (несколько миллисекунд).Таким образом, объект появляется, и QTP требуется несколько миллисекунд или больше, чтобы увидеть, что он существует или что свойство объекта изменило значение.

0 голосов
/ 01 декабря 2015

Добавить синхронизацию к ожидаемому объекту следующей страницы.

Например, если следующим браузером и страницей будет «Страница 1», строка будет иметь вид:

Browser("Page 1").Page("Page 1").sync

Или если выне уверен, какая страница придет, просто используйте

Browser("title:=.*").Page("title:=.*").sync

Над строкой следует проверить любой браузер и следующую страницу (при условии, что в это время открыт только один браузер).

Если вы хотитечтобы углубиться и проверить следующие элементы Html Properties, вы можете использовать метод .Object любого объекта и проверить его свойства HTML, такие как css и т. д.

0 голосов
/ 21 января 2014

Привет, я надеюсь, что это может помочь.Здесь сначала проверяется наличие объекта (webelement), а затем проверяется, отключен ли он, а затем вызывается синхронизация, так что будет лучше использовать его для ожидания.Спасибо, вы можете использовать все виды веб-элементов управления.

Set NavigationTab = Browser ().Page().WebElement()
PerformWait ( 10 , 10 , NavigationTab )


Function PerformWait ( intDisableTime , intDelay , object )

if CheckExist ( intDelay , object ) Then

    if ValidateDisabled ( object , intDisableTime ) Then

        object.Sync
        Reporter.ReportEvent 0 , "Element is ready to use" , "The  specified element is ready to use" & Date & Time


    Else

       Reporter.ReportEvent 3 , "Object Disabled." , "Object remains disabled after specified time : " & refDisableTime & Date & Time   

    End If

Else

    Reporter.ReportEvent 3 , "Element not present." , "The specified element not present : " & Date & Time

End If

End Function

Function CheckExist ( intDelay , object )

object.RefreshObject

' -- validating the object is exist or not.
If object.Exist ( intDelay ) Then

    CheckExist = True

Else

    CheckExist = False

End If

End Function


Function ValidateDisabled ( object , intDisableTime )


For Iterator = 1 To intDisableTime Step 1

    ' -- validating the object is disabled or not.
    If object.GetROProperty ( "disabled" ) = 1 Then

        wait 1  
        ValidateDisabled = False

    Else

        ValidateDisabled = True
        Exit For    

    End If

    Iterator = Iterator + 1
Next

End Function
0 голосов
/ 07 августа 2013

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

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

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

Пример кода:

Dim blnPageElementReady, intmaxRetryAttempts, x

blnPageElementReady = False
intMaxRetryAttempts = 10
x = 0

Do Until (blnPageElementReady = True OR intMaxRetryAttempts = x) 

    If Browser("b").Page("p").WebElement("SomeValue").Exist Then
        blnPageElementReady = True
    End If
    x = x + 1

Loop

If intMaxRetryAttempts = x Then
'   Exit Test code goes here.....
End If

' continue with test on page:

Browser("Home_2").Page("Home").WebEdit("ctl00$uxMNJDefaultContentPlace").Click 
Browser("Home_2").Page("Home").WebEdit("ctl00$uxMNJDefaultContentPlace").Set username 
Browser("Home_2").Page("Home").WebEdit("ctl00$uxMNJDefaultContentPlace_2").Click 

0 голосов
/ 31 июля 2013
  • добавить эту функцию в вашу библиотеку
  • используйте эту функцию после нажатия
  • это функция ожидания, чтобы завершить загрузку браузера (IE) и выполнить запись

например

  • Браузер (). Страница (). Ссылку (). Нажмите ()

  • Браузер (). Синхронизация

это отличная функция

наслаждаться

            Public Sub Synchronize (ByVal objObject)

                '------------------------------------------------------             
                    Dim Counter
                    Counter = 0
                '------------------------------------------------------     

                    If objObject.Exist(1) Then
                        '------------------------------------------------------     
                            ' Clear Error if any ...
                            Err.Clear
                            On Error Resume Next

                            ' Browser sync ...
                            objObject.Sync

                        '------------------------------------------------------             
                            If Err.Number <> 0 Then
                                While (Err.Number <> 0 and Counter <= 100)
                                    Err.Clear
                                    On Error Resume Next
                                    objObject.Sync
                                    Counter = Counter + 1
                                wend
                            End If
                        '------------------------------------------------------     
                    Else
                        'QTPGenerateReporter "Check Browser - Synchronize Function", "Should Exist", "Does not Exist", "Fail", "-"
                    End If

            End Sub

            RegisterUserFunc "Browser", "Synchronize", "Synchronize"
            RegisterUserFunc "Page", "Synchronize", "Synchronize"
        '================================================================================================================
0 голосов
/ 28 марта 2012

'' Используйте эту функцию везде, где вы хотите дождаться готовности объекта

Public Function WaitforObject(ByRef objRef, intWaitSecs)

  WaitforObject= False

  blnFlag= False
  intCount=1
  If ISObject(objRef) Then
    For iWaitSecs = 1 to intWaitSecs
        blnFlag = objRef.Exist(1)
        If blnFlag Then                         
            Do While (LCase(Trim(objRef.getROProperty("attribute/readyState")))<>"complete") or (Trim(objRef.getROProperty("attribute/readyState"))<>"4" )
                If intCount= intWaitSecs Then
                    WaitforObject = True
                    Exit Do
                End If
                intCount=intCount+1
            Loop
            Exit For
        End If           
    Next
     If Not blnFlag Then
            wait 2
            WaitforObject = True
    End If

  End If  

End Function
...