2010-06-02 2 views
1

Je serais extrêmement reconnaissant si quelqu'un pouvait proposer une solution pour cela.QTP 10 - Une fonction renvoie des résultats différents pour les mêmes données dans les modes d'exécution et de débogage

J'ai une fonction simple qui attend un navigateur pour être ouvert sur une page contenant une liste web que chaque valeur de celui-ci représente un compte. Lorsqu'un compte est sélectionné, ses produits (le cas échéant) sont affichés.

L'objectif des fonctions est de récupérer un index d'un compte avec des produits (le premier à trouver) ou -1 s'il n'y en a aucun. Le problème, dont je n'arrive pas à comprendre la cause, est que la fonction retournera le bon résultat quand je la déboguerai - ce qui signifie exécuter le code pas à pas en utilisant F10, mais retournera un mauvais résultat si je vais courir régulièrement (F5). Ce comportement est cohérent et la fonction récupère le même résultat à chaque fois pour chaque type d'exécution, ce qui signifie que ce n'est pas un bogue qui fait que la fonction renvoie une réponse aléatoire.

C'est la fonction:

' @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 

Je suis en cours d'exécution sur le Pentium 4, 3,2 GHz, 2 Go de RAM, Win XP, SP 3, IE 7, QTP 10.0 Build 513

Merci!

Répondre

0

Avez-vous envisagé d'utiliser la propriété tous les articles?

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 
+0

Merci pour votre réponse. Je suis désolé mais il semble que je n'étais pas totalement clair à ce que le problème semble être. En fait, la propriété "nombre d'éléments" fonctionne correctement et j'obtiens le nombre correct. La partie problématique semble être: 'Retour du compte si a des produits Si Page1.WebList ("name: = nomListeWeb", "index: = 0", "micclass: = WebList", "visible: = True") .Existe (5) Puis hasProducts = true Fin Si –

+0

La question est ce qui fait la différence? Comme vous pouvez le voir, j'ai ajouté une attente pour l'existence mais sans amélioration. Merci, Alon –

+0

@Alon, La chose qui pourrait faire la différence est que lorsque vous êtes en mode débogage, le focus passe à QTP à chaque étape et ne reste pas sur le navigateur. – Motti

0

solution a été trouvée grâce à Jonty,

Le problème était dans la section suivante:

' 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 

La première fois entré dans la boucle, le compte ne vraiment pas encore de produits , de toute évidence, personne n'a été reconnu. Ainsi, accountIndex a été augmenté de un et le compte correspondant a été sélectionné dans la liste Web.

Non, c'est là que réside le problème. La méthode select a provoqué un rafraîchissement dans la page et la condition Page1.WebList("name:=webListName","index:=0","micclass:=WebList","visible:=True").Exist(5) a été évaluée avant que la liste Web ait été chargée ainsi, renvoyant false.

J'ai considéré cette option, mais j'ai pensé (à tort, apparemment) que l'Exist (5) devrait faire l'affaire, mais il semble que cela fonctionne différemment que prévu.

Merci,

Alon

Questions connexes