Question

Je construis un script pour tester la fonctionnalité de la carte-cadeau sur une série de sites ECOM et frapper un problème frustrant dans lequel UFT dira que le nombre plus petit est supérieur au nombre plus important. Le script s'ouvre et ferme le navigateur entre les itérations et tire l'URL du site d'une nouvelle ligne dans le jeu de données. Il fonctionne jusqu'au point d'évaluer si le solde de la carte est supérieur au total. Voici le code que j'ai des problèmes avec:

vTotal=Browser("GLOBAL").Page("CHECKOUT_BILLING").WebElement("order-total").WebElement("Total").getroproperty("value")
for vt=1 to len(vTotal)
d=mid(vTotal,vt,1)
if isnumeric(d) then 
b=b&d
end if 
next

vGCBalance=Browser("GLOBAL").Page("CHECKOUT_BILLING").WebElement("GC_BALANCE").getroproperty("value")
for vg=1 to len(vGCBalance)
c=mid(vGCBalance,vg,1)
if isnumeric(c) then 
a=a&c
end if 
next
wait 3
If ( a) > ( b) = True Then
    msgbox ( a)&" Is Greater Than "&( b)
else
    msgbox ( b)&" Is Greater Than "&( a)
End If

J'ai essayé plusieurs façons de définir des valeurs pour "A" et "B". Cela inclut l'identification du total du panier et de la balance GC à l'aide de la programmation descriptive. J'ai également utilisé des lignes REGEGEXP pour séparer les numéros de la chaîne produite par le gettroproperty. J'ai même essayé d'écrire les valeurs sur le type de données et que la comparaison lisait ces valeurs.

Dans tous les cas si je fais une msgbox pour A ou B indique les valeurs correctes. Je suis allé avec la méthode ci-dessus car elle renvoie les chiffres sans le point décimal.

Il semble que UFT utilise des réponses antérieures, si l'instruction de chaque site (peut-être la réponse de la première fois). Finalement, il dira que A> B quand A= 16 et B= 100 Est uft cache la réponse à la déclaration si alors la déclaration? Mon code est faux (j'apprends la programmation lorsque je construis mes scripts de test afin qu'il soit possible)?

Toute suggestion ou conseil serait génial! Merci, Robert

Était-ce utile?

La solution

Mon premier conseil est que vous comparez deux cordes, pas deux chiffres. L'opérateur "&" exécute la concaténation de la chaîne, de sorte que lorsque vous utilisez des instructions telles que "B= B & D" ou "A= A & C", vous construisez une chaîne de texte. Si A="16" et B="100", A est supérieur à une comparaison alphabétique de deux cordes car le second caractère d'un ("6") est grêle que le second caractère de B ("0").

Essayez de forcer une comparaison numérique à la place.

If CInt(a) > CInt(b) Then
    MsgBox a & " is greater than " & b
Else
    MsgBox b & " is greater than " & a
End If

Alternativement, vous pouvez forcer vos variables à être réévaluées comme des chiffres après avoir terminé vos chaînes.

a = CInt(a)
b = CInt(b)

Alors toutes les déclarations futures traiteraient celles comme des chiffres, pas des chaînes de texte.

sur une note non liée, je vous encourage à utiliser de meilleurs noms de variables qui signifient quelque chose. Les valeurs telles que "A", "B", "C" et "D" Aidez personne à lire votre code et à comprendre pourquoi une variable est différente d'une autre. Ne tenez pas compte si vous faites cela à cet effet pour cet extrait de code.

C'est aussi possible que votre code pourrait être grandement simplifié. Si les valeurs que vous lisez à partir de «getproproperty» ne sont que des valeurs décimales (sans caractères de devises), vous pouvez les convertir directement en types de double valeur et utiliser ceux à comparaison. Exemple

strTotal = Browser("GLOBAL").Page("CHECKOUT_BILLING").WebElement("order-total").WebElement("Total").getroproperty("value")
dblTotal = CDbl(strTotal)

strGCBalance = Browser("GLOBAL").Page("CHECKOUT_BILLING").WebElement("GC_BALANCE").getroproperty("value")
dblGCBalance = CDbl(strGCBalance)

If dblTotal > dblGCBalance Then
    MsgBox "Total '" & strTotal & "' is greater than GC Balance '" & strGCBalance & "'"
Else
    MsgBox "GC Balance '" & strGCBalance & "' is greater than or equal to Total '" & strTotal & "'"
End If

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top