0

我正在构建一个脚本来测试一系列电子商务网站上的礼品卡功能,并且遇到了一个令人沮丧的问题,即 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 when a=16 and b=100 UFT 是否缓存了 if then 语句的答案?我的代码错了吗(我在构建测试脚本时正在学习编程,所以有可能)?

任何建议或建议都会很棒!谢谢,罗伯特

4

1 回答 1

1

我的第一个猜测是您正在比较两个字符串,而不是两个数字。“&”运算符执行字符串连接,因此当您使用“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”读取的值只是十进制值(没有货币字符),您可以将它们直接转换为 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
于 2014-07-31T17:27:00.617 回答