51Testing软件测试论坛

标题: 描述性编程中,正则表达式使用的问题 [打印本页]

作者: onlonely    时间: 2009-3-24 17:40
标题: 描述性编程中,正则表达式使用的问题
if ehome.image("outerhtml:=<IMG src=(.)*+Images\/mood\/+"&DataTable("diary_xq", dtGlobalSheet)&".gif+(.)*").exist then
      Reporter.ReportEvent micPass, "日记天气正确",  "Pass"
Else
     Reporter.ReportEvent micFail, "日记天气不正确", "Fail"
End If


问题描述:
如上面代码的检查点.

我需要使用正则表达式检查一个图片的outerhtml属性,属性值的格式为<IMG src="http://file.ehome.cn/Images/mood/[1-6].gif">
但是我上面代码设置的正则表达式却是错误的.

所以我的问题就是:
1,<IMG src="http://file.ehome.cn/Images/mood/[1-6].gif">这样的格式的正则表达式在描述性编程中,应该如何表达.
   如果觉得太难的话,就表达http://file.ehome.cn/Images/mood/[1-6]。gif
注意:我要参数化的是红色字体部分的内容,

[ 本帖最后由 onlonely 于 2009-3-24 20:08 编辑 ]
作者: blueeagle9999    时间: 2009-3-24 20:48
(1)Set checkimage=description.create()
      checkimage("outerhtml").value="\<IMG src=\"http:\/\/file.ehome.cn\/Images\/mood\/[1-6].gif\"、>"
      checkimage("outerhtml").RegularExpression = True

(2)或者QTP帮助里面有这个函数,看是否能帮到你。

Function RegExpTest(patrn, strng)
   Dim regEx, Match, Matches   ' Create variable.
   Set regEx = New RegExp   ' Create a regular expression.
   regEx.Pattern = patrn   ' Set pattern.
   regEx.IgnoreCase = True   ' Set case insensitivity.
   regEx.Global = True   ' Set global applicability.
   Set Matches = regEx.Execute(strng)   ' Execute search.
   For Each Match in Matches   ' Iterate Matches collection.
      RetStr = RetStr & "Match found at position "
      RetStr = RetStr & Match.FirstIndex & ". Match Value is '"
      RetStr = RetStr & Match.Value & "'." & vbCRLF
   Next
   RegExpTest = RetStr
End Function
MsgBox(RegExpTest("is.", "IS1 is2 IS3 is4"))
作者: onlonely    时间: 2009-3-24 21:40
(1)Set checkimage=description.create()
      checkimage("outerhtml").value="\<IMG src=\"http:\/\/file.ehome.cn\/Images\/mood\/[1-6].gif\"、>"
      checkimage("outerhtml").RegularExpression = True

(2)或者QTP帮助里面有这个函数,看是否能帮到你。

Function RegExpTest(patrn, strng)
   Dim regEx, Match, Matches   ' Create variable.
   Set regEx = New RegExp   ' Create a regular expression.
   regEx.Pattern = patrn   ' Set pattern.
   regEx.IgnoreCase = True   ' Set case insensitivity.
   regEx.Global = True   ' Set global applicability.
   Set Matches = regEx.Execute(strng)   ' Execute search.
   For Each Match in Matches   ' Iterate Matches collection.
      RetStr = RetStr & "Match found at position "
      RetStr = RetStr & Match.FirstIndex & ". Match Value is '"
      RetStr = RetStr & Match.Value & "'." & vbCRLF
   Next
   RegExpTest = RetStr
End Function
MsgBox(RegExpTest("is.", "IS1 is2 IS3 is4"))


第一种方法我先前都试过了双引号无法通过斜杠来转译.
至于后面这种方法....不是很理解含义,汗
作者: hsjzfling    时间: 2009-3-25 10:33
标题: 回复 1# 的帖子
1) /是不需要被转义的,而需要被转义的是 .
2) "不能被\转义,一般可以用Chr(34)来代替,当然你也可以用.来代替
3) outerhtml:=<IMG src=(.)*+Images\/mood\/+"&DataTable("diary_xq", dtGlobalSheet)&".gif+(.)*"这段表达式中所有的+都是没有任何意义的。。。
作者: onlonely    时间: 2009-3-25 11:20
标题: 回复 4# 的帖子
其实在这里面仔细琢磨正则表达式的这么复杂应用走入误区了.
set xq = Description.Create()
xq("outerhtml").Value = "http://file.ehome.cn/Images/mood/"&DataTable("diary_bq", dtGlobalSheet)&".gif"
xq("outerhtml").RegularExpression = False
objectname.image(xq).exist


如上面这样的代码处理(取消正则表达式,用变量代替变化的地方)更简便实用.

[ 本帖最后由 onlonely 于 2009-3-25 11:34 编辑 ]
作者: hsjzfling    时间: 2009-3-25 16:46
标题: 回复 5# 的帖子
LZ的标题就是正则表达式的使用问题。。。
在实际运用中究竟采用哪种方式是要根据具体的情况而定,在你能确切知道变化的值的情况下,用变量来替换当然是可以;但如果你不能知道实际值,那还是得用正则表达式

不用太多琢磨,把关于正则表达式的帮助大致上看一遍就能基本了解,花不了多少分钟。
作者: skyzhu    时间: 2009-3-26 11:54
lz用什么是什么版本的,如果低于9.0 ,建议在描述编程中不要使用正则,以前的版本QTP本身就有问题
作者: Haereticus    时间: 2009-3-26 12:02
如果只看图片的编号是否正确,把
ehome.image("outerhtml:=<IMG src=(.)*+Images\/mood\/+"&DataTable("diary_xq", dtGlobalSheet)&".gif+(.)*").exist
改成:
ehome.image("outerhtml:=(.)*"&num&".gif$").exist  就行了
作者: onlonely    时间: 2009-3-26 15:33
标题: 回复 8# 的帖子
问题我是通过取消正则表达式判断这个方法解决了.
不过你这样是不行的,ehome.image("outerhtml:=(.)*"&num&".gif$").exist  
因为Images/mood/这段文字是必须加入判断的,因为图片路径很重要,不只要判断图片是否正确




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