51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 14209|回复: 34
打印 上一主题 下一主题

[原创] 一个VBS脚本调用另一个VBS脚本

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2008-4-25 17:12:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
写一个脚本列如
    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里面可以实现吗,怎么实现?请解答!
(网上没找到,寄希望于此了)
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2008-4-25 17:50:20 | 只看该作者

如果你想写成一个类的方法,那么你必须先把这个VBS加载进QTP中。
加载有很多种方法。
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2008-4-25 18:12:28 | 只看该作者
原帖由 假装不在 于 2008-4-25 17:50 发表

如果你想写成一个类的方法,那么你必须先把这个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,这样根本无法实现值的传递的(除非先将值写入文件,再在被运行脚本里读文件)
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2016-2-27 08:48
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    4#
    发表于 2008-4-25 23:10:23 | 只看该作者
    为什么需要两个VBS文件? 把所有的内容都写在一个 VBS文件里面不就好了?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5#
    发表于 2008-4-26 02:02:23 | 只看该作者
    原帖由 walker1020 于 2008-4-25 23:10 发表
    为什么需要两个VBS文件? 把所有的内容都写在一个 VBS文件里面不就好了?


    就像为什么要多个Action,多个Test一样~
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    6#
    发表于 2008-4-26 02:54:21 | 只看该作者
    原帖由 ham301 于 2008-4-25 18:12 发表

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



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

    使用道具 举报

    该用户从未签到

    7#
    发表于 2008-4-26 11:01:39 | 只看该作者
    原帖由 假装不在 于 2008-4-26 02:54 发表



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


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

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

    使用道具 举报

    该用户从未签到

    8#
    发表于 2008-4-26 11:38:10 | 只看该作者

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

    使用道具 举报

    该用户从未签到

    9#
     楼主| 发表于 2008-4-26 13:50:28 | 只看该作者
    原帖由 walker1020 于 2008-4-25 23:10 发表
    为什么需要两个VBS文件? 把所有的内容都写在一个 VBS文件里面不就好了?

    如果在一个VBS里面写个好几百行,那看起来就行不方便。要是能够按功能之类的划分,再在文件之间调用,那看起来就比较清晰了。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10#
    发表于 2008-4-26 17:02:03 | 只看该作者
    我说哪么多,你还没说谢谢呢。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    11#
     楼主| 发表于 2008-4-26 18:20:39 | 只看该作者
    原帖由 假装不在 于 2008-4-26 17:02 发表
    我说哪么多,你还没说谢谢呢。

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

    使用道具 举报

    该用户从未签到

    12#
    发表于 2008-4-26 20:01:09 | 只看该作者
    原帖由 ham301 于 2008-4-26 18:20 发表

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


    偏心啊~~
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13#
    发表于 2008-4-27 16:40:38 | 只看该作者
    原帖由 hsjzfling 于 2008-4-26 20:01 发表


    偏心啊~~



    羡慕不来D
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    14#
    发表于 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!")
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    15#
     楼主| 发表于 2008-4-27 23:01:55 | 只看该作者
    首先,谢谢,这样的确解决了。可是总觉的应该有比较简单直接的方法,上面只是在WSC中嵌入了VBscript脚本!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    16#
    发表于 2008-4-28 16:31:46 | 只看该作者
    这里有一篇文章写得比较全面,可以参考一下。
    http://hi.baidu.com/myvbscript/b ... 6e83014b90a7be.html
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    17#
    发表于 2008-4-29 01:10:29 | 只看该作者
    原帖由 gy21st 于 2008-4-28 16:31 发表
    这里有一篇文章写得比较全面,可以参考一下。
    http://hi.baidu.com/myvbscript/b ... 6e83014b90a7be.html


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

    使用道具 举报

    该用户从未签到

    18#
    发表于 2008-4-29 10:00:11 | 只看该作者
    相当不错,学习了~~
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    19#
    发表于 2008-4-29 11:01:11 | 只看该作者
    看来除了ExecuteFile函数后,还有另外一个方式调用VBS file,学习了。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    20#
    发表于 2008-5-5 14:35:18 | 只看该作者
    恩,学习到非常有用的东西,非常感谢!
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-9-23 13:22 , Processed in 0.081752 second(s), 27 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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