QTP实践总结
QTP实践总结
查询数据库修改freq
1.Testcasetable创建查询select * from testcasetable order by fseq desc
2.设计表-选项-修改自动递增数值
新建Action 需要修改Script.mts(D:\NewSoftShop\NewSoftShop\Action0)文件,把文件中新增的Action注释,重打开脚本
一、获取某个表格中指定位置的字符并累加输出:
(1)、对象转换:
tobj(i).object.children(0).innertext;将QTP对象转换为COM对象
(2)、累加输出:
str1= str1& tobj(i).object.children(0).innertext & ";" & tobj(i).object.children(1).innertext & "||"
完整方法:
Set obj=Description.Create()
obj("html tag").Value="TR"
Set tobj=Browser("NearMe市场后台 - 新排行榜管理").Page("NearMe市场后台 - 新排行榜管理").Frame("main_2").WebElement("html id:=table1","html tag:=table","class:=tb tb2","index:=1").ChildObjects(obj)
Msgbox tobj.count
For i=1 to tobj.count-2
str1= str1& tobj(i).object.children(0).innertext & ";" & tobj(i).object.children(1).innertext & "||"
Next
Msgbox str1
二、选择时间输入框当使用Set执行无效是需使用Object转换后再通过“Value=”输入时间:
Browser("NearMe市场后台 - 新排行榜管理").Page("NearMe市场后台 - 新排行榜管理_4").Frame("main_2").WebEdit("name:=starttime","html tag:=INPUT","type:=text").Object.Value="2015-01-08 15:36:55"
Browser("NearMe市场后台 - 新排行榜管理").Page("NearMe市场后台 - 新排行榜管理_4").Frame("main_2").WebEdit("name:=endtime","html tag:=INPUT","type:=text").Object.Value= "2015-01-09 15:36:55"
获取系统当前时间:now
比较时间:Cdate(Result)>=Cdate("2012-05-01 09:01:00") and Cdate(Result)<=Cdate("2014-06-05 22:59:59")
三、获取某个位置输入后得到的值,使用描述性编程描述对象后通过Object转换得到value值:
ID=Browser("NearMe市场后台 - 新排行榜管理").Page("NearMe市场后台 - 新排行榜管理").Frame("main").WebElement("html tag:=input","html id:=content").Object.value
Msgbox ID
四、获取一个html tag下的子对象:
如获取“TR”下tag为“strong”的值可使用方法:
tobj=Browser("…").Page("…").Frame("…").WebElement("…").ChildObjects(obj)
tobj(0).object.getElementsByTagName("STRONG")(0).innertext
五、Object、parentElement、GetElementsbyTagName,可同名子对象查找父对象:
说明:先使用描述性编程描述所要操作的子对象,通过Object将QTP对象转化为html 对象,再使用parentElement方法查找子对象查找上一层父对象,如果所查找位置未得到想要的结果继续查找上一层加一层(. parentElement),查找到对应结果后使用GetElementsbyTagName(“”)对应的html tag名称,如果有多个,添加(index),获取需要的值(.innertext)
Set Button=Browser("").Page("").Frame("").Link("html tag:=A","innertext:=添加","index:=0")
Msgbox Button.Object.parentElement.parentElement.GetElementsbyTagName("TD")(0).title
Button.Click
补充:如果出现获取不到时在Object后增加Document,
示例:
Button.Object.Document.parentElement.parentElement.GetElementsbyTagName("TD")(0).title
六、Trim(string…)使用方法,去除所获取字符串的前后空格
七、去除获取字符串中的字符,使用Replace(string,”需取代字符”,”替换字符”)(如:省略号)
SetButton=Browser("…").Page("…").Frame("main_6").WebElement("htmltag:=FONT","innertext:=…","index:=0") str=Button.Object.parentElement.parentElement.parentElement.GetElementsByTagName("TD")(2).innertext
Tname=Replace(str,"…","")
使用Left 或者Right获取前几个字符
TdName=Left(text,2)
TdName=Right(text,2)
删除段落前空格:
vbCrLf
vbTab
八、选择日期
方式一:
Browser("…").WebEdit(“html tag:=INPUT”,”html id:=startDate”).set “2015-12-02”
方式二:
Browser("…").WebEdit(“html tag:=INPUT”,”html id:=startDate”).Object.value= “2015-12-02”
Browser("Browser_2").Page("预算追加").WebEdit("html id:=txtPStartDate","html tag:=INPUT","html type:=text","html name:=WebEdit").Object.value="2014-10-09"
九、添加图片
Browser("…").Page("…").Frame("…").WebFile("pic_old").Click
Browser("…").Dialog("…").WinEdit("文件名(N):").Set "D:\NewSoftShop\resource\JPG\300x170.jpg"
Browser("…").Dialog("…").WinButton("打开(O)").Click
十、同行控件查找
转换为html方式的脚步无法对点击后或产生对话框的空间进行操作(如”删除”按钮),因为vbs脚本为单线程,弹出对话框后会停止脚本运行
十一、当前页面中的隐藏页面,使用描述性变成时需要先转换为Object,再逐层获得所需的值:
如:
Browser("").Page("").Frame("main").WebElement("html tag:=DIV","html id:=add").Object.style.display
十二、页面隐藏形式界面的检查方法
如:
Str= Browser("…").Page("..").Frame("main").WebElement("html tag:=DIV","html id:=addDiv").Object.style.display
Msgbox Str
If instr(Str,"none")<=0 Then
insertDataBasenew "fseq", fseq,"pass"&time
Else
insertDataBasenew "fseq", fseq,"fail"&time
End If
页面隐藏时display值为none;页面显示时display值为block
十三、翻页查找判断
循环方式实现:
'翻页查询使用循环判断
'找到对象所在页面
Function FindElement(Mname)
Browser("…").Page("..").Link("管理员").Click
Browser("…").Page("…").Link("管理员管理").Click
Mystate="false"
If Browser("…").Page("…").webelement("html tag:=DIV","class:=pg").Exist(2)Then
Strs=Browser("…").Page("…").webelement("html tag:=DIV","class:=pg").GetROProperty("innertext")
str=Split(Strs," ")
Num=str(1)
Mnum=int(int(Num-1)/10)+1
else
Mnum=1
End If
For i=1 to Mnum
If Browser("…").Page("…").Link("text:=" &Mname,"html tag:=A" ).Exist (2) Then
Mystate="true"
Exit for
else
If Mnum>i Then
j=i+1
Browser("…").Page("…").Link("html tag:=A","text:="&j).click
End If
End If
Next
FindElement=Mystate
End Function
'找到对象所在页面
Function FindElement(Mname)
'Browser("NearMe市场后台 - 搜索词运营管理").Page("NearMe市场后台 - 搜索词运营管理").Link("搜索词运营管理").Click
Mystate="false"
If Browser("NearMe市场后台 - 活动中心").Page("NearMe市场后台 - 临时活动").WebElement("html tag:=DIV","class:=pg").Exist(2)Then
Strs=Browser("NearMe市场后台 - 活动中心").Page("NearMe市场后台 - 临时活动").WebElement("html tag:=DIV","class:=pg").GetROProperty("innertext")
str=Split(Strs," ")
Num=str(1)
Mnum=int(int(Num-1)/10)+1
else
Mnum=1
End If
For i=1 to Mnum
If Browser("NearMe市场后台 - 活动中心").Page("NearMe市场后台 - 临时活动").WebElement("innertext:="&Mname,"html tag:=TD" ).Exist (2) Then
Mystate="true"
Exit for
else
If Mnum>i Then
j=i+1
Browser("NearMe市场后台 - 活动中心").Page("NearMe市场后台 - 临时活动").Link("html tag:=A","text:="&j).click
End If
End If
Next
FindElement=Mystate
End Function
递归方式实现:
'翻页查询使用递归循环
Function funloop()
Set BrowserObject=Browser("…").Page("…").Frame("main").WebElement("html tag:=table","html id:=table1")
If BrowserObject.WebElement("html tag:=DIV","class:=pg").Exist(2) Then
Str=BrowserObject.WebElement("html tag:=DIV","class:=pg").GetROProperty("innertext")
Msgbox Str
Onum=split(Str," ")
Msgbox Onum(1)
Num=int(Abs(int(Onum(1))-1)/10)+1
Msgbox Num
Else
Num=1
End If
Set trs=BrowserObject.Object.GetElementsByTagName("tr")
Knum=BrowserObject.WebElement("html tag:=DIV","class:=pg").Object.GetElementsByTagName("strong")(0).innertext
Msgbox trs.length
For trindex=1 to trs.length-2
Strs=trs(trindex).innertext
Msgbox Strs
If instr(Strs," QTP测试")>0 Then
res=true
Exit For
End If
Next
if(res=True) then
msgbox fseq & ":pass"
elseif instr(Num,Knum)>0 then
msgbox fseq & ":fail"
else
Browser("…").Page("…").Frame("data-rule-gt_2").WebEdit("name:=custompage","html tag:=INPUT").Object.value=Knum+1
Set WshShell =CreateObject("WScript.shell")
WshShell.Sendkeys "{ENTER}"
Msgbox "翻页"
funloop()
End If
End Function
‘最新提炼方法(查找对象所在界面)
'找到对象所在页面
Function FindElement(Mname,TdName)
Mystate="false"
If Browser(BrowserName).Page(PageName).webelement("html tag:=DIV","class:=pg").Exist(2)Then
Strs=Browser(BrowserName).Page(PageName).webelement("html tag:=DIV","class:=pg").GetROProperty("innertext")
str=Split(Strs," ")
Num=str(1)
Mnum=int(int(Num-1)/10)+1
else
Mnum=1
End If
For i=1 to Mnum
If Browser(BrowserName).Page(PageName).WebElement("innertext:="&Mname,"html tag:="&TdName,"index:=0" ).Exist (2) Then
Mystate="true"
Exit for
else
If Mnum>i Then
j=i+1
Browser(BrowserName).Page(PageName).Link("html tag:=A","text:="&j).click
End If
End If
Next
FindElement=Mystate
End Function
十四、随机选取下拉列表中元素
实现方式:
itemscount = WebList.GetROProperty ("items count") '获得下拉框选项个数
Rn=RandomNumber (0,itemscount-1) 'QTP特有的随机函数
WebList.Select Rn '用序号来选择
示例:
'随机获取下拉列表中元素
Set BrowserObject1=Browser("…").Page("…").Frame("main_5").WebList("select")
itemscount = BrowserObject1.GetROProperty ("items count") '获得下拉框选项个数
Rn=RandomNumber (0,itemscount-1) 'QTP特有的随机函数
BrowserObject1.Select Rn '用序号来选择
十五、随机获取下拉列表中元素后获取对应元素的属性值
- 直接定位需要获取元素位置
Set ObjSelect=Browser("NearMe市场后台 - 活动中心").Page("NearMe市场后台 - 活动中心").Frame("main_5").WebElement("html tag:=select","html id:=remain")
- 找到所要获取元素的属性值,唯一的属性
selection= int(replace(ObjSelect.GetROProperty("selected item index"),"#",""))
- 获取所需元素值
ObjSelect.Object.options(selection).text
十六、Function获取某个位置的值时需要设置返回值才能获取到对应文本
示例:获取表格中某行某列的值
'获取某行某列资源名称
Function GetTdName(IdTag,ID,IdIndex,TrIndex,TdIndex)
Set BrowserObject=Browser("…").Page("…").WebElement("html tag:="&IdTag,"html id:="&ID,"index:="&IdIndex)
Set Trs=BrowserObject.Object.GetElementsByTagName("TR")
GetTdName=Trs(TrIndex).GetElementsByTagName("TD")(TdIndex).innertext
End Function
十七、获取有数字和文本字符串后如果需要对获取的数字进行运行要先使用Cint转换为整形
示例:
Num1=Cint(Replace(Replace( TdName1(1).GetRoProperty("innertext"),"取消","")," ",""))
转换后Num1为整形,此时可进行运算
十八、实现双击使用 FireEvent "ondblclick"
示例:
Set BrowserObject=Browser("NearMe市场后台 - 运营点组合").Page("NearMe市场后台 - 运营点组合").WebElement("html id:=conbination","html tag:=table")
Set Trs2=BrowserObject.Object.GetElementsByTagName("TR")
Trs2(2).GetElementsByTagName("TD")(0).FireEvent "ondblclick"
十九、html 标签A 带有href属性才能被QTP识别,否则需转换为html 对象,QTP才能
示例:
Set BrowserObject=Browser("NearMe市场后台 - 运营点组合").Page("NearMe市场后台 - 首页").WebElement("html tag:=table","html id:=table1")
Set Trs=BrowserObject.Object.GetElementsByTagName("TR")
For i=1 to Trs.length-1
If instr(Trs(i).outerhtml,TdName)>0 Then
Trs(i).GetElementsByTagName("A")(1).Click
Exit For
End If
Next
二十、杀毒软件阻止QTP点击跳转等操作
处理办法:退出杀毒软件
二十一、QTP中出现复制粘贴脚本失败、直接脚本失败,可能原因是脚本出现乱码
处理办法:在对应Action下打开Script.mts文件,将@@及其后乱码删除,重新保存即可完成修改
示例:ZJB_Manage后台,Login模块出现此问题
二十二、QTP获取class属性值是使用classname
示例:
Browser("…").Page("…").WebElement("…").WebElement("…").Object.Classname
二十三、获取列表中某行某列资源
'获取某一行某一列的元素
Function GetElementByPosition(ID,TrIndex,TdIndex)
Dim Oname
Set BrowserObject=Browser("..").Page("..").WebTable("html id:="&ID)
Set trs= BrowserObject.Object.getElementsByTagName("tr")
Set tds= trs(TrIndex)
Oname= trim(trs(trindex).children(TdIndex).innertext)
GetElementByPosition=Oname
End Function
二十四、精确点击某行按钮
'点击编辑、删除等按钮
Function ClickButton(Tag,ID,TdName, ButtonTag, PropertyName,ButtonName)
Set obj=Description.Create()
obj("html tag").value="TR"
Set tobj=Browser("…").Page("…").WebElement("html tag:="&Tag,"html id:="&ID).ChildObjects(obj)
For i=0 to tobj.count-1
TrName=tobj(i).GetRoProperty("innertext")
If instr(TrName,TdName)>0 Then
Set aobj=Description.Create()
aobj("html tag").value=ButtonTag
aobj(PropertyName).value=ButtonName
Set taobj=tobj(i).ChildObjects(aobj)
taobj(0).Click
Exit For
End If
Next
End Function
'点击缺少href属性的编辑、下架等无弹出框按钮
Function ClickButton(Tag,ID,IDIndex,TdName,ButtonTag,ButtonIndex)
Set BrowserObject=Browser(BrowserName).Page(PageName).WebElement("html tag:="&Tag,"html id:="&ID,"index:="&IDIndex)
Set Trs=BrowserObject.Object.GetElementsByTagName("TR")
For i=1 to Trs.length-1
If instr(Trs(i).outerhtml,TdName)>0 Then
Trs(i).GetElementsByTagName(ButtonTag)(ButtonIndex).Click
Exit For
End If
Next
End Function
'点击缺少href属性的删除等有弹出框按钮
Function ClickDel(Tag,ID,IDIndex,TdName,ButtonName,ButtonTag)
Set BrowserObject=Browser(BrowserName).Page(PageName).WebElement("html tag:="&Tag,"html id:="&ID,"index:="&IDIndex)
Set Trs=BrowserObject.Object.GetElementsByTagName("TR")
For i=1 to Trs.length-1
If instr(Trs(i).outerhtml,TdName)>0 Then
IndexNum=i
Browser(BrowserName).Page(PageName).WebElement("innertext:="&ButtonName,"html tag:="&ButtonTag,"index:="&IndexNum-1).Click
Exit For
End If
Next
End Function
二十五、通过一个元素获取同行的某列的元素
示例:
'通过一个元素获取同行另一元素
Function GetElementByAnotherElement(Tag,Ename,TdIndex,Index)
Dim Oname
Set BrowserObject=Browser("…").Page("…").WebElement("html tag:="&Tag,"innertext:="&Ename,"index:="&Index)
Set tr= BrowserObject.Object.parentElement
Oname= trim(tr.children(TdIndex).innertext)
GetElementByAnotherElement=Oname
End Function
二十六、点击列表中上移下移操作
示例:
'上移下移
Function ClickSpecialButton(Kname,Tname)
Set objs=Description.Create()
objs("html tag").value="TR"
Set tobjs=Browser("…").Page("…").Frame("main").WebElement("html tag:=table","html id:=table2").Object.GetElementsByTagName("TR")
For x=0 to tobjs.length-1
If instr(tobjs(x).innertext,Kname)>0 Then
Set obj=Description.Create()
obj("html tag").value="A"
Set tobj=tobjs(x).GetElementsByTagName("A")
For i=0 to tobj.length-1
If (instr(tobj(i).title,Tname)>0) Then
tobj(i).Click
Exit For
End If
Next
Exit For
End If
Next
End Function
二十七、如何获取下拉列表中的所有值
Dim stcount2,stnum2,rel2,stobj2
set stobj2=Browser(“XXX系统”).Page(“XXX平台”).Frame(“mainFrame_2″).WebList(“repositorySytleID”).Object
stcount2=stobj2.options.length
For x=0 to stcount2-1
stnum2=GetList(stcount2-1)
rel2=stobj2.options.item(stnum2).text
Next
Function GetList(i)
Randomize
GetList=RandomNumber(x,i)
End Function
二十八、对比时间大小
If Cdate(Result)>=Cdate("2012-05-01 09:01:00") and Cdate(Result)<=Cdate("2014-06-05 22:59:59") Then
insertDataBasenew "fseq", fseq,"pass" & time
else
insertDataBasenew "fseq", fseq,"fail" & time
End If
二十九、获取表格TR和TD数量
Set BrowserPage1=Browser("游戏中心后台管理").Page("游戏中心后台管理")
Set BrowserPageObject1=BrowserPage1.WebElement("html tag:=table","html id:=gc_026_002")
Set Tr1=BrowserPageObject1.Object.GetElementsByTagName("TR")
Tr1Index=Cint(Tr1.length)
Set Td1= Tr1(Tr1Index).GetElementsByTagName(“TD”)
Td1Index=Cint(Td1.length)
三十、网页刷新办法Refresh
Browser("NearMe市场后台 - 活动中心").Refresh
设置:IE浏览器——工具——管理加载项——BHOManager 开启
三十一、Function之间传递参数
Dim st
st=””
Function sti
st=1
st=st+1
End Function
Function sti2
msgbox st
End Function
sti2
sti
三十二、使用Do While
Do While instr(now,Td_TimeN)>0
ClickButton "table","tblMsgs",Td_TimeN,"A","innertext","删除"
If Browser("后台管理").Dialog("来自网页的消息").Exist(2) Then
Browser("后台管理").Dialog("来自网页的消息").WinButton("确定").Click
Else
Exit Do
End If
Loop
三十三、检查链接
在QTP中,对于网页链接的测试可以使用Link对象,例如下面的脚本用于对链接的地址进行检查:
‘ 对链接的地址进行检查
Browser("Welcome: Mercury Tours").Page("Welcome: Mercury Tours"
).Link("REGISTER").CheckProperty ("url"
,http://newtours.demoaut.com/mercuryregister.php)
其中使用了CheckProperty方法,用于对比Link对象的URL属性是否等于指定的地址。也可以使用Link对象的
Object属性中的href属性来进行比较,例如下面的代码所示:
href = Browser("Welcome: Mercury Tours").Page("Welcome: Mercury Tours
").Link("REGISTER").Object.href
‘ 如果地址不正确,则报告错误
If NOT href ="http://newtours.demoaut.com/mercuryregister.asp" Then
Reporter.ReportEvent micFail,"Link Error",href
ExitAction
End If
三十四、初始化执行用例
在For循环中添加
err.clear
三十五、网页执行时某个Action用例不执行
Action名称不能包含与VB启动脚本有相同的关键字(RUN)
三十六、获取下拉列表中某个指定元素(数组中的第几项)
'获取LIST表中的一个选项
Function getValueFromList(Lid,Index)
Set BrowserObject = Browser(BrowserName).Page(PageName).WebList("html id:="&Lid).Object
scount = BrowserObject.options.length
getValueFromList = BrowserObject.options.item(Index).text
End Function
三十七、最大化浏览器-----BrowserOperates longhwnd,1