onlonely 发表于 2009-3-24 17:40:02

描述性编程中,正则表达式使用的问题

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/.gif">
但是我上面代码设置的正则表达式却是错误的.

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

[ 本帖最后由 onlonely 于 2009-3-24 20:08 编辑 ]

blueeagle9999 发表于 2009-3-24 20:48:31

(1)Set checkimage=description.create()
      checkimage("outerhtml").value="\<IMG src=\"http:\/\/file.ehome.cn\/Images\/mood\/.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:41

(1)Set checkimage=description.create()
      checkimage("outerhtml").value="\<IMG src=\"http:\/\/file.ehome.cn\/Images\/mood\/.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:00

回复 1# 的帖子

1) /是不需要被转义的,而需要被转义的是 .
2) "不能被\转义,一般可以用Chr(34)来代替,当然你也可以用.来代替
3) outerhtml:=<IMG src=(.)*+Images\/mood\/+"&DataTable("diary_xq", dtGlobalSheet)&".gif+(.)*"这段表达式中所有的+都是没有任何意义的。。。

onlonely 发表于 2009-3-25 11:20:24

回复 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:50

回复 5# 的帖子

LZ的标题就是正则表达式的使用问题。。。
在实际运用中究竟采用哪种方式是要根据具体的情况而定,在你能确切知道变化的值的情况下,用变量来替换当然是可以;但如果你不能知道实际值,那还是得用正则表达式:victory:

不用太多琢磨,把关于正则表达式的帮助大致上看一遍就能基本了解,花不了多少分钟。

skyzhu 发表于 2009-3-26 11:54:02

lz用什么是什么版本的,如果低于9.0 ,建议在描述编程中不要使用正则,以前的版本QTP本身就有问题

Haereticus 发表于 2009-3-26 12:02:47

如果只看图片的编号是否正确,把
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:39

回复 8# 的帖子

问题我是通过取消正则表达式判断这个方法解决了.
不过你这样是不行的,ehome.image("outerhtml:=(.)*"&num&".gif$").exist
因为Images/mood/这段文字是必须加入判断的,因为图片路径很重要,不只要判断图片是否正确
页: [1]
查看完整版本: 描述性编程中,正则表达式使用的问题