QTP:所遇问题及部分笔记

(N久前的笔记,估计用到的机会几乎没有了,不过放在这里吧,也算是个小历史了)

1      常见问题

1.1     Action切割

 

1.2     单独action循环

需要将循环的action的参数,放置在改循环的范围内,不能放在全局范围内,否则无法走循环。

1.3     录制不上

有时候会遇到录制不上但操作或运行却能走通的情况

l  编写脚本,首先将录制不上的对象,添加至已录制的脚本中:

资源——对象库

 

选择对象

 

l  在“Keyword View”页面点击空行,选择“object from repository”

l  选择刚才添加的对象,然后去“Expert View”页面将相应的顺序调节正确。

2       注意问题

2.1     对象名称修改

 选中左侧对象,右侧name即可修改

3       获取

3.1     当前时间

nowtime=FormatDateTime(now, 2)

需要什么格式的时间,在控制面板——区域和语言选项中设置。
 

3.2     字符串

3.2.1        获取字符串全部内容

GetROProperty

例如:

msg1=.Frame("审核通过框").WebElement("审核完毕框").GetROProperty ("outertext")

3.2.2        抽取字符串部分内容

a= Browser("T***L").Page("T***L").Frame("生成数据包及报文").WebElement("审核通过数").GetROProperty ("outertext")

msgbox Mid(a, 14,1)

注:Mid(a, 14,1),即从第14个字符串开始截取,取1个字符。

3.2.3        切割字符串返回数组

a=.WebTable("name:=003","html tag:=TABLE").GetROProperty ("outertext")

b=split(a," ") (用空格切割)

msgbox b(12) (读取数组中第12个的内容)

3.3     存在

Exist

例如:

Browser("T***L").Page("T***L").Frame("修改ZT页面").Image("N").Exist

3.4     获取Data Table当前的行数

curow=datatable.GetSheet (dtLocalSheet).GetCurrentRow

4       数据库

4.1     连接

Dim adocnn ‘定义ADO连接对象

Dim connectionstr ‘定义数据库连接字符串

‘获取数据库连接字符串

Connectionstr=”Driver=MySQL ODBC”

5       判断

5.1     字符串是否被包含

pos=InStr(a,b)  (a包括b)

If pos>0 Then

        reporter.ReportEvent micPass,"PASS","PASS"

        ELSE

        reporter.ReportEvent micFail ,"pass","Failed"

End If

注:a,b为变量,所以没有加引号, a有没有包含b

参考地址:http://www.cnblogs.com/ywb-lv/archive/2012/01/22/2328843.html

例如:

msg1=.Frame("审核通过框").WebElement("审核完毕框").GetROProperty ("outertext")

If instr(msg1,"已审核完毕!请重新选择")>0 Then

        reporter.ReportEvent  micPass ,"补充报送_报告审核_审核通过:审核通过的报告","Passed"

        else

        reporter.ReportEvent  micFail ,"补充报送_报告审核_审核通过:审核通过的报告","Failed"

End If

5.2     是否存在

If  .Frame("修改ZT页面").Image("N").Exist  Then

    reporter.ReportEvent  micPass, "KY_BLZT校验:异常校验。"&"第"&curow&"行:","Passed"

        else

    .Frame("提示框").WebButton("关闭").Click

        reporter.ReportEvent  micFail, "KY_BLZT校验:异常校验。"&"第"&curow&"行:","Falied"

5.3     如存在则输入

If  .Frame("修改ZT页面").WebEdit("ZT说明").Exist Then

     .Frame("修改ZT页面").WebEdit("ZT说明").Set DataTable("说明", dtLocalSheet)

       else

 End If

5.4     将查询的行数插入表格

datatable.Value ("sjrows",dtLocalSheet) =.WebTable("name:=selALLId","Class Name:=WebTable","html tag:=TABLE").GetROProperty("rows")

curow=datatable.GetSheet (dtLocalSheet).GetCurrentRow

5.5     QC自动提交bug定位表格行数和输入信息

curow=datatable.GetSheet (dtLocalSheet).GetCurrentRow

reporter.ReportEvent  micFail ,"查询_"&curow&"行_"&"CTNM:"&CTNM&",CTID:"&CTID&",SMID:"&SMID&",Risk_level:"&risk_level,"Failed"

(定位出错的行数和录入的信息,这样便于开发或测试人员快速找到bug存在的原因)

5.6     判断查询结果是否符合预期

datatable.Value ("sjrows",dtLocalSheet) =.WebTable("name:=selALLId","Class Name:=WebTable","html tag:=TABLE").GetROProperty("rows")

curow=datatable.GetSheet (dtLocalSheet).GetCurrentRow

If DataTable("sjrows", dtLocalSheet) =DataTable("yqrows", dtLocalSheet) Then

      reporter.ReportEvent micPass ,"个人kh信息_查询","Passed"

      else

      reporter.ReportEvent  micFail ,"个人kh信息_查询_"&curow&"行_"&DataTable("备注", dtLocalSheet)&"。CTNM:"&CTNM&",CTID:"&CTID&",Risk_level:"&risk_level,"Failed"

End If

5.7     查看判断

With Browser("T***L").Page("T***L")

.Frame("个人kh信息").Link("name:=JLL水晶11").Click

title1=.Frame("基本信息").GetROProperty ("title")

a=.Frame("基本信息").WebElement("个人kh基本信息").GetROProperty ("outertext")

b=instr(a,"JLL水晶11")

.Frame("基本信息").Link("JY信息").Click

title2=.Frame("JY信息").GetROProperty ("title")

.Frame("JY信息").Link("报告履历").Click

title3=.Frame("报告履历").GetROProperty ("title")

.Frame("报告履历").Link("账户列表").Click

title4=.Frame("账户列表").GetROProperty ("title")

.Frame("账户列表").WebButton("关闭").Click

End With

If title1="查看个人kh" and title2="查看个人kh" and title3="查看个人kh" and title4="查看个人kh"    and b>0 Then

        reporter.ReportEvent  micPass ,"个人kh信息_ZT名称链接","Passed"

        else

        reporter.ReportEvent  micFail ,"个人kh信息_ZT名称链接","Failed" 

End If

Browser("T***L").Page("T***L").Sync

Browser("T***L").Close

6       其他

6.1     导入(编辑框WebFile)

With Browser("T***L")

.Page("T***L").Frame("补充通知管理").Link("导入").Click

.Page("T***L").Frame("导入窗口").WebFile("浏览").Click

.Page("T***L").Frame("导入窗口").WebFile("浏览").Set "D:1项目管理5FFF4造数据1标准ZT-STAN_CTIF.xls"

.Dialog("选择要加载的文件").WinButton("打开(O)").Click

.Page("T***L").Frame("导入窗口").WebButton("执行导入").Click

End with

注:因为这个地方一般情况下,浏览框中无法直接输入,所以需要先点击一下,这样就可以自动输入了。

参考地址:

http://www.cnblogs.com/ruily/archive/2010/12/27/1917791.html

6.2     延迟执行

wait 60 (60单位:秒)

6.3       转化变量类型

6.3.1        返回变量类型

VarType(varname)

VBEmpty 0 Empty(未初始化)
VBNull 1 Null(无有效数据)
VBInteger 2 整数
VBLong 3 长整数
VBSingle 4 单精度浮点数
VBDouble 5 双精度浮点数
VBCurrency 6 货币值
VBDate 7 日期
VBString 8 字符串
VBObject 9 对象
VBError 10 错误值
VBBoolean 11 布尔值
VBVariant 12 Variant(只与变体中的数组一起使用)
VBDataObject 13 数据访问对象
VBDecimal 14 十进制值
VBByte 17 位值
VBUserDefinedType 36 包含用户定义类型的变量
VBArray 8192 数组

参见:http://blog.sina.com.cn/s/blog_48fe95cb010008k7.html

6.3.2        整数转变为文本

CStr(a)  转换为字符串string类型, a为整数Integer类型

除了将 Integer 变量转换为文本外,CStr 函数还可以应用于任何数值数据类型,如 Double 或 Long。它还可以用来将 Date 和 Boolean 数据类型转换为文本。

参见:http://www.lob.cn/jq/kfjq/2295.shtml

6.3.3        数值变算

在处理 Integer 变量时,可以在算术运算中使用 CDbl(转换 (Convert) 为 Double)函数返回一个小数。下面的步骤演示了如何在两个整数相除时使用 CDbl 函数。

Dim A As Integer = 1

Dim B As Integer = 2

MsgBox(CDbl(A / B))

该代码声明两个 Integer 变量(A 和 B),将值 1 和 2 赋给它们,然后使用 CDbl 函数转换除法运算 (A / B) 的结果并将结果显示在一个消息框中。会显示一个内容为 0.5 的消息框。

Integer 变量仅能保存没有小数点的数值数据。String 变量仅能保存文本。使用名为 CStrConvert to String 的简写形式,表示转换为字符串)的特殊函数可以将 Visual Basic 中的每个变量转换为文本。

Dim anInteger As Integer = 54

MsgBox(CStr(anInteger))

此代码声明一个名为 anInteger 的 Integer 变量,将值 54 赋给它,再通过调用 CStr 函数将此值转换为文本,并将其显示在一个消息框中。

除了将 Integer 变量转换为文本外,CStr 函数还可以应用于任何数值数据类型,如 Double 或 Long。它还可以用来将 Date 和 Boolean 数据类型转换为文本。

Visual Basic 还具有用于其他类型的数值变量的函数。例如,如果添加了两个 Double 类型的变量,并希望将结果四舍五入为最近似的整数,请使用CInt 函数。

参见:http://www.lob.cn/jq/kfjq/2295.shtml

6.3.4        文本转为数值

CINT(1234)

一个string变量值为1234,我想将他转换成int变量

 参见:http://bbs.csdn.net/topics/10293015

6.3.5        时间控件无法识别且不允许手动输入 

手工识别控件后脚本如下

Browser("理论线损在线计算系统").Page("理论线损在线计算系统").WebEdit("startdate").Set "2010-01-01"

问题:该时间控制不允许手工输入时间,只能进行选择时间,无法录制或运行时报错:object is disabled

解决办法

将上面的脚本替换为如下脚本

Browser("理论线损在线计算系统").Page("理论线损在线计算系统").WebEdit("startdate").Object.value="2010-01-01"

注:此方法同样适用于下拉选择框不允许用户手动输入的情况。

参见:

http://blog.163.com/lxr9427695@126/blog/static/43096244201061111627884/

7       诡异现象

脚本编写过程中经常出现诡异现象,命名编写正确,就是执行结果不正确。

这时只能将以前的脚本注释掉,重新编写,不要浪费时间一遍遍run脚本了。

如下面:

If  .Frame("修改ZT页面").Image("N").Exist  Then

     reporter.ReportEvent micPass ,"KY_BLZT校验:异常校验。"&"第"&curow&"行:","Passed"

else

reporter.ReportEvent  micFail   ,"KY_BLZT校验:异常校验。"&"第"&curow&"行:","Failed"

(***上面不成功,下面的成功)

If  .Frame("修改ZT页面").Image("N").Exist  Then

    reporter.ReportEvent  micPass, "KY_BLZT校验:异常校验。"&"第"&curow&"行:","Passed"

        else

    .Frame("提示框").WebButton("关闭").Click

        reporter.ReportEvent  micFail, "KY_BLZT校验:异常校验。"&"第"&curow&"行:","Falied"

 
原文地址:https://www.cnblogs.com/jxba/p/9218688.html