51Testing软件测试论坛

标题: 用ExecuteFile调用外部的VBS文件产生的奇怪问题 - Unicode原因 [打印本页]

作者: hekinwu    时间: 2007-4-13 09:57
标题: 用ExecuteFile调用外部的VBS文件产生的奇怪问题 - Unicode原因
首先在外部定义一个test.vbs文件如下:

Public Function x(byval a, byRef s)          'by default, s is passed "byRef"   
   s= s *10 + a * 10
End function'

在Action 1中写入下列的脚本,但执行的时候QTP会报出Invalid Character错误

ExecuteFile "c:\test.vbs"
svar = 10
svara = 20

Call x(svar, svara)
Msgbox(svara)

如果把外部的test Function直接写在Action中不用executefile调用的话,QTP可以顺利的执行,所以Function本身应该是没有写错的。
但是当使用ExecuteFile来进行调用的时候就会出错。
不知道ExecuteFile在使用的时候是不是有什么限制?想问问大家都是怎么使用的

[ 本帖最后由 hekinwu 于 2007-4-17 10:04 编辑 ]
作者: 风过无息    时间: 2007-4-13 11:08
在我本机上运行成功,楼主把截图弄上来瞅瞅?
作者: danmy    时间: 2007-4-13 11:12
我也碰到过这样的问题~~ 可能跟编辑的外部VBS的编辑器有关~

你把VBS拷贝进qtp里重新建一个试试
作者: hekinwu    时间: 2007-4-13 13:26
[attach]22931[/attach]
这个图片就是我执行的情况了
不太明白把“你把VBS拷贝进qtp里”是什么意思,我试过把VBS在QTP里面打开,好像也是一样的
楼上的说也碰到过这类的问题,最后怎么解决的呢?sdlkfj7
作者: 厍仕杰    时间: 2007-4-13 18:02
您用的是9
我用的是八啊
作者: danmy    时间: 2007-4-16 10:13
原帖由 hekinwu 于 2007-4-13 13:26 发表
22931
这个图片就是我执行的情况了
不太明白把“你把VBS拷贝进qtp里”是什么意思,我试过把VBS在QTP里面打开,好像也是一样的
楼上的说也碰到过这类的问题,最后怎么解决的呢?sdlkfj7


我当时就是把原来那个文件删掉,再qtp里新建了一个vbs,保存执行的。所以我觉得还是跟你写vbs的编辑器有关系,或者用记事本应该也没问题
作者: htot05    时间: 2007-4-16 10:22
我用的8.2,直接复制楼主的脚本试的,没有问题,你再查查是不是别的原因吧
sdlkfj2
作者: hekinwu    时间: 2007-4-16 10:46
原帖由 danmy 于 2007-4-16 10:13 发表


我当时就是把原来那个文件删掉,再qtp里新建了一个vbs,保存执行的。所以我觉得还是跟你写vbs的编辑器有关系,或者用记事本应该也没问题


我开始的时候就用QTP来New一个FunctionLibaray的,然后保存为VBS类型,这样执行会出错。
后来就用UltraEdit直接写了一个vbs,用ExecuteFile调用的时候还是会出错。
如果把VBS加入Testing的Resources里面好像就可以正常运行,但是使用ExecuteFile的时候就会出错。
是否执行Executefile需要其他的插件还是dll,我的电脑里面只装了Windows Script Debuger,没有装其他的编译器了。
如果不能用ExecuteFile的话,就要自己写个调用的方法,这样比较麻烦呀sdlkfj9
作者: hekinwu    时间: 2007-4-16 10:47
原帖由 htot05 于 2007-4-16 10:22 发表
我用的8.2,直接复制楼主的脚本试的,没有问题,你再查查是不是别的原因吧
sdlkfj2


我公司用的是9.0,我家里的是9.2,两个版本运行下来都是有问题的,很奇怪
作者: htot05    时间: 2007-4-16 11:03
刚刚用9.1试了一下,也没问题,你新建一个脚本和test.vbs,把你自己发到网上的代码复制进去,试试看看吧
作者: hekinwu    时间: 2007-4-16 11:49
原帖由 htot05 于 2007-4-16 11:03 发表
刚刚用9.1试了一下,也没问题,你新建一个脚本和test.vbs,把你自己发到网上的代码复制进去,试试看看吧


已经试过好几次了,好像都不行,在别人机器上也不行。
能不能把你执行的结果贴上图上来看看,我研究一下区别在哪里sdlkfj7
作者: htot05    时间: 2007-4-16 13:39
d:\新建.bmp
作者: htot05    时间: 2007-4-16 13:40
我自己怎么也看不到图片,不知道发没发上去,看到了回应一下哈~~
作者: hekinwu    时间: 2007-4-16 13:49
原帖由 htot05 于 2007-4-16 13:40 发表
我自己怎么也看不到图片,不知道发没发上去,看到了回应一下哈~~


一个触目惊心的红Xsdlkfj7
编辑你的帖子,你可以通过上传附件功能来贴图片的

[ 本帖最后由 hekinwu 于 2007-4-16 13:50 编辑 ]
作者: htot05    时间: 2007-4-16 15:10
d:\新建.bmp

[email=d:\新建.bmp]d:\新建.bmp[/email]
作者: htot05    时间: 2007-4-16 15:13
d:\新建.bmp[localimg=375,300]1[/localimg]

这下能看见不?
作者: htot05    时间: 2007-4-16 15:14
怎么回事????就是发不上去了
作者: hekinwu    时间: 2007-4-16 15:15
原帖由 htot05 于 2007-4-16 15:13 发表
d:\新建.bmp[localimg=375,300]1[/localimg]

这下能看见不?


好像还是看不到呀,是不是文件太大了

[ 本帖最后由 hekinwu 于 2007-4-16 15:26 编辑 ]
作者: htot05    时间: 2007-4-16 15:24
file:///d:/result.bmp


这下呢?
已经不大了,只有1.2M
作者: htot05    时间: 2007-4-16 15:25
总算好了,^_^
作者: alex_82712    时间: 2007-4-16 15:29
标题: 回复 #4 hekinwu 的帖子
请问你是选的Active X,Visual Basic,Web
哪个协议啊
作者: hekinwu    时间: 2007-4-16 15:30
呵呵,终于看到了,谢谢你
确实是一样的脚本,但是执行的结果确完全不同sdlkfj7
看来要么是我的VBScript编译器有问题,要么就是环境有影响,奇怪的问题呀。。。

[ 本帖最后由 hekinwu 于 2007-4-16 15:33 编辑 ]
作者: hekinwu    时间: 2007-4-16 15:32
原帖由 alex_82712 于 2007-4-16 15:29 发表
请问你是选的Active X,Visual Basic,Web
哪个协议啊


我原来也考虑过可能是插件的原因,
所以做了两个情况,一是Active X,Visual Basic,Web,.Net 统统选中,还有就是一个插件都不选
结果还是一致的错误sdlkfj7
作者: alex_82712    时间: 2007-4-16 15:32
标题: 回复 #20 htot05 的帖子
请教你,我是新手,刚刚这个问题,你是怎么解决的啊
作者: htot05    时间: 2007-4-16 15:33
嗯,好好检查一下你的环境吧
作者: htot05    时间: 2007-4-16 15:35
这在别人的机器上都不是问题,我没有解决什么,只是证明他的脚本是没有问题,问题出在他的环境上而已,呵呵
作者: alex_82712    时间: 2007-4-16 15:40
标题: 回复 #23 hekinwu 的帖子
我刚也弄好啦
作者: alex_82712    时间: 2007-4-16 15:43
请看附件
作者: hekinwu    时间: 2007-4-16 16:00
谢谢大家的帮忙sdlkfj2
终于我也出现了正常的画面[attach]23050[/attach]

总结:
因为我之前使用UltraEdit和QTP的Function Library生成VBS文件,
这个文件使用下来发现是无法被ExecuteFile执行的,即使之后用NotePad进行修改保存也无效的。

解决方法: 使用右键新建一个文本文件(NotePad),把代码全部Copy进去,Save之后把名字改成Test.vbs
这个时候在用QTP执行ExecuteFile就一点问题都没有了

因为一直以来写Code我还是比较习惯在UltraEdit上面编写,没有想到竟然无法执行,对VBScript还是不太熟悉呀。sdlkfj1
谢谢大家的帮忙,虽然不知道问题究竟是什么原因,但是已经可以绕过去了sdlkfj3
作者: hekinwu    时间: 2007-4-17 10:04
我把可以执行和不可执行的文件一起分析了一下,发现原来执行出现错误的文件是以Unicode编码被保存下来的,而正常执行的文件一定要是ANSI编码的。因为记事本工具默认的编码就是ANSI所以不会出现类似的问题,倒是QTP自己的Save As很奇怪,保存下来的Function Library文件竟然是Unicode编码的。不知道QTP有没有地方可以设置保存文件的编码类型呢?
总之,executefile调用的文件不能是Unicode编码的,一定要是ANSI的。希望大家保存脚本的时候也注意下,今后发生类似的问题可以轻松解决。谢谢大家的热心帮忙。
作者: danmy    时间: 2007-4-17 12:07
原帖由 hekinwu 于 2007-4-17 10:04 发表
我把可以执行和不可执行的文件一起分析了一下,发现原来执行出现错误的文件是以Unicode编码被保存下来的,而正常执行的文件一定要是ANSI编码的。因为记事本工具默认的编码就是ANSI所以不会出现类似的问题,倒是 ...


原来原因是这样? 向楼主学习一下,呵呵
作者: Jie    时间: 2007-4-25 16:46
呵呵,谢谢了,刚好遇到这个问题,按上面的方法解决了。
作者: wanganshi9858    时间: 2007-7-2 14:20
标题: 多谢楼主
我也遇到同样的问题,用Notepad编辑之后问题就解决了。
作者: 木卫十二    时间: 2007-10-22 11:08
只有用notepad这一种办法吗?
因为vbs主要在PrimalScript或UltraEdit里编辑,总不能每编辑一次就用notepade重新保存一下吧?可不可以在编辑器里设置啊?

试了一下,在前面加一句On error resume next就可以照常跳过并能读取vbs里的内容了。
作者: hsjzfling    时间: 2007-10-22 14:50
标题: 回复 34# 的帖子
其实应该是只要不用QTP的Function Library来编辑、保存脚本就没啥问题,因为这样保存下来的VBS文件是Unicode编码。这也是QTP的一个BUG。。。参见http://bbs.51testing.com/viewthread.php?tid=89039&page=1
而使用PrimalScript或UltraEdit工具编写的vbs是没啥问题的,至少我这里保存的脚本都是ANSI的~
作者: 木卫十二    时间: 2007-10-22 15:53
嗯,在PrimalScript的文件 => 属性里就有脚本编码的设置,可以改为ansi的。UltraEdit还没找到在哪设置
作者: hsjzfling    时间: 2007-10-22 16:42
UltraEdit的保存默认编码就是ANSI了,当然也可以将默认改为Unicode,下图中的第一个打勾的选项就是,去掉那个勾就默认是ANSI了~
[attach]34283[/attach]
作者: hsjzfling    时间: 2007-10-22 16:42
UltraEdit的保存默认编码就是ANSI了,当然也可以将默认改为Unicode,下图中的第一个打勾的选项就是,去掉那个勾就默认是ANSI了~
[attach]34284[/attach]
作者: 木卫十二    时间: 2007-10-22 17:36
O!明白了,多谢!
作者: chbhaha    时间: 2008-6-13 17:22
我机子上也出现该问题,请问你是怎么处理的
作者: chbhaha    时间: 2008-6-13 17:28
网页没有加载出来,看完了知道了,谢谢
作者: dantezhu    时间: 2009-5-9 15:04
我也遇到这个问题:提示无效字符

qtp:
VbsFileName = "c:\CaseFunction.vbs"
ExecuteFile VbsFileName
a = 1
b = 3
call add(a,b,c)
msgbox c


c:\CaseFunction.vbs:
Public Function add(byval a, byval b, beRef c)
   c=a+b
End Function
作者: pierre0505    时间: 2009-12-20 22:28
我晕,这个问题折腾了我1个多小时,原来是编码格式的问题,谢谢楼主以及各位热心的朋友。终于搞定了。谢谢
作者: vitha    时间: 2010-4-12 09:46
用记事本打开VBS,使用ANSI格式保存一下就好了.
作者: 17800455    时间: 2010-4-20 11:29
标题: 回复 1# 的帖子
肯定是你资源池,或F7,库出问题了。。。




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