51Testing软件测试论坛
标题:
这段脚本为什么会报 类型不匹配 错误?
[打印本页]
作者:
testman
时间:
2008-7-9 14:36
标题:
这段脚本为什么会报 类型不匹配 错误?
Set firstobj = Description.Create()
Set twoobj = Description.Create()
twoobj("test").value = "in"
Msgbox twoobj("test") '可以正常运行
firstobj("test").value = twoobj("test")
Msgbox firstobj("test") '类型不匹配
作者:
陈能技
时间:
2008-7-9 15:18
把firstobj("test").value = twoobj("test")这句改成下面的试试:
firstobj("test").value = twoobj("test").value
推荐新书《QTP自动化测试实践》。
作者:
testman
时间:
2008-7-9 17:26
谢谢 陈老师的答疑。
firstobj("test").value = twoobj("test").value肯定能够通过,我自己也试过。
或者把Msgbox firstobj("test") 改成:Msgbox firstobj("test").value也是可以的。
我的问题具体一点:为什么会报这个错误?
Msgbox twoobj("test") 可以显示twoobj("test").value 的值;为什么firstobj("test")不可以显示firstobj("test").value 的值?
作者:
testman
时间:
2008-7-9 17:39
我现在的想法是:firstobj("test").value = twoobj("test")这句并不是把twoobj("test").value的值"in"赋值给了firstobj("test").value。但是,如果是这样的化,为什么Msgbox twoobj("test") 可以提示twoobj("test").value的值"in"?
Msgbox twoobj("test") 和firstobj("test").value = twoobj("test")这两句中是不是twoobj("test")是不是有不同的意义?
作者:
假装不在
时间:
2008-7-9 17:41
你可以设置断点在
Msgbox firstobj("test") 这一步。走到这一步停止后,你可以在QTP的Dbug View中分别输入:
twoobj("test") <Object>
twoobj("test").value in
firstobj("test") <Object>
firstobj("test").value <Object>
然后分别看看他们这三个,在走完“firstobj("test").value = twoobj("test")”这步后,他们的对象类型分别是什么.这样可以帮助我们去了解它里面的传递过程。
到这里,我们就可以清楚看到了一个问题:
firstobj("test").value 被赋予的值是一个对象,所以,msgbox 一个对象自然会抛错了。
作者:
假装不在
时间:
2008-7-9 17:43
firstobj("test").value = twoobj("test")
你这一步,其实是把twoobj("test")这个OBJ赋给了firstobj("test").value
作者:
陈能技
时间:
2008-7-9 17:46
嗯,解释得很清楚!
作者:
testman
时间:
2008-7-9 18:21
谢谢 假装不在!
不仅解答了问题,更重要的是提供了一种思路,和方法。很受益~~
Msgbox twoobj("test")
twoobj("test") 传给 Msgbox 的值为twoobj("test").value的值"in"
firstobj("test").value = twoobj("test")
twoobj("test") 传给 firstobj("test").value 的值为自身对象的引用
那么,twoobj("test")的值为什么有时是twoobj("test").value的值,有时是自身对象的引用?
作者:
假装不在
时间:
2008-7-9 19:59
DataTable.Value(ParameterID [, SheetID])
DataTable(ParameterID [, SheetID])
这2个语句是相等的。
这个就和上边的两个语句一样的,有它自己的默认值。如果你没写下去的话。
哪么,在你这个firstobj("test").value = twoobj("test"),为什么传递的不是它的默认value呢?其实在这里我个人觉得,它默认的值变成了twoobj("test").object
作者:
testman
时间:
2008-7-10 10:35
谢谢 假装不在 和 陈能技 的关注和解答!!
经过分析,现在将总结和大家分享一下:
1,twoobj("test")本身为一个对象。twoobj("test")可以表示其值,也可以表示其自身引用,它和twoobj("test").value就像C语言中的指针和值的关系。对于twoobj("test")这样的对象,系统会自动根据上下文判断是取其值,还是取其自身引用。例如:MsgBox twoobj("test") ,或者twoobj("test")&"out"时,系统自动取其值,而不是自身引用。
2,对firstobj("test").value进行赋值时,其赋值对象可以是简单数据类型,如:字符串,整数等,也可以是对象引用。如果赋值对象为twoobj("test"),系统会自动将twoobj("test")的引用赋值给对firstobj("test").value。
欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/)
Powered by Discuz! X3.2