51Testing软件测试论坛

标题: 求助,为啥执行这个模拟键盘代码老是提示缺少对象呢 [打印本页]

作者: wyfyan    时间: 2013-1-7 13:54
标题: 求助,为啥执行这个模拟键盘代码老是提示缺少对象呢
如图,请前辈指导,谢谢。

[attach]83064[/attach]
作者: 黑羽祭    时间: 2013-1-7 15:42
回复 1# wyfyan


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

作者: wyfyan    时间: 2013-1-7 22:15
回复 2# 黑羽祭

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

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

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

再次致谢。
作者: 黑羽祭    时间: 2013-1-8 09:16
回复 3# wyfyan


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

http://www.51testing.com/index.php?uid-307440-action-viewspace-itemid-827982

作者: xjwldlover    时间: 2013-1-8 11:11
回复  黑羽祭

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

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


wscript是window脚本宿主的root对象。脚本宿主可以理解为脚本的运行环境。
加wscript就是要使用windows的脚本运行环境,不加就是默认使用qtp的脚本运行环境。你在qtp里运行vbs当然是要使用qtp的运行环境了
作者: wyfyan    时间: 2013-1-8 13:45
回复 4# 黑羽祭


    第二个问题,我执行如下代码,为啥没有打开新的选项卡呀?
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "iexplore"
wait 15
WshShell.SendKeys "^T"
作者: wyfyan    时间: 2013-1-8 13:46
回复 5# xjwldlover


    哦,若有所悟!谢谢高人指点!
作者: 泰然    时间: 2013-1-8 17:03
QTP使用了VBScript编译器,但和VB还是不同的,QTP中的CreateObject是一个内置函数,返回结果是一个activex对象,QTP中没有WScript这个内置对象,所以你的脚本set s = WScript.CreateObject("WScript.Shell")报错,报的就是WScript这个对象不存在。

在别的编译器中,内置了WScript对象,这个对象有一个CreateObject方法,所以在那个编译环境中可以这么写set s = WScript.CreateObject("WScript.Shell")。
作者: wyfyan    时间: 2013-1-8 20:49
回复 8# 泰然

哦,是因为QTP中没有WScritp对象,所以报错。那CreateObject("WScript.Shell")为啥没有报错啊
作者: xjwldlover    时间: 2013-1-9 09:18
回复  泰然

哦,是因为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借口调用系统中已安装(或者说已加载的)的对象。是 拥有 和 借用 的区别。

不知我这样说是否容易理解,如有错误请各位不吝指教~
作者: 泰然    时间: 2013-1-9 11:41
那CreateObject("WScript.Shell")为啥没有报错啊

原因上面说过了,QTP中内置了CreateObject函数,这个函数的作用就是返回所调用的外部activex对象。如果还不清楚内置对象和内置函数的区别,可以看看QTP的步骤生成器Step Generator,Utility Objects是内置对象,这里面你找不到WScript对象,Functions是内置函数,这里你能找到CreateObject。
作者: 泰然    时间: 2013-1-9 11:51
至于你的CreateObject函数所用的输入参数“WScript.Shell”,表示的是创建什么对象,写法是
服务名.类名
服务名.类名,由activex程序的开发人员自行定义,并注册在操作系统的注册表中,比如“WScript.Shell”你可以在注册表中查找到。
WScript是微软开发的一个activex服务,这个服务下还有其他类,比如network等。
作者: wyfyan    时间: 2013-1-9 13:37
回复 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对象。这样理解对吗?
作者: wyfyan    时间: 2013-1-9 13:38
回复 12# 泰然


    谢谢指教,我得消化消化,目前功底薄弱,不能完全领悟呀




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2