51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 4736|回复: 23
打印 上一主题 下一主题

[原创] 当变量的值中出现括号时会出错,该怎么办

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2007-7-24 12:26:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我录制的脚本中有这样一句代码:Browser("视频 - 土豆网 - 播客 个人多媒体").Page("视频 - 土豆网 - 播客 个人多媒体").Link("Text:= " & innerText(32)).click,其中innerText()是一数组变量,是已经取得的链接的innerText属性,innerText(32)="放羊的星星第20集(1)",值中含有括号,运行到这句时就会出错,报的错是不能识别这个Link对象,而当换个其它的元素,值中不含有括号时,就不会出错,碰到这种情况我该怎么办呢,谢谢!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2007-7-24 12:51:29 | 只看该作者
innerText(32)="放羊的星星第20集\(1\)",
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2007-7-24 13:33:58 | 只看该作者

帮助文档里面有

在descriptive programming.see progra....
里面的第2页第一个黄色部分note:
qtp使用正则表达式的方式在描述性编程中评测处理所有的属性值
楼上厉害啊,我还以为是innertext\(34\)呢。。

[ 本帖最后由 jackymail 于 2007-7-24 13:38 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

4#
 楼主| 发表于 2007-7-24 13:50:09 | 只看该作者
谢谢楼上两位,我将语句改成下面的是可以回放的
Dim a
a="放羊的星星第20集\(1\)"
Browser("视频 - 土豆网 - 播客 个人多媒体").Page("视频 - 土豆网 - 播客 个人多媒体").Link("Text:= " & a).click

但现在问题是我不知道a的值里有没有括号,要加个判断,如果有括号,则在括号前加\,这样的语句该怎么写呢,谢谢!
回复 支持 反对

使用道具 举报

该用户从未签到

5#
 楼主| 发表于 2007-7-24 13:56:53 | 只看该作者
貌似是用Replace函数是吧,正在研究,有什么好方法,请多多指教!
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2007-7-24 13:59:11 | 只看该作者

replace

呵呵,自问自答阿。那我还是删了自己的话吧。。。
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2007-7-24 14:02:27 | 只看该作者
如果这个()是在字符串的最后那就方便些,你可以用RIGHT()函数取右边3个字符,再判断有没有带(,),有的话就加个“\”。如果()是在任意位置,那就麻烦一点,你先要匹配字符串,找到()的位置再进行替换,会麻烦一点!呵呵。。。。不知道能不能帮助你。sdlkfj5
回复 支持 反对

使用道具 举报

该用户从未签到

8#
 楼主| 发表于 2007-7-24 14:13:22 | 只看该作者
  1. Dim a
  2. a="放羊的星星第20集(1)"
  3. b=replace(a, "(", "\(")
  4. c=replace(b, ")", "\)")
  5. msgbox c
复制代码
这个方法貌似有点麻烦,因为为了防止有中文输入法下的括号,还得再加两个replace函数,哪位有什么更好的方法吗
回复 支持 反对

使用道具 举报

该用户从未签到

9#
发表于 2007-7-24 14:23:30 | 只看该作者

中文的()好像不算特殊字符

就不用加转义字符。估计是这样的。
回复 支持 反对

使用道具 举报

该用户从未签到

10#
 楼主| 发表于 2007-7-24 14:42:32 | 只看该作者
原帖由 jackymail 于 2007-7-24 14:23 发表
就不用加转义字符。估计是这样的。
不行的,我已经试过了,但圆括号貌似也并未用于正则表达式
回复 支持 反对

使用道具 举报

该用户从未签到

11#
发表于 2007-7-24 14:46:45 | 只看该作者

( )

你有没有script56那个vbscript教程,那里里面有正则表达式的描述,你没有我可以给你一个
那个是我见过得比较好的vbscript的chm
还有你的问题多用几次replace也没什么问题,估计没有更好的函数,等我有空或许会写一个,哈哈。

$ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身,请使用 \$。
( ) 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \( 和 \)。
* 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*。
+ 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+。
. 匹配除换行符 \n之外的任何单字符。要匹配 .,请使用 \。
[  标记一个中括号表达式的开始。要匹配 [,请使用 \[。
? 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?。
\ 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, 'n' 匹配字符 'n'。'\n' 匹配换行符。序列 '\\' 匹配 "\",而 '\(' 则匹配 "("。
^ 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 \^。
{ 标记限定符表达式的开始。要匹配 {,请使用 \{。
| 指明两项之间的一个选择。要匹配 |,请使用 \|。
回复 支持 反对

使用道具 举报

该用户从未签到

12#
 楼主| 发表于 2007-7-24 15:00:30 | 只看该作者

回复 #11 jackymail 的帖子

是都包含在windows脚本技术里的那个吧,那个我也有的,but 3Q just the same
回复 支持 反对

使用道具 举报

该用户从未签到

13#
 楼主| 发表于 2007-7-24 15:23:24 | 只看该作者
要是可以这样就好了:
if innerText(i)有特殊字符 then
   在前面加\
end if
回复 支持 反对

使用道具 举报

该用户从未签到

14#
发表于 2007-7-24 16:48:54 | 只看该作者
最后加个.*
回复 支持 反对

使用道具 举报

该用户从未签到

15#
 楼主| 发表于 2007-7-24 17:48:32 | 只看该作者
原帖由 Jimmyshao 于 2007-7-24 16:48 发表
最后加个.*
不太明白你的意思,帮忙看看我的代码,看看究竟如何改
  1. Function newString (myString)
  2.         myString = replace(myString, "(", "\(")
  3.         myString = replace(myString, ")", "\)")
  4.         myString = replace(myString, "(", "\(")
  5.         myString = replace(myString, ")", "\)")
  6.         myString = replace(myString, "[", "\[")
  7.         myString = replace(myString, "]", "\]")
  8.         myString = replace(myString, "+", "\+")
  9.         myString = replace(myString, ".", "\.")
  10.         newString = myString
  11. End Function
复制代码
回复 支持 反对

使用道具 举报

该用户从未签到

16#
发表于 2007-7-24 20:42:08 | 只看该作者
我的意思是你的这个值-〉放羊的星星第20集(1)
是从Excel中取出来的吗?
如果是的,就在Excel中写成-〉放羊的星星第20集.*
然后在指向这个字段的属性中把正则表达式的勾给勾上...
回复 支持 反对

使用道具 举报

该用户从未签到

17#
发表于 2007-7-25 11:29:21 | 只看该作者

LZ拿去试试

Function newstring(mystring)
        Dim specialstring,stringcount
        specialstring = "\,$,(,),*,+,.,[,],?,^,{,},|"   '自己加,"\"放第1个
        stringcount = Int(Len(specialstring)/2)
        specialstring = Split(specialstring,",",-1,1)
        For i = 0 To stringcount
                myString = Replace(myString, specialstring(i), "\"& specialstring(i))
        Next
        newString = myString
End Function
回复 支持 反对

使用道具 举报

该用户从未签到

18#
发表于 2007-7-25 11:40:23 | 只看该作者

楼上写得真是好啊

一个里面可能包含多个特殊字符都考虑到了。
回复 支持 反对

使用道具 举报

该用户从未签到

19#
 楼主| 发表于 2007-7-25 12:05:52 | 只看该作者
原帖由 Jimmyshao 于 2007-7-24 20:42 发表
我的意思是你的这个值-〉放羊的星星第20集(1)
是从Excel中取出来的吗?
如果是的,就在Excel中写成-〉放羊的星星第20集.*
然后在指向这个字段的属性中把正则表达式的勾给勾上...
不是从Excel里读取的,而是从网页上动态获得的,是将网页中所有链接的innertext属性获取到,然后全部存放到innerText()数组中的
回复 支持 反对

使用道具 举报

该用户从未签到

20#
 楼主| 发表于 2007-7-25 12:09:34 | 只看该作者

回复 #17 skyzhu 的帖子

对啊,用循环,太感谢了!
不过不知什么原因,我用了这个Function后,QTP跑到一半,就跑不下去了,也不报错,CPU也一下子满了,100%了
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-9-29 07:31 , Processed in 0.116855 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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