假装不在 发表于 2008-9-23 17:14:48

环境变量

首先给大家看看下边这张图,
看完后,你初始一瞄,发现,哇,不可能,怎么P=22,Environment.Value ("menu_now")=21但为什么p>=Environment.Value ("menu_now")为 false呢?

大家看仔细点,在Environment.Value ("menu_now")的返回值中,是有多了个双引号!这个其实一个字符串来的,所以永远无论怎么变,p>=Environment.Value ("menu_now")永远为false。

这个小小的问题,埋藏了3个月之久,脚本运行过程出现的种种奇怪现象的祸根竟然是一个如此小的误会。

ellven 发表于 2008-9-23 17:35:21

"21"是string型

rcpp 发表于 2008-9-23 17:40:37

所以说,安检还是很重要滴
if isnumeric(...) then
    ...
end if

hsjzfling 发表于 2008-9-23 19:01:52

原帖由 rcpp 于 2008-9-23 17:40 发表 http://bbs.51testing.com/images/common/back.gif
所以说,安检还是很重要滴
if isnumeric(...) then
    ...
end if

这种情况下用isnumeric没啥用处。。。VBS会很智能的在这里做类型转换的
If isnumeric("21") Then
msgbox "is numeric"
else
msgbox "is not numeric"
End If
你觉得结果应该是啥呢~~

此外,VBS还会把Currency类型的值也认为是numeric,比如(在默认的美式Currency系统中)
If isnumeric("21,100") Then
msgbox "is numeric"
else
msgbox "is not numeric"
End If
执行下看看结果咯~

rcpp 发表于 2008-9-24 09:41:39

oh god,看来我对vbs的了解还是不够多啊
vbs能够强制类型转换吧?转换了再判断吧

还好以后不必陪测试人员写脚本了,不然写错了vbs还要被抱怨~

heqingbluesky 发表于 2008-9-24 15:28:20

因为VBS把所有默认的变量类型都是Variable,不是我们常说的Integer,String,Double……,所以当你要比较的不同类型的变量时候,一定要保证变量的类型一直。下面的结果就是正确的:
Dim q

q=22
Msgbox Environment.Value("Test_Value") 'Test_Value=21

If q>CInt(Environment.Value("Test_Value")) Then
        Msgbox "True"
        Else
        Msgbox "False"
End If

所以说VBS是一种弱语言,没有VB这么好用了。这个估计要QTP的不断升级才能检测得到。

hsjzfling 发表于 2008-9-24 15:51:01

知道VBS的这个弱类型特性了,要改进的就是编程习惯了~:lol

假装不在 发表于 2008-9-24 15:55:52

:lol 这个也是忽列这点,昨天才发现的问题,看来温故可以找到新BUG
页: [1]
查看完整版本: 环境变量