51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2880|回复: 13
打印 上一主题 下一主题

[原创] 求助,为啥执行这个模拟键盘代码老是提示缺少对象呢

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2013-1-7 13:54:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如图,请前辈指导,谢谢。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

  • TA的每日心情
    无聊
    2018-9-27 10:05
  • 签到天数: 36 天

    连续签到: 1 天

    [LV.5]测试团长

    2#
    发表于 2013-1-7 15:42:19 | 只看该作者
    回复 1# wyfyan


        如下
    1. Dim WshShell
    2. Set WshShell = CreateObject("WScript.Shell")
    3. WshShell.SendKeys "{ENTER}"       '按回车
    复制代码
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3#
     楼主| 发表于 2013-1-7 22:15:14 | 只看该作者
    回复 2# 黑羽祭

    谢谢斑竹孜孜不倦的教诲。

    我想知道,Set WshShell = CreateObject("WScript.Shell") 与 Set WshShell = WScript.CreateObject("WScript.Shell") ,这两句有什么区别啊?作用是什么?

    还有,如果我想用SendKeys模拟键盘的方法如何实现opennewtab的目的呀?

    再次致谢。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2018-9-27 10:05
  • 签到天数: 36 天

    连续签到: 1 天

    [LV.5]测试团长

    4#
    发表于 2013-1-8 09:16:05 | 只看该作者
    回复 3# wyfyan


        第一个问题,区别看写法就知道了,作用的话,我也说不清,反正新建个Wscript对象,我就是这么用的。
    第二个问题,你想新建一个IE的选项卡是么?如果要用SendKeys实现,就是实现按Ctrl+T,脚本写法就是点在IE上,然后WshShell.SendKeys "^T"

    http://www.51testing.com/index.php?uid-307440-action-viewspace-itemid-827982
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5#
    发表于 2013-1-8 11:11:17 | 只看该作者
    回复  黑羽祭

    谢谢斑竹孜孜不倦的教诲。

    我想知道,Set WshShell = CreateObject("WScript.Shell")  ...
    wyfyan 发表于 2013-1-7 22:15


    wscript是window脚本宿主的root对象。脚本宿主可以理解为脚本的运行环境。
    加wscript就是要使用windows的脚本运行环境,不加就是默认使用qtp的脚本运行环境。你在qtp里运行vbs当然是要使用qtp的运行环境了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    6#
     楼主| 发表于 2013-1-8 13:45:12 | 只看该作者
    回复 4# 黑羽祭


        第二个问题,我执行如下代码,为啥没有打开新的选项卡呀?
    Set WshShell = CreateObject("WScript.Shell")
    WshShell.Run "iexplore"
    wait 15
    WshShell.SendKeys "^T"
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    7#
     楼主| 发表于 2013-1-8 13:46:54 | 只看该作者
    回复 5# xjwldlover


        哦,若有所悟!谢谢高人指点!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8#
    发表于 2013-1-8 17:03:19 | 只看该作者
    QTP使用了VBScript编译器,但和VB还是不同的,QTP中的CreateObject是一个内置函数,返回结果是一个activex对象,QTP中没有WScript这个内置对象,所以你的脚本set s = WScript.CreateObject("WScript.Shell")报错,报的就是WScript这个对象不存在。

    在别的编译器中,内置了WScript对象,这个对象有一个CreateObject方法,所以在那个编译环境中可以这么写set s = WScript.CreateObject("WScript.Shell")。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    9#
     楼主| 发表于 2013-1-8 20:49:40 | 只看该作者
    回复 8# 泰然

    哦,是因为QTP中没有WScritp对象,所以报错。那CreateObject("WScript.Shell")为啥没有报错啊
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10#
    发表于 2013-1-9 09:18:14 | 只看该作者
    回复  泰然

    哦,是因为QTP中没有WScritp对象,所以报错。那CreateObject("WScript.Shell")为啥没有报错 ...
    wyfyan 发表于 2013-1-8 20:49


    这个追问问的好啊,忍不住先回答一下
    Wscript.CreateObject("WScript.Shell")    这两个Wscript是不一样的。
    第一个Wscript是脚本宿主(即windows)的内置对象,相当于直接运行windows的内置函数。你在QTP中直接使用wscript必然报错,因为QTP使用自己的运行环境替代了windows运行环境(绝大多数环境指的都是 运行环境+核心语言,核心语言是vbs它是不会变的,但是运行环境相关的东西却是会变的).
    第二个wscript是在windows上安装了脚本运行环境后,自动生成的com对象,vbs这一点和vb一样,是可以直接调用系统中已注册的对象的以及其子类型的,比如createObject("Excel.Application").
    总结一下两个wscript的本质区别,第一个是直接使用运行环境的内置对象,而第二个是通过com借口调用系统中已安装(或者说已加载的)的对象。是 拥有 和 借用 的区别。

    不知我这样说是否容易理解,如有错误请各位不吝指教~
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    11#
    发表于 2013-1-9 11:41:00 | 只看该作者
    那CreateObject("WScript.Shell")为啥没有报错啊

    原因上面说过了,QTP中内置了CreateObject函数,这个函数的作用就是返回所调用的外部activex对象。如果还不清楚内置对象和内置函数的区别,可以看看QTP的步骤生成器Step Generator,Utility Objects是内置对象,这里面你找不到WScript对象,Functions是内置函数,这里你能找到CreateObject。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    12#
    发表于 2013-1-9 11:51:22 | 只看该作者
    至于你的CreateObject函数所用的输入参数“WScript.Shell”,表示的是创建什么对象,写法是
    服务名.类名
    服务名.类名,由activex程序的开发人员自行定义,并注册在操作系统的注册表中,比如“WScript.Shell”你可以在注册表中查找到。
    WScript是微软开发的一个activex服务,这个服务下还有其他类,比如network等。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13#
     楼主| 发表于 2013-1-9 13:37:09 | 只看该作者
    回复 10# xjwldlover


        谢谢指教,我得消化消化。刚才百度了一下,有如下解释,
    “ WScript.Shell(Windows Script Host Runtime Library)是一个对象,对应的文件是C:\WINDOWS\system32\wshom.ocx,Wscript.shell是服务器系统会用到的一种组件。shell 就是“壳”的意思,这个对象可以执行操作系统外壳常用的操作,比如运行程序、读写注册表、环境变量等。这个对象通常被用在VB或VBS编程中。”

    目前我的理解是,WScript.CreateObject("WScript.Shell")是在windows环境下创建一个WScript.Shell对象,而CreateObject("WScript.Shell")是在QTP环境下创建一个WScript.Shell对象。这样理解对吗?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    14#
     楼主| 发表于 2013-1-9 13:38:50 | 只看该作者
    回复 12# 泰然


        谢谢指教,我得消化消化,目前功底薄弱,不能完全领悟呀
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-11-16 06:18 , Processed in 0.076372 second(s), 31 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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