QTP 10 - функция возвращает разные результаты для одних и тех же данных в режимах выполнения и отладки - PullRequest
1 голос
/ 02 июня 2010

Буду очень признателен, если кто-нибудь сможет предложить решение для этого.

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

Цель функции - получить индекс учетной записи с продуктами (первым найти) или -1, если таковых нет.

Проблема, которую я не могу понять, что является причиной этого, состоит в том, что функция вернет правильный результат, когда я отлаживаю его, то есть пошагово запускаю код с использованием F10, но вернет неправильный результат если я буду бегать регулярно (F5). Такое поведение является последовательным, и функция извлекает один и тот же результат каждый раз для каждого типа прогонов, что означает, что это не ошибка, а просто функция возвращает случайный ответ.

Это функция:

' @return: a random account index with products if one exists
' otherwise returns -1
Public Function getRandomAccountWithProducts()
    On Error Resume Next


    Set Page1 = Browser("micclass:=browser").Page("micclass:=Page") 
    Set br = Browser("micclass:=Browser")   

    originalURL = br.GetROProperty("URL")

    br.Navigate Environment.Value("SOME URL") & "REST OF URL"
    br.Sync 


    Page1.WebList("name:=accountId").Select "#1"
    br.Sync 

    ' Display only products
    Page1.WebRadioGroup("name:=name0").Click
    Page1.WebList("name:=name1").Select "Display None"
    Page1.WebList("name:=name2").Select "Display None"
    Page1.WebButton("value:=Apply","visible:=True").Click

    ' Init
    numOfAccounts = Page1.WebList("name:=accountId").GetROProperty("items count") - 1

    If numOfAccounts < 1 Then
        getRandomAccountWithProducts = -1
        Reporter.ReportEvent micFail, "Number of accounts","There are no accounts. No account with products exists"
        Exit Function
    End If

    hasProducts = false
    accountIndex = 1

    ' Get account with products
    While ((Not hasProducts) AND (accountIndex =< numOfAccounts))

        ' Return account if has products
        If Page1.WebList("name:=webListName","index:=0","micclass:=WebList","visible:=True").Exist(5) Then
            hasProducts = true
        End If

        If (Not hasProducts) Then                                   
            accountIndex = accountIndex + 1
            Page1.WebList("name:=accountId").Select "#" & accountIndex              
        End If
    Wend

    br.Navigate originalURL

    Set Page1= Nothing
    Set br = Nothing

    ' If no account has products, report and exit, else return selected account index
    If Not hasProducts Then
        Reporter.ReportEvent micFail,"Accounts","No account has products."
        getRandomAccountWithProducts = -1
    Else 
        getRandomAccountWithProducts = accountIndex
    End If



    If  Err<>0 Then
        errorMessage =  "Error number: " & Err.Number & vbNewLine & "Error description: " & Err.Description & vbNewLine & "Error source: " & Err.Source
        Reporter.ReportEvent micFail,"Run Time Error",errorMessage
        Err.Clear
    End If

    On Error GoTo 0
End Function

Я работаю на Pentium 4, 3,2 ГГц, 2 ГБ ОЗУ, Win XP, SP 3, IE 7, QTP 10.0 Build 513

Спасибо!

Ответы [ 2 ]

0 голосов
/ 02 июня 2010

Решение было найдено благодаря Джонти,

Проблема была в следующем разделе:

  ' Get account with products

    While ((Not hasProducts) AND (accountIndex =< numOfAccounts))

        ' Return account if has products
        If Page1.WebList("name:=webListName","index:=0","micclass:=WebList","visible:=True").Exist(5) Then
            hasProducts = true
        End If

        If (Not hasProducts) Then                                   
            accountIndex = accountIndex + 1
            Page1.WebList("name:=accountId").Select "#" & accountIndex              
        End If
    Wend

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

Нет, здесь кроется проблема. Метод выбора вызвал обновление страницы и условие Page1.WebList("name:=webListName","index:=0","micclass:=WebList","visible:=True").Exist(5) был оценен до загрузки веб-списка, таким образом, возвращая ложь.

Я рассмотрел этот вариант, но я подумал (очевидно, ошибочно), что Exist (5) должен добиться цели, но, похоже, он работает не так, как ожидалось.

Спасибо

Alon

0 голосов
/ 02 июня 2010

Рассматривали ли вы использование свойства all items ?

AllItems = Page1.WebList("name:=accountId").GetROProperty("all items")
SplitItems = Split(AllItems, ";")
Found = False
For i = 0 To UBound(AllItems)
    If AllItems(i) = "<product>" Then
        Found = True 
        Exit For
    End If
Next
...