-
依次勾选复选框,并进行修改的函数
2007-11-20 18:26:32
Function Get_Ran(i)
Randomize
Get_Ran=RandomNumber (0,i)
End FunctionFunction chsnext(brws,page,frame,webtb,webtn)
Dim rows,i,j,pages,pagecount
set ōbjtb=Browser(brws).Page(page).Frame(frame).WebTable(webtb)
rows=cint(objtb.rowcount)
pages=objtb.getcelldata(rows,1)
pagecount=cint(mid(pages,9,1))
For j=1 to pagecount
If j>=2 Then
Browser(brws).Page(page).Frame(frame).WebEdit("pageno").Set j
Browser(brws).Page(page).Frame(frame).WebButton("跳转").Click
rows=Browser(brws).Page(page).Frame(frame).WebTable(webtb).rowcount
else
rows=Browser(brws).Page(page).Frame(frame).WebTable(webtb).rowcount
End If
For i=2 to rows-1
set ōbjcb=Browser(brws).Page(page).Frame(frame).WebTable(webtb).childitem(i,1,"WebCheckBox",0)
objcb.Set "ON"
Dim k,n
k=Get_Ran(4)
Browser(brws).Page(page).Frame(frame).WebButton("修改").Click
Browser(brws).Page(page).Frame(frame).WebEdit("PROD_SERVICE/SERVICE_CODE").Click
n=Get_Ran(2000)
Browser(brws).Page(page).Frame(frame).WebEdit("PROD_SERVICE/SERVICE_CODE").Set i&n
Browser(brws).Page(page).Frame(frame).WebList("PROD_SERVICE/SERVICE_TITLE_COD").Select "#"&k
Browser(brws).Page(page).Frame(frame).WebButton("提交").Click
Browser(brws).Dialog("Microsoft Internet Explorer").WinButton("确定").Click
Next
Next
End Functionchsnext "xxx系统登陆","xxx系统","result","服务编码","下页"
其中:set ōbjcb=Browser(brws).Page(page).Frame(frame).WebCheckBox("index:="&i-1)
这句也可以用childitem的方法,脚本如下:
set ōbjcb=Browser(brws).Page(page).Frame(frame).WebTable(webtb).childitem(i,1,"WebCheckBox",0)用描述性编程的方法也可以依次勾选复选框,脚本如下:
Dim objckb,objwcb,i,objcb,objwle,num,text,j
Set ōbjckb=descrīption.Create
objckb("micclass").value = "WebCheckBox"
set ōbjwcb=Browser("NYBOSS系统登陆").Page("NYBOSS系统").Frame("result_22").Childobjects(objckb)
set ōbjwle=Browser("NYBOSS系统登陆").Page("nyboss系统").Frame("result").WebTable("服务编码")
num=cint(objwle.rowcount)
set ōbjwle=objwle.childitem(num,1,"WebElement",0)
text=objwle.getroproperty("innertext")
pages=cint(mid(text,9,1))
For j=1 to pages
If j>=2 Then
Browser("NYBOSS系统登陆").Page("nyboss系统").Frame("result").WebButton("下页").Click
End If
For i=1 to objwcb.count-1
set ōbjcb=Browser("NYBOSS系统登陆").Page("NYBOSS系统").Frame("result_22").Childobjects(objckb)
objcb(i).Set "ON"
Next
Next -
根据webtable中某个cell的数据勾选前面的复选框
2007-11-16 14:36:42
set ōbjtb=Browser("Browser").Page("page").Frame("frame").WebTable("用户编码")
For i=2 to int(objtb.rowcount)
If objtb.GetCellData(i,4)=555100611 Then
set ōbjcb=objtb.childitem(i,1,"WebCheckBox",0)
objcb.Set "ON"
end if
Next其中555100611是webtable中某行第4列的数据。
如果某个cell内的数据是字符串,则用下面的语句判断:
If trim(objwb.GetCellData(i,3))="无设备包年" Then
-
随机选择webtable中的某一个复选框
2007-11-16 14:09:55
首先通过add object添加WebTable对象(如果没有录到)
set ōbjtb=Browser("Browser").Page("page").Frame("frame").WebTable("用户编码")
randomize
i=Rnd*int(objtb.rowcount)
set ōbjcb=objtb.childitem(i,1,"WebCheckBox",0)
objcb.Set "ON" -
如何点选webtable中需要的某一行
2007-11-13 10:43:02
function finddata(brws,page,frame,webtb,text,webelm,link)
Dim i,rows,k,pageno,m,pages,pagecount
set ōbjs=Browser(brws).Page(page).Frame(frame).WebTable(webtb)
rows=objs.rowcount
pages=objs.getcelldata(rows-1,1)
If mid(pages,4,1)<>"条" Then
pageno=cint(mid(pages,8,1))
pagecount=cint(mid(pages,12,1))
else
pageno=cint(mid(pages,7,1))
pagecount=cint(mid(pages,11,1))
End If
found=false
For m=1 to pagecount
For i=1 to rows
If trim(objs.getcelldata(i,1))=text Then
set ōbj=Browser(brws).Page(page).Frame(frame).WebElement("name:="&webelm,"innertext:="&text)
obj.click
found=true
Exit for
End If
next
if m=2 and found=false Then
If pageno=1 Then
Browser(brws).Page(page).Frame(frame).Link(link).Click
rowno=objs.rowcount
elseif pageno=2 then
rowno=objs.rowcount
End If
For i=1 to rowno
If trim(objs.getcelldata(i,1))=text Then
set ōbj=Browser(brws).Page(page).Frame(frame).WebElement("name:="&webelm,"innertext:="&text)
obj.click
found=true
Exit for
end if
Next
end if
Next
end functionfinddata "xxx管理系统","xxx管理系统","main","节目名称","test","增加","下一页"
-
怎样实现翻页勾选需要的复选框
2007-11-08 18:30:24
翻页勾选复选框
Function findtext(bws,page,frame,wbtable,text)
Dim i,rows,pages,m,pagen,pageno,found,j
set ōbjs=Browser(bws).Page(page).Frame(frame).WebTable(wbtable)
rows=Browser(bws).Page(page).Frame(frame).WebTable(wbtable).rowcount
pagen=objs.childitem(rows-1,1,"WebElement",0).getroproperty("innertext")
pageno=cint(mid(pagen,1,1))
pages=Cint(mid(pagen,4,1))
found=false
For m=1 to pages
If m=1 Then
If pageno=1 Then
rowno=Browser(bws).Page(page).Frame(frame).WebTable(wbtable).rowcount
elseif pageno=2 then
Browser(bws).Page(page).Frame(frame).WebButton("上页").Click
rowno=Browser(bws).Page(page).Frame(frame).WebTable(wbtable).rowcount
End If
For i=1 to rowno
If trim(objs.getcelldata(i,2))=text then
set ōbj= Browser(bws).Page(page).Frame(frame).WebCheckBox("index:="&i-1)
obj.Set "ON"
found=true
Exit for
end if
Next
End If
if m=2 and found=false Then
If pageno=1 Then
Browser(bws).Page(page).Frame(frame).WebButton("下页").Click
rowno=Browser(bws).Page(page).Frame(frame).WebTable(wbtable).rowcount
elseif pageno=2 then
rowno=Browser(bws).Page(page).Frame(frame).WebTable(wbtable).rowcount
End If
For i=1 to rowno
If trim(objs.getcelldata(i,2))=text then
set ōbj= Browser(bws).Page(page).Frame(frame).WebCheckBox("index:="&i-1)
obj.Set "ON"
Exit for
end if
Next
end if
Next
End Functionfindtext "nyboss系统","nyboss系统","resultiframe","用户编码",usrcode
-
代替检查点的一种方法
2007-11-07 15:16:35
当用描述性编程的方法时,或者要判断某个对象属性的一部分时,checkpoint就不好用了,下面是一种
代替设置检查点的一种方法,脚本如下:
Dim i
set ōbjs=Browser("NYBOSS系统登陆").Window("-- 网页对话框").Page("产品选择").Frame("result").WebTable("产品编码")
i = 1
while not trim(objs.getcelldata(i,3))= "同方IC卡"
i = i + 1
WendBrowser("NYBOSS系统登陆").Window("-- 网页对话框").Page("产品选择").Frame("result").WebCheckBox("index:="& i-1).Set "ON"
chkpoint=Browser("NYBOSS系统登陆").Window("-- 网页对话框").Page("产品选择").Frame("result").WebCheckBox("index:="& i-1).getroproperty("value")
If instr(chkpoint,"同方IC卡")<>0 Then
reporter.reportevent 0, "同方IC卡", "找到了同方IC卡"
else
reporter.reportevent 1, "同方IC卡", "没找到同方IC卡"
End If -
TD 8.2移植
2007-11-07 10:04:10
第一次把该覆盖的文件都覆盖后,发现project directory的路径中始终是以前服务器的名字,终于找到了该路径的方法,具体移植过程如下:
本文档目的:将服务器server1上的TD8.0下的项目移植到服务器server2上的TD8.0上
本文档项目实现环境:
工具:TD8.0
数据库:sql server2000
操作系统:win2000 sp4
本文档约定:Server1上TD8.0下的相关环境如下:
服务器名:server1
数据库:Sql Server2000
被移植项目:zb_test
项目所在域:zb_tb
项目在sql中的数据库名字:zb_tb_zb_test_db
项目所在目录:c:\TD_DIR\zb_td\zb_test
Server2上TD8.0下的相关环境:
服务器名:server2
数据库:Sql Server2000
现有项目:新配置服务器,尚未建立项目
现有在域:已经建立域zb_tb(与server1上域名一致)
项目在sql中的数据库名字:尚未移植数据库
项目所在目录:c:\TD_DIR\zb_td\
关于TD8.0的项目文件存放说明:
TD8.0的项目文件存储两个地方:
1、安装TD时建立的目录C:\TD_DIR,
本目录安装时默认在C盘,如果你在安装时修改了路径及文件夹名字,请以实际情况为准。
该目录说明如下:
该目录包含第一级文件夹
_scrīpts (该文件夹用途不明)
Default (该文件夹为系统示例项目的域)
ZB_TD (该文件加为用户自己建立的于)
…… (第一级文件夹为域文件夹)
在各级域文件夹下为具体的项目文件夹:
Default\ Demo_DB_0 (系统示例项目)
ZB_TD\ zb_test (本次移植项目)
…… (第二级文件夹为项目文件夹)
2、数据库。
本文档为sqlserver2000数据库存储,在sqlserver的企业管理器中可找到相应项目的对应的数据库。系统默认建立的数据库名字为:域名+项目名+db,本文档移植数据库为:zb_tb_zb_test_db
项目移植需要移植的文件:1、C:\TD_DIR下的域文件夹及其子文件夹(项目文件夹)。建议将_scrīpts也复制过去,Default为示例项目,示例项目数据库为access,这里不做移植。
2、数据库文件。需要在sqlserver的企业管理器中将数据库分离或备份,然后附加或还原到新服务器server2的sqlserver下。
移植步骤:假设:server2上已经装好了TD8.0,已经按server1上的域创建了需要的。
操作步骤:
1、在server1使用管理员用户(admin)登录进入TD的 site adminstratir模块
2、选择将要移植的项目,这里选择zb_td域下的zb_test项目
3、右键选择‘Deactivate project’,将选中项目(zb_test)设置为‘不活动状态’,(图标右边变红)
4、右键选择‘Remove project’,将选中项目(zb_test)从TD中移除(放心,这里非删除,但是切勿选择‘Delete project’,否则项目将被彻底删除)
5、将server1上C:\TD_DIR下的文件夹‘_scrīpts’和除了Default之外的其他文件夹,复制到server2上的C:\TD_DIR下(不要修改文件夹的名字),覆盖server2上的文件夹
6、将server1上sqlserver2000中的项目数据库分离或者备份,然后将数据库文件或者备份文件复制到server2的数据库目录下,附加或者还原到server2的sqlserver2000上(注意不要修改数据库的名字,比如原来数据库在server1上叫zb_tb_zb_test_db,附加或者还原到server2上还叫zb_tb_zb_test_db)
7、修改项目配置文件。配置文件位于每个C:\TD_DIR每个项目的文件夹下,名字叫Dbid.ini。
比如本文档描述项目该文件在:C:\TD_DIR\ZB_TD\ZB_TEST\Dbid.ini.
该文件内容如下:
[General]
Database_Type=MSSQL //表示项目数据库类型为sqlserver
Created_Date=11/07/07 01:06:31 //数据库创建时间
Created_By=td //数据库为td创建
AliasName=zb_test //项目名称
Database Name=zb_td_zb_test_db //sqlserver2000中项目数据库的名字
Database Server=server1 //数据库所在服务器的机器名
Domain Name=ZB_TD //项目所在的域名SendAllQualified=N
Has_VCS_DB=N
本文档移植项目需要改动的地方。Database Server=server2 。
如果你按前面描述操作没有修改数据库名字和C:\TD_DIR下文件夹的名字,只修改该处即可。否则按上面的说明对应你修改内容修改相应的配置。
8、在server2使用管理员用户(admin)登录进入TD的 site adminstratir模块
9、点击‘Restore project’按钮 。
10、出现一下 窗口。在Restore Into Domain 中选择要移植的域,然后点击‘DBID.INI file Iocation’后的连个点,\\server2\TD_DIR\ZB_TD\ZB_TEST\DBID.INI
(注意:该路径只能为网络路径,即使在本机上也需要输入网络路径格式,选择时可通过网上邻居选择本机的共享目录:TD_DIR)11、路径和文件选择正确后将出现下面界面:
12、选择Restore,成功后返回界面如下:
13、此时项目已经添加进来,处于未激活状态
14、右键选择‘Activate’,激活后完成移植。
完成后如图,经测试原数据和汉化字段,设定的流程都不受影响,可正常使用。经验证,用access数据库同样可以移植成功。
-
怎样用描述性编程的方法勾选复选框?
2007-11-07 09:47:12
根据webtable中的某个数据,勾选所在行前面的复选框,可用描述性编程的方法实现,脚本如下:
Dim searchFlag,searchStr,i,j,num,obj,webobj,webtbl
Set webtbl=descrīption.Create
webtbl("micclass").value="WebTable"
set webobj=Browser("NYBOSS系统登陆").Window("-- 网页对话框").Page("产品选择").Frame("result").ChildObjects(webtbl)
num=webobj.count
searchStr = "同方IC卡"
searchFlag = FalseFor j=0 to num-1
Set ōbj=webobj(j)
searchFlag = False
For i = 1 to obj.RowCount
If trim(obj.getcelldata(i,3))=searchStr Then
searchFlag = True
Exit for
End If
Next
If searchFlag=True Then
Exit For
End If
NextIf searchFlag=True Then
Browser("NYBOSS系统登陆").Window("-- 网页对话框").Page("产品选择").Frame("result").WebCheckBox("index:="&i-1).Set "ON"
Else
msgbox searchStr & " has not found."
End If -
怎样把Excel表格中的数据依次读入到QTP中?
2007-11-05 16:28:17
可使用如下方法: Dim i,rows
DataTable.ImportSheet "E:\temp\UU_No.xls","UU","Global"
i=0
rows=datatable.GetSheet("Global").GetRowCount
Do while i<rows
i=i+1
Browser("NYBOSS系统登陆").Page("NYBOSS系统").Frame("mainbody").WebEdit("SYS_CONTROL_PARAMETER/UU_START").Click
Browser("NYBOSS系统登陆").Page("NYBOSS系统").Frame("mainbody").WebEdit("SYS_CONTROL_PARAMETER/UU_START").Set DataTable("StartNo", dtGlobalSheet)
Browser("NYBOSS系统登陆").Page("NYBOSS系统").Frame("mainbody").WebEdit("SYS_CONTROL_PARAMETER/UU_END").Click
Browser("NYBOSS系统登陆").Page("NYBOSS系统").Frame("mainbody").WebEdit("SYS_CONTROL_PARAMETER/UU_END").Set DataTable("EndNo", dtGlobalSheet)
Browser("NYBOSS系统登陆").Page("NYBOSS系统").Frame("mainbody").WebEdit("SYS_CONTROL_PARAMETER/UU_GRADE").Click
Browser("NYBOSS系统登陆").Page("NYBOSS系统").Frame("mainbody").WebEdit("SYS_CONTROL_PARAMETER/UU_GRADE").Set "100"
Browser("NYBOSS系统登陆").Page("NYBOSS系统").Frame("mainbody").WebButton("处理").Click
Browser("NYBOSS系统登陆").Page("NYBOSS系统").Frame("mainbody_2").WebButton("确定").Click
datatable.getsheet("Global")
datatable.setcurrentrow(i) loop -
执行脚本前怎样关闭所有的ie窗口,再打开被测系统的地址?
2007-11-05 16:27:25
systemutil.CloseProcessByName("iexplore.exe") SystemUtil.Run "C:\Program Files\Internet Explorer\iexplore.exe","","","" Browser("NYBOSS系统登陆").Page("NYBOSS系统登陆").Sync Browser("NYBOSS系统登陆").Navigate http://10.1.1.200:8090/boss/page/login.jsp -
QTP8.2中调用VB函数的问题
2007-11-05 16:25:57
程序开头加上ExecuteFile "C:\libs.vbs" -
如何根据webtable中某个表格的内容勾选所在行复选框?
2007-11-05 16:24:17
如果没有录制到webtable对象,可以用add object的方法,先添加该对象,然后增加下面的脚本:
Dim i set ōbjs=Browser("NYBOSS系统登陆").Window("-- 网页对话框").Page("产品选择").Frame("result").WebTable("产品编码") i = 2 while not trim(objs.getcelldata(i,3))= "同方IC卡" i = i + 1 WendBrowser("NYBOSS系统登陆").Window("-- 网页对话框").Page("产品选择").Frame("result").WebCheckBox("index:="& i-1).Set "ON"
注: 用do while...loop的方法一样可以实现。而且webtable里的内容录制下来结尾有空格,故要用trim去掉空格,才能找到webtable里的数据。
-
如何从Glogal或Local表中取数并放到文本框中?然后把取到的数放到另一个文本框中?
2007-11-05 16:17:42
用DataTable,GetRoProperty, 附值等方法。脚本如下: Browser("NYBOSS系统登陆").Page("NYBOSS系统").Frame("mainbody_7").WebEdit("inputInfo/ic/icNo").Set DataTable("ICCARD_NO", dtGlobalSheet) code=Browser("NYBOSS系统登陆").Page("NYBOSS系统").Frame("mainbody_7").WebEdit("inputInfo/ic/icNo").GetRoProperty("value") Browser("NYBOSS系统登陆").Page("NYBOSS系统").Frame("mainbody_8").WebEdit("EQU_VD_BIND/ICCARD_NO/criteria").Click Browser("NYBOSS系统登陆").Page("NYBOSS系统").Frame("mainbody_8").WebEdit("EQU_VD_BIND/ICCARD_NO/criteria").Set code -
为何QTP与TD连接总是失败?
2007-11-05 16:16:30
原来是因为TD的端口号不用默认的80,而是改成了:6000,所以连接时server应输入: http://10.1.1.199:6000/tdbin, 然后点击connect,就可以成功了。 连接成功后,以前Tools>Options>Run 下的submit a defect to quality center for each failed step也从原来灰的变为可以选择了! 也有可能是防火墙不能自动识别QTP和TD程序,可以手动添加三个程序,即可:D:\Program Files\Mercury Interactive\QuickTest Professional\bin\QTPro.exe, D:\Program Files\Mercury Interactive\QuickTest Professional\bin\TDReport.exe, C:\Program Files\Common Files\Mercury Interactive\TD2000_80\wexectrl.exe -
为什么装了QTP以后,总是不能录制脚本
2007-11-05 16:15:18
问题起因:
在安装QTP后,或者禁用IE浏览器里的一些ActiveX控件后,正常录制QTP事,不能产生相应的录制脚本,脚本内容为空。
解决方法:根据实践,我发现QTP在IE中录制脚本是依靠一个叫BHOManager Class的动态链接库来完成的。当这个控件没有被加载,或者被禁用时,就会出现上述症状。于是,解决方法就很简单了,重新加载,或启用这个控件,一切就OK啦。
具体步骤:
打开IE,在菜单中选择[工具]/[Internet选项]进入Internet配置界面。选择[程序]/[管理加载项],查看目前加载的ActiveX的情况。
当看到存在BHOManager Class并且其状态是“禁用”时,点击“启用”开启这个功能,并保存后退出即可解决问题。
当在管理加载项里找不到BHOManger Class这个加载项时,如果你安装了QTP,那么在C:\WINDOWS\system32下会存在一个叫BHOManager.dll的动态链接库,或者可以直接在计算机里搜索BHOManager.dll,然后查看其路径。加载这个dll,加载方法为:点击[开始]/[运行],输入cmd,然后定位到dll所在目录,键入regsvr32 BHOManager.dll命令,即可注册此dll。问题解决。 我遇到的是在管理加载项里找不到BHOManger Class这个加载项,cmd, cd\, c:\windows\systems32\regsvr32 BHOManager.dll回车后,就成功加载了,重新录制,搞定。 -
回放时下拉框无法识别
2007-11-05 16:13:21
第一种方法:用属性描述的方式,脚本如下所示: Browser("NYBOSS系统").Page("NYBOSS系统").Frame("result").WebList("name:=MOVEDEVICE/SUBSCRIBER_ID","html tag:=SELECT").Click Dim codes codes=randomnumber(0,1) Browser("NYBOSS系统").Page("NYBOSS系统").Frame("result").WebList("name:=MOVEDEVICE/SUBSCRIBER_ID","html tag:=SELECT").Select "#"&codes 第二种方法:在Web Event里把WebList的onclick,onblur,onchange,onfocus 加上,enabled即可。 -
怎样把Action1中的输出值作为参数传递给Action2中的输入值?
2007-11-05 14:34:42
a. 在Action1中选取要输出的文字:在Activer Srcreen中,框选住作为输出值的文字,点右键,点insert text output,点Modify,修改作为输出参数的名字,点OK。 b. 在KeyView中,点Action1,点右键,点Action Properties,在onput parameter中点+,增加一行,并在name中输入输出值的参数名字。 c. 在KeyView中,点Action2,点右键,点Action Properties,在input parameter中点+,增加一行,并在name中输入输出值的参数名字。d. 把Action2中需要替换参数的数据用参数替换,选择Action Parameter, Name选输出值参数的名字,点ok。
e. 把该参数列在Global中,以便调用。
-
计算错误的解决方法
2007-11-05 14:28:47
由于QTP录制动作很快,金额输入后,找零的金额不会自动算出,同样需要输入应收金额后按回车,找零才会正
确,增加脚本如下:
Browser("NYBOSS系统登陆").Page("中广温州有线BOSS系统").Frame("result_5").WebEdit("BILL_CHECKOUT/ACT_BILL_FEE").FireEvent("onfocus") set WshShell =CreateObject("Wscrīpt.Shell") WshShell.SendKeys "{ENTER}" -
回放不能自动关闭浏览器,导致重复回放失败
2007-11-05 14:26:59
录制时直接关闭浏览器,或者在脚本的最后加上: Browser("WZBOSS系统登陆").Close -
回车键录制不了的解决方法
2007-11-05 14:20:38
在Set "x"语句后面增加以下脚本,即可: Browser("WZBOSS系统登陆").Page("中广温州有线BOSS系统").Frame("result").WebEdit("SUB_SUBSCRIBER/BLOCK_NAME").Set "x" Browser("WZBOSS系统登陆").Page("中广温州有线BOSS系统").Frame("result").WebEdit("SUB_SUBSCRIBER/BLOCK_NAME").FireEvent("onfocus") set WshShell =CreateObject("Wscrīpt.Shell") WshShell.SendKeys "{ENTER}"