ham301 发表于 2008-4-25 17:12:45

一个VBS脚本调用另一个VBS脚本

写一个脚本列如
    dim str
   str="asfasfasdfasdf"
   call sub_output(str)
   public sub sub_output(str)
       MsgBox(str)
   end sub
保存,"E\aaa.vbs"
打开另一个脚本,
set a=createobject("wscript.shell")
a.run "E\aaa.vbs"
运行这个脚本就可以输出"asfasfasdfasdf"

现在,我想知道:
假如写一个脚本列如
   public sub sub_output(str)
       MsgBox(str)
   end sub
保存,"E\aaa.vbs"
当然也可以写成一个类
class classA
   public sub sub_output(str)
       MsgBox(str)
   end sub
end class

怎么才能实现在另一个脚本里调用它,比如这样
set a=new classA
str1="asdfasf"
a.sub_output(str1)
在vbs里面可以实现吗,怎么实现?请解答!
(网上没找到,寄希望于此了)

假装不在 发表于 2008-4-25 17:50:20

:(
如果你想写成一个类的方法,那么你必须先把这个VBS加载进QTP中。
加载有很多种方法。

ham301 发表于 2008-4-25 18:12:28

原帖由 假装不在 于 2008-4-25 17:50 发表 http://bbs.51testing.com/images/common/back.gif
:(
如果你想写成一个类的方法,那么你必须先把这个VBS加载进QTP中。
加载有很多种方法。
你没有明白我的意思.我的意思就是一个VBS脚本调用另一个VBS脚本.不是在QTP里调用VBS脚本.
我知道可以写一些共通的功能函数,在TestSetting的Resources里载入,那么在QTP里录制脚本的时候就可以直接调用了.
我的意思就是:
   像C或C++里面那样,#include "XXXXXXXXX"
那么在当前的代码里面就可以调用XXXXXXXXX里的东西了.在VBS里面可不可以这样调用?
用 set a=createobject("wscript.shell")
a.run "XXXX.vbs"
这不是调用,这是运行XXXX.vbs,这样根本无法实现值的传递的(除非先将值写入文件,再在被运行脚本里读文件)

walker1020 发表于 2008-4-25 23:10:23

为什么需要两个VBS文件? 把所有的内容都写在一个 VBS文件里面不就好了?

hsjzfling 发表于 2008-4-26 02:02:23

原帖由 walker1020 于 2008-4-25 23:10 发表 http://bbs.51testing.com/images/common/back.gif
为什么需要两个VBS文件? 把所有的内容都写在一个 VBS文件里面不就好了?

就像为什么要多个Action,多个Test一样~

假装不在 发表于 2008-4-26 02:54:21

原帖由 ham301 于 2008-4-25 18:12 发表 http://bbs.51testing.com/images/common/back.gif

你没有明白我的意思.我的意思就是一个VBS脚本调用另一个VBS脚本.不是在QTP里调用VBS脚本.
我知道可以写一些共通的功能函数,在TestSetting的Resources里载入,那么在QTP里录制脚本的时候就可以直接调用了.
我的意思 ...


不是我没明白,是你没明白。
我说的多种加载方法,它包含了前台加载和语句的加载方法,前台加载的和你说的一样,如果函数加载的,可以这么写:
ExecuteFile ".....vbs"
放心的用吧。这种方法,建议每次函数调用别太多,因为他都会去编译它,虽然写错了也不会报错(不和直接加载一样,会先编译一次。),但如果函数量太多,它就会停在那里数秒不动。到了工程后期,这个东西停在那里会直到超时。谢谢。:(

hsjzfling 发表于 2008-4-26 11:01:39

原帖由 假装不在 于 2008-4-26 02:54 发表 http://bbs.51testing.com/images/common/back.gif



不是我没明白,是你没明白。
我说的多种加载方法,它包含了前台加载和语句的加载方法,前台加载的和你说的一样,如果函数加载的,可以这么写:
ExecuteFile ".....vbs"
放心的用吧。这种方法,建议每次函数 ...

还是你没明白。。。
VBS中是没有ExecuteFile函数的,这个是QTP定义的函数,只能通过QTP来运行。
LZ要问的是在不运行QTP的时候,如何在一个VBS中"Include"另一个VBS文件

PS:事实上,前天我也问了不少朋友这个问题未果,不料昨天也有人提问相同的问题。。。相信肯定有解决方法,就像QTP提供的ExecuteFile~~

假装不在 发表于 2008-4-26 11:38:10

:(
这么说,这个函数也只是在QTP中运行才有效?
但我是写了一个VBS在负责管理和导入所有函数的。因此每次只要写导入这条,其他函数就都可以用了。
我觉得楼主在QTP板块问的,应该是在QTP运行时候的。哈哈

ham301 发表于 2008-4-26 13:50:28

原帖由 walker1020 于 2008-4-25 23:10 发表 http://bbs.51testing.com/images/common/back.gif
为什么需要两个VBS文件? 把所有的内容都写在一个 VBS文件里面不就好了?
如果在一个VBS里面写个好几百行,那看起来就行不方便。要是能够按功能之类的划分,再在文件之间调用,那看起来就比较清晰了。

假装不在 发表于 2008-4-26 17:02:03

:( 我说哪么多,你还没说谢谢呢。

ham301 发表于 2008-4-26 18:20:39

原帖由 假装不在 于 2008-4-26 17:02 发表 http://bbs.51testing.com/images/common/back.gif
:( 我说哪么多,你还没说谢谢呢。
可是我的问题还没有解决啊。
我送了你一朵小花没看到吗,太伤心了

hsjzfling 发表于 2008-4-26 20:01:09

原帖由 ham301 于 2008-4-26 18:20 发表 http://bbs.51testing.com/images/common/back.gif

可是我的问题还没有解决啊。
我送了你一朵小花没看到吗,太伤心了

偏心啊~~:@

假装不在 发表于 2008-4-27 16:40:38

原帖由 hsjzfling 于 2008-4-26 20:01 发表 http://bbs.51testing.com/images/common/back.gif


偏心啊~~:@


羡慕不来D

陈能技 发表于 2008-4-27 18:09:13

看来需要写成WSC,例如:
<?xml version="1.0"?>
<component>

<?component error="true" debug="true"?>
<reference object="Scripting.Dictionary" />
<registration description="Functions" progid="MyProg" version="1.00" classid="{d7c40957-00d4-41a5-a87b-89d1db311425}">
</registration>

<public>
<property name="pID" get = "GetID" put = "SetID"/>
<method name="SetID" internalName="SetID" dispid="0">
        <parameter name="sValue"/>
</method>
<method name="GetID">
</method>
<method name="PrintMessage">
        <parameter name="strMessage"/>
</method>
</public>

<script language = "VBScript">
<![CDATA[
        Dim pID
        Function GetID()
                GetID = pID
        End Function
        Function SetID(sValue)
                pID = sValue
        End Function
        Function PrintMessage(strMessage)
                Msgbox strMessage
        End Function
        ]]>
</script>

</component>

保存成WSC文件,例如WSCTest1.wsc,然后右键选择文件,注册后就可在另外一个VBS文件中用如下方式访问其中的类:
Set test=CreateObject("MyProg")
test.PrintMessage("Hello!")

ham301 发表于 2008-4-27 23:01:55

首先,谢谢,这样的确解决了。可是总觉的应该有比较简单直接的方法,上面只是在WSC中嵌入了VBscript脚本!

gy21st 发表于 2008-4-28 16:31:46

这里有一篇文章写得比较全面,可以参考一下。
http://hi.baidu.com/myvbscript/blog/item/3a100e17476e83014b90a7be.html

mstiunicon 发表于 2008-4-29 01:10:29

原帖由 gy21st 于 2008-4-28 16:31 发表 http://bbs.51testing.com/images/common/back.gif
这里有一篇文章写得比较全面,可以参考一下。
http://hi.baidu.com/myvbscript/blog/item/3a100e17476e83014b90a7be.html

之前找了很久vbs文件互相调用的方法,都没找到。到后来还是使用了QTP的ExecuteFile函数才解决的。看了这个帖子后,才发现原来有这么多方式。

hsjzfling 发表于 2008-4-29 10:00:11

相当不错,学习了~~:)

heqingbluesky 发表于 2008-4-29 11:01:11

看来除了ExecuteFile函数后,还有另外一个方式调用VBS file,学习了。

zitong 发表于 2008-5-5 14:35:18

恩,学习到非常有用的东西,非常感谢!
页: [1] 2
查看完整版本: 一个VBS脚本调用另一个VBS脚本