51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2957|回复: 9
打印 上一主题 下一主题

[原创] 这段脚本为什么会报 类型不匹配 错误?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2008-7-9 14:36:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Set  firstobj = Description.Create()
Set  twoobj =  Description.Create()
twoobj("test").value = "in"      
Msgbox twoobj("test")                                          '可以正常运行
firstobj("test").value = twoobj("test")
Msgbox firstobj("test")                                              '类型不匹配
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2008-7-9 15:18:28 | 只看该作者
把firstobj("test").value = twoobj("test")这句改成下面的试试:
firstobj("test").value = twoobj("test").value


推荐新书《QTP自动化测试实践》。
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2008-7-9 17:26: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 的值?
回复 支持 反对

使用道具 举报

该用户从未签到

4#
 楼主| 发表于 2008-7-9 17:39:08 | 只看该作者
我现在的想法是: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")是不是有不同的意义?
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2008-7-9 17:41:52 | 只看该作者

你可以设置断点在
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 一个对象自然会抛错了。
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2008-7-9 17:43:32 | 只看该作者
firstobj("test").value = twoobj("test")
你这一步,其实是把twoobj("test")这个OBJ赋给了firstobj("test").value
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2008-7-9 17:46:19 | 只看该作者
嗯,解释得很清楚!
回复 支持 反对

使用道具 举报

该用户从未签到

8#
 楼主| 发表于 2008-7-9 18:21:03 | 只看该作者
谢谢 假装不在!

不仅解答了问题,更重要的是提供了一种思路,和方法。很受益~~

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的值,有时是自身对象的引用?
回复 支持 反对

使用道具 举报

该用户从未签到

9#
发表于 2008-7-9 19:59:56 | 只看该作者
DataTable.Value(ParameterID [, SheetID])
DataTable(ParameterID [, SheetID])
这2个语句是相等的。
这个就和上边的两个语句一样的,有它自己的默认值。如果你没写下去的话。
哪么,在你这个firstobj("test").value = twoobj("test"),为什么传递的不是它的默认value呢?其实在这里我个人觉得,它默认的值变成了twoobj("test").object
回复 支持 反对

使用道具 举报

该用户从未签到

10#
 楼主| 发表于 2008-7-10 10:35:15 | 只看该作者
谢谢 假装不在 和 陈能技 的关注和解答!!

经过分析,现在将总结和大家分享一下:

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。
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-26 04:21 , Processed in 0.066425 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表