Qtp UFT 11.53在评估a>;B

Qtp UFT 11.53在评估a>;B,qtp,hp-uft,Qtp,Hp Uft,我正在构建一个脚本,在一系列ecom网站上测试礼品卡功能,遇到了一个令人沮丧的问题,UFT会说较小的数字大于较大的数字。 脚本在迭代之间打开和关闭浏览器,并从datatable中的新行提取站点URL。如果卡的余额大于总余额,则它会一直工作到评估点。 以下是我遇到问题的代码: vTotal=Browser("GLOBAL").Page("CHECKOUT_BILLING").WebElement("order-total").WebElement("Total").getroproperty("v

我正在构建一个脚本,在一系列ecom网站上测试礼品卡功能,遇到了一个令人沮丧的问题,UFT会说较小的数字大于较大的数字。 脚本在迭代之间打开和关闭浏览器,并从datatable中的新行提取站点URL。如果卡的余额大于总余额,则它会一直工作到评估点。 以下是我遇到问题的代码:

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
我尝试了几种方法来设置“a”和“b”的值。这包括使用描述性编程识别购物车总额和GC余额。我还使用regEXP行将数字与GetROProperty生成的字符串分开。我甚至尝试将这些值写入数据表,并让比较读取这些值

在所有情况下,如果我为a或b执行msgbox,它将显示正确的值。我使用上面的方法,因为它返回的数字没有小数点

UFT似乎在为每个站点使用先前的答案IF-THEN语句(可能是第一次的答案)。最终,当a=16和b=100时,它会说a>b UFT是否缓存if-then语句的答案?我的代码错了吗(我正在学习编程,因为我在构建测试脚本,所以这是可能的)

任何建议都会很好! 谢谢
罗伯特我的第一个猜测是你在比较两个字符串,而不是两个数字。“&”运算符执行字符串连接,因此当您使用诸如“b=b&d”或“a=a&c”之类的语句时,您正在构建一个文本字符串。如果a=“16”和b=“100”,则通过两个字符串的字母比较,a大于be,因为a(“6”)中的第二个字符大于b(“0”)中的第二个字符

请尝试强制进行数字比较

If CInt(a) > CInt(b) Then
    MsgBox a & " is greater than " & b
Else
    MsgBox b & " is greater than " & a
End If
或者,在构建完字符串后,可以强制将变量重新计算为数字

a = CInt(a)
b = CInt(b)
然后,所有将来的语句都会将它们视为数字,而不是文本字符串

另一方面,我鼓励您使用更好的变量名,这意味着什么。像“a”、“b”、“c”和“d”这样的值不能帮助任何人阅读代码并理解为什么一个变量不同于另一个变量。如果您只是为了编写此代码段而这样做,请忽略

您的代码也有可能大大简化。如果从“GetROProperty”读取的值只是十进制值(没有货币字符),则可以直接将它们转换为双值类型,并将其用于比较。范例

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

谢谢你的回复。您建议使用CInt的建议成功了。其他代码建议也很感谢。我正在快速学习这些东西。在我找到工作之前,“a”、“b”、“c”和“d”都是占位符。我会记住,在寻求帮助之前,让别人说出这些名字更有用。再次感谢您的回复!