我正在构建一个脚本来测试一系列ecom网站上的礼品卡功能,并且遇到一个令人沮丧的问题,即UFT会说较小的数字大于较大的数字。 该脚本在迭代之间打开和关闭浏览器,并从数据表中的新行中提取站点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> b当a = 16且b = 100时 UFT是否缓存了if then语句的答案?我的代码是错的(我正在学习编程,因为我构建了我的测试脚本以便它可能)?
任何建议或意见都会很棒! 谢谢, 罗伯特
答案 0 :(得分:1)
我的第一个猜测是你要比较两个字符串,而不是两个数字。 “&”运算符执行字符串连接,因此当您使用“b = b& d”或“a = a& c”之类的语句时,您正在构建一串文本。如果a =“16”且b =“100”则a大于来自两个字符串的字母比较的a,因为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'读取的值只是十进制值(没有货币字符),您可以将它们直接转换为Double值类型并使用它们进行比较。实施例
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