Public Function RegExpbld(patrn, strng)
Dim regEx, retVal ' 建立变量。
Set regEx = New RegExp ' 建立正则表达式。
regEx.Pattern = patrn ' 设置模式。
regEx.IgnoreCase = true ' 设置是否区分大小写。
retVal = regEx.Test(strng) ' 执行搜索测试。
RegExpbld=retVal
End Function
其次,第1,2,4点的函数编写实现难度不高。好比第1点中,我们只需要取出 Browser的标题,并使用上面的表达式函数便可以
-1 RegExp = "错误|error|无法" ‘这个是我们简单编写的正则表达式
-2 title=browser("Google").getroproperty(“title”)
-3 if RegExpbld(RegExp, title) then
-4 '如果出现这些错误的字样则报错
-5 end if
但在第2点中,需要提醒大家的是,捕获这个错误的URL,不仅仅是当前页面的URL,我们还需要取出在页面中所有frame的URL做对比。
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' 参数
'error_url 公司内部自定义的错误页面跳转URL,可以写成数组之类去进行比较
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-1 Dim FramesObj
-2 Set FramesObj =browser("Google").Page("Google").Object.frames
-3 For i=0 to FramesObj.length-1
-4 If FramesObj (i).getroproperty("url")= error_url Then
-5 '如果为true就是某个frame已经跳转到指定的URL
-6 End If
-7 Next
Public Function QTP_DocIsLive()
Dim Src_text,patrn
Src_text=TextUtil.GetText(0, 20, 20, 2000, 2000) '窗口的大小需要根据实际去定义
patrn="错误|error|无法"
If RegExpbld(patrn,Src_text) Then
QTP_DocIsLive=true
Exit Function
End If
QTP_DocIsLive=false
End Function
优势:原理简单,甚至能查找到不可预知的msgbox中的内容。 弊端:QTP本身对这个TextUtil的支持并不是做得很完善,导致了方法是使用过程中,偶尔会与Window Explorer 冲突,导致了使用函数完后,Window会出现某些异常情况。
Public function New_Page_Docfind(New_Page_Doc)
Dim oShell
Set oShell=CreateObject("WSCript.shell")
oShell.sendkeys "^f" '发送”Ctrl+F”调出查找功能
browser("browser").Window("查找").Page("查找").WebEdit("WebEdit").Set New_Page_Doc '设置搜索文本的内容,用户需要自己添加对象或者修改成描述语言
browser("browser").Window("查找").Page("查找").WebButton("查找下一个(F)").Click
'点击查找按钮
If browser("browser").Window("查找").Dialog("Microsoft Internet Explorer").Exist Then
browser("browser").Window("查找").Dialog("Microsoft Internet Explorer").Close
wait(0.1)
oShell.sendkeys "%u"
browser("browser").Window("查找").Page("查找").WebButton("查找下一个(F)").Click
If browser("browser").Window("查找").Dialog("Microsoft Internet Explorer").Exist Then
browser("browser").Window("查找").Dialog("Microsoft Internet Explorer").Close
New_Page_Docfind=false
browser("browser").Window("查找").Close
else
New_Page_Docfind=true
browser("browser").Window("查找").Close
end if
else
New_Page_Docfind=true
browser("browser").Window("查找").Close
End If
Set oShell=Nothing
End Function
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' New_Page_DocExist 使用DocumentElement 对象判断页面是否存在某个特定错误字样
'
'参数
' reg 正则表达式
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Public Function New_Page_DocExist(reg)
Dim Page_doc_a,Page_doc_b,Page_doc_c,str,oDesc,frame_obj,logie,child_a
str=browser("browser").GetROProperty("title")
If browser("browser").page("index:=0").Exist Then
Set Page_doc_a=browser("browser").page("index:=0").Object.documentElement.all.tags("body")
For each Element in Page_doc_a
str=str+" "+Element.outertext
Next
Set Page_doc_b=browser("browser").page("index:=0").Object.documentElement.all.tags("input")
For each Element in Page_doc_b
str=str+" "+Element.value
Next
Set Page_doc_c=browser("browser").Page("index:=0").Object.documentElement.all.tags("SPAN")
For each Element in Page_doc_c
str=str+" "+Element.outertext
Next
Set Page_doc_a=nothing
Set Page_doc_b=Nothing
Set Page_doc_c=nothing
End if
frame_count=browser("browser").page("index:=0").object.frames.length
If frame_count<>0 Then
Set oDesc = Description.Create()
oDesc("html tag").Value = "iframe"
set frame_obj = browser("browser").page("index:=0").ChildObjects(oDesc)
For i=0 to frame_count-1
set Page_doc_a=frame_obj(i).Object.documentElement.all.tags("body")
For each Element in Page_doc_a
str=str+" "+Element.outertext
next
set Page_doc_b=frame_obj(i).Object.documentElement.all.tags("input")
For each Element in Page_doc_b
str=str+" "+Element.value
Next
set Page_doc_c=frame_obj(i).Object.documentElement.all.tags("SPAN")
For each Element in Page_doc_c
str=str+" "+Element.outertext
next
set Page_doc_a=nothing
set Page_doc_b=Nothing
set Page_doc_c=nothing
Next
End If
str=str+" "+browser("browser").WinStatusBar("msctls_statusbar32").getroproperty("text") ' WinStatusBar的对象需要自己添加进对象库
New_Page_DocExist=RegExpbld (reg,str)
End Function