确保你的IE运行正常
依次点击菜单
一:取消[自动完成]的设定
1. 开启IE浏览器,点选[工具]-〉[Internet选项]-〉[内容]
2. 点选 个人信息中的[自动完成],进入自动完成设置.
3. 取消[表单上的用户名和密码]选项
4. 点选确定,关闭对话框
二:
三:解决录制过程中显示弹出窗口问题 IE-> 工具->Internet 选项->安全->自定义级别
2011-03-10 11:41:03
Author :Terry Yu Orz : Terry's Station
方式1:Executefile2010-06-24 15:09:59
以下是我经常遇到的问题:
一、无法识别控件。
二、错误回放过程未知弹出窗口。
三、加载.net插件后和TD的关联问题。
四、动态加载元素的识别问题。
五、调用外部dll的问题。
六、随机验证码的问题。
问题一,解决办法有三种:
1、更改QTP自身对某控件的识别方式,在 tools——Object Identification 中。在这里列出了所有QTP能识别的控件,以及控件的识别方式。你可以给他添加X、Y坐标进行识别。或更明显的,列表中的信息,不按名称识别,而是按ID识别。这个修改可以解决一些问题,具体的赶紧动手试试吧……
2、使用虚拟物件,来定义一个控件,在 tools——Virtual Object 中。在这里可以自定义一个控件。例如在ASP的程序中,程序出错,在客户端的表现形式大部分是一样的,你可以把整个错误页面当成一个控件来识别(感觉不错)。如果加一个判断,出错后你想做什么就由你自己定了。
3、使用低级录制或鼠标录制。用 Test——LowLevelRecording/AnlogRecording 吧,用它录制就不需要什么设置了,他会记录你的程序控件相对屏幕的位置。用LowLevelRecording还有代码可改,用AnlogRecording动作就被封装了(维护性极差)。两者因实际环境更取其长吧……
问题二的解决过程:
关于弹出提示的问题,我当时需要情况是这样的。一个信息录入系统,由于数据量很大,查询需要一段时间。QTP回放时动作比较快,点了保存,程序还没反应过来它就进行了下一步操作。这时的操作就和录制时不一样了,程序给出一个提示,但这个提示是录制过程没有的。弹出框是一般都是POP形势(至上)的,导致QTP无法继续回放,结果就是回放失败。
解决办法有两个:
1、进行判断,当出现这个提示时,点是/否/取消按钮。
2、通过 Tools——Recorvery Scenario Manager 设置默认操作。
我最初就是用的第一种方法。写一个函数判断是否出现这个提示,如果出现就点“取消”然后wait(2)。 每个可能出现弹出框的动作后都调用一次这个函数。虽然可以解决这个问题,但回放的效率就低了,而且需要你预知提示框的信息。
当我知道了第二种方法,显然更科学^_^。它可以对所有预知甚至不知的提示进行指定的操作。
实际上,当程序出现了未预知的提示时,可能就是程序的BUG,所以使用上述办法解决工具问题时,也要考虑是否会掩盖程序的缺陷。
问题三的解决办法:
用好QTP后,会不自觉的和TD关联起来。但从TD直接启动QTP时,程序只会加载QTP自带的插件,如果你安装了其它插件(如.net、java、etc.),默认是不加载的。这会导致上传的脚本无法正确执行。解决办法很简单,去 Test——Setting里进行Modify 吧。从本地打开的脚本,这里不能进行Modify的。所以办法很简单,但如果不知道的话就很难了。当初为这个问题我可是废了八牛三虎之力呢……
问题四的解决过程:
当我开始改代码时,定义一个动作,然后可以生成N个动作。假设N个动作产生了N个结果,你要对这结果进行处理时,你会发现这N个结果都不能被识别:
网页上有个表格,是往数据库里加数据的。
两个表格显示在同一个页面上,左边为父表,右边为子表。
点击左表,右表显示其子项目。
结构如下:
A
├─1
├─2
├─3
└─4
B
├─1
├─2
├─3
└─4
……
思想很清晰:
添加一个父项A、选中此父项A、对其添加子项1、2、3、4
添加一个父项B、选中此父项B、对其添加子项1、2、3、4 ……
代码也很简单:
dim M '定义父项数
dim N '定义每个父项包含的子项数
For i=1 to M
Call 添加父项( i )
选中父项( i ) '问题就出在这里
For j=1 to bwfl step 1
Call 添加子项( j )
Next
Next
现在问题出来了,思路应该没有问题(除非这方法真的行不通),循环也是顺着思想来的。
问题是,无法实现选中的父项(最多识别到一个)。
由于此循环可以在录制过程进行,如果不改变变量名称,循环可且只可以成功运行一次。问题是这个名称都是从DataTable里获取的。
因为,在运行过程中生成的项目没有加到对象库中,无法被识别。
这个问题最后是从思想上解决的。答案是我做的是功能测试,为什么不先加父项,检查父项的功能是否正常,然后再去测子项的功能。不去改变名字,因为那没有必要。核心答案“功能测试、测试功能”。即对测试工具首先需要有正确的认识。
当然,这个问题可以用代码去实现,但那需要有一定的编程功底且耗时,可维护性不一定好。有需要的朋友可以去试一下,然后把你的经验也共享一下。问题五,是对QTP很大的一个扩充。
对于QTP调用外部DLL的功能,由于我的编程功底不够,没有相关人士配合我,我只能望之垂涎了!
如果能调用外部DLL的话,QTP的功能就可以变得很强大。自己写的程序,自己编一些过程用QTP进行测试,我想“后果很严重” 。真想有一次给我尝试的机会……
问题六,解决办法有4个:
1、测试的时候,让程序员把这块限制去掉,免去验证这关。
2、让程序员提供一个万能验证码,测试可以绕过这一关。
3、请程序员提供识别的方法,从获取的图片读出验证数据,再传给QTP。
4、进行位图检查,将验证码分段进行图像验证。
实际上,验证码的目的就是防止用程序灌水或机器录入信息。所以有点为难我们测试了。
方法1,如果程序已在发布并有客户使用,危险性是可想而知的。方法2虽然可以解决验证这一关,但跳过了输入码与验证码一致性问题。方法3就需要程序员配合了,可能就需要调用DLL了。方法4却将图像分段,把获取的图像和已经的图像进行比对,比对通过取对应的值;这个在数字验证会好做一点,因为最多就四个图像的比对。
2010-06-02 15:44:25
1.Q:runaction后面能不能接变量(动态调用act
2.Q:QTP8.2中调用VB函数的问题(用VBscrīpt写了一些测试脚本需要的几个通用函数,有没有办法可以用类似include的方式进行调用,而不需要每次都把这些函数Copy到新的脚本中)?
3.Q:QTP如何做回归测试(300多个TestCase,TD是否可以管理)
4.Q:qtp自动截图功能
5.Q:在QTP中如何设置使用别的浏览器(XP系统,用IE访问程序时,每次总提示屏蔽安装ActiveX插件,需要手动安装.但把这个过程录制到QTP后,回放一次是成功的。当我给某个输入框参数化了好多数据后,回放过程中,某些就会失败.
6.Q:checkpoint 检查网页,是否能实现只要网页出现乱码就返回错误报告?
7.Q:WSH的应用方法
8.Q;从EXCEL中导出数据进行测试
9.Q:关于dtGlobalsheet与dtGlobalsheet
10.Q:移动当前位置的行
11.Q:如何能记录到页面的校验码?(Output value能不能得到web页面的校验码,一般的校验码是由图片随即生成的 ,用QTP怎么录脚本在登陆前得到校验码并输入到校验码一栏)
12.Q:QTP正则表达式的帮助
13.自动测试实施计划
14.Q:一个Act
15.Q:如何管理QTP的源代码?(QTP生成的源代码比较多,而且和环境控件都有关,假如需要多人同时开发, 请问如何管理源代码?)
16:Q:脚本不能回放,IE中的AtiveX设置有问题??
17.Q: 如何参数化link
18. Q:QTP 在Debug狀態,在Export View 區域不能寫入任何東西
19.Q:动态变化值如何获取
20.Q:如何一一获得Table中 某栏 link 的 text?
21.Q:网页下拉框的选择
22.Q:将测试数据单独拿出来
23.Q:和TD连接
24:Q:处理Windows弹出窗口
25.Q:查询结果的比较
1.Q:runaction后面能不能接变量(动态调用act
A:脚本中原有RunAction "testbase [case1]", on
把引号中的内容放到Global表中的第22行,然后将代码修改为:
datatable.getsheet("Global")
datatable.setcurrentrow(22)
strLogin=DataTable("ActionName","Global")
RunAction strLogin, on
help中也有相关帮助
如:
Syntax
RunAction ActionName, [IterationMode , IterationRange , Parameters]
ActionName : String : The name of the act
2.Q:QTP8.2中调用VB函数的问题(用VBscrīpt写了一些测试脚本需要的几个通用函数,有没有办法可以用类似include的方式进行调用,而不需要每次都把这些函数Copy到新的脚本中)?
A:程序开头加上ExecuteFile "..\..\..\project\DeVariable.vbs"
3.Q:QTP如何做回归测试(300多个TestCase,TD是否可以管理) ?
A:TD可以实现,可以生成测试集,一个测试集可以包含若干个测试脚本
QTP8.2本身提供一个工具Test Batch Runner但是运行完没有报告。
MI有另一个工具叫MTM(multitestmanager)
4.Q:qtp自动截图功能
A:具体可参考此帖:http://www.51testing.com/cgi-bin ... d=17663&fpage=1
5.Q:在QTP中如何设置使用别的浏览器(XP系统,用IE访问程序时,每次总提示屏蔽安装ActiveX插件,需要手动安装.但把这个过程录制到QTP后,回放一次是成功的。当我给某个输入框参数化了好多数据后,回放过程中,某些就会失败.
可能有两个方面可以解决这问题1、每个动作设置延迟时间 2、设置为用别的浏览器。)
(失败的提示信息是 object not visible)
A:1.延迟可用WAIT X(X单位是秒)
2.可以安装插件添加新的浏览器
SystemUtil.Run "file” "params" "dir" "op'' "mode"
QTP运行可执行文件的方法及其参数
ps: 建议是用IE浏览器,或者IE内核浏览器做测试
6.Q:checkpoint 检查网页,是否能实现只要网页出现乱码就返回错误报告?
A:Text not displayed能解决问题
关于 Text Checkpoint 的总结。
1)Text Checkpoint 的检查部分分为三个部分。Checked Text 、Text Before 、Text After。在默认的情况下,Checked Text执行的是精确检查,其余两个部分执行的是模糊检查。Text Before(After)检查的内容可以比实际的内容少。但是不能有和是实际内容不相符的地方,否则就失败。
2) Exact match选项。如果选择了这个选项,三部分完全都进行精确检查。个人觉得和只检查checked Text部分没有区别。
3) Text not displayed。这个选项本质上就是一个结果取反的过程。就是把检查的结果给反过来,把pass变成Fail,Fail变成pass。我觉得这样就很容易理解。
7.Q:WSH的应用方法
A:WSH 实际上是一个脚本语言的运行环境,它之所以具备强大的功能,是在于其充分挖掘了脚本语言的潜力。因此,如果抛开脚本语言而空谈 WSH ,那实际上就没有了意义。而如果再展开来讲述脚本语言,显然就离开了今天的主题。
在这种情况下,只好采取一种折衷的方法:给大家推荐几个脚本文件利用 WSH 执行任务的实例,希望大家能通过这些例子对 WSH 的使用有一个初步的认识。
脚本文件的编写十分方便,你可以选用任意一个文字编辑软件进行编写,编写完成后,只需将它保存为 WSH 所支持的文件名就可以了(如.js 文件和.vbs 文件)。最常用的就是记事本编辑器,下面的实例都是以它作为工具编写的。
打开记事本编辑器,在上面编写如下内容:
Wscrīpt.Echo("走近 WSH")
将它保存为以 .vbs 或 .js 为后缀名(千万不要写成了 .txt)的文件并退出记事本。双击执行这个文件。
这一次,我们要利用 WSH 完成一次创建十个文件夹的工作。代码如下:
dim objdir
set ōbjdir=wscrīpt.createobject("scrīpting.filesystemobject")
for k=1 to 10
anewfolder="c:\chapter" & k
objdir.createfolder(anewfolder)
next
同样,将它存为 .vbs 文件并退出。运行后,我们会发现,C 盘根目录下一次性多出了十个新文件夹。
最后,再举一个在服务器上的运用。下面的代码将帮助你重新启动指定的 IIS 服务: ' define a constant for stopped services
Const ADS_SERVICE_STOPPED = 1
' get an ADSI object for a computer
Set ōbjComputer = GetObject("WinNT://MYCOMPUTER,computer")
' get an object for a service
Set ōbjService = objComputer.GetObject("Service","MYSERVICE")
' check to see if the service is stopped
If (objService.Status = ADS_SERVICE_STOPPED) Then
' if the service is stopped, then start it
objService.Start
End If
将它以 startsvc.vbs 为名保存在 C: 盘根目录。并通过如下命令执行:Cscrīpt C:\STARTSVC.VBS。运行后,经你指定的 IIS 服务项将被重新开启。
其实,在 Windows 的 samples 目录下,有个 WSH 文件夹,那里面有不少很具代表性的 .vbs 和. js 脚本文件。
此外,利用 WSH 还可以自己编写脚本文件来提高网络管理方面的效率。
8.Q;从EXCEL中导出数据进行测试
datatable.AddSheet("51sheet")
datatable.Imp
Dim i,RowCount '定义两个变量
i=0
RowCount=datatable.GetSheet("51sheet").GetRowCount '设置RowCount等于51sheet中的行数。
msgbox RowCount
Do while i<rowcount
i=i+1 '第一次进入循环,执行这句后,i=1
'datatable.getsheet("51sheet").setcurrentrow(i) 这句话被我注释掉了,正确的写法应该是下面这样,分开写。
datatable.getsheet("51sheet")
datatable.setcurrentrow(i)
'执行过上面两句后,CurrentRow是第一行。
tempData=DataTable.GetSheet("51sheet").GetParameter("Name").Value
'现在,我们调用msgbox看看下面这种调用方法得到的是什么值?没错,是第一行的值,下一次循环呢?
'得到的是第二行的值么?
msgbox "GetParameter-Name:"&tempData '这里弹出我们要看的值。
'下面我们用另外一种方法来得到。
msgbox "GetParameter-i:"&DataTable.GetSheet("51sheet").GetParameter(1).Value '这里我用GetParameter(1)去得到sheet中第一列的值。
loop
9.Q:关于dtGlobalsheet与dtGlobalsheet
1) dtGlobalsheet只有一个,它的index值比较特殊,它有两个index值,一个是1还有一个是内置的默认的1000。
你可以用1或者1000去引用它都是正确的。当然了,如果你用dtGlobalsheet来引用它也是正确的。这个sheet的Name叫做"Global"。注意:SheetName是区分大小写的。
2) dtLocalsheet可以用index:1001来引用,当然,也可以用2来引用。至于其它自定义的sheet嘛,你就只能用index:3来引用了。
它没有内置的默认的类似前两个那样的index值。
3) datatable这个对象只有一个。就是所有sheet的集合。或许你把它理解为excel文件比较好。
dtsheet呢?就是其中的每个sheet。所不同的就是MI为他们做了一些默认值。在我们的应用中,可能会有多个act
这些act
如果每个act
10.Q:移动当前位置的行
For i=1 to 3
datatable.getsheet("Global")
datatable.setcurrentrow(i)
DataTable("C","Global") = DataTable("nodename","Global") ‘把表Global中的nodename字段中的内容取出来。
Next
11.Q:如何能记录到页面的校验码?(Output value能不能得到web页面的校验码,一般的校验码是由图片随即生成的 ,用QTP怎么录脚本在登陆前得到校验码并输入到校验码一栏)
A:1)一个很简单的方法:测试时叫开发屏蔽掉检验码的功能后,再录制脚本。检验码的功能可以手工很简单测试出来。
2)想得到图片的校验码,唯一的方法就是跟程序员拿程序,然后自己在脚本里面写FUCNTION!
其它就要手动输入了!
12.Q:QTP正则表达式的帮助
A: QTP regular expr
13.自动测试实施计划
1)分析实施自动化测试可能存在的风险:就是决定是否实施, 用成本 时间 效果 。。
2)制定实施的时机:也就是在什么阶段
3)研究所要测试的功能 性能
4)分析在测试中可能遇到的问题 和困难
5)预估所需要的人时和相应的硬件
7)确定负责人员和相关测试人员
6)制定详细的测试计划 方案
7)最后是执行计划
14.Q:一个Act
例如:
-----------------------------------
'Act
Public strURL
...... ......
Function QueryList()
...... ......
...... ......
End Function
------------------------------------
'Act
'如何调用 QueryList函数和strURL
A:1)可以把这些变量和Function放在vbs文件作为resource文件共享,在每个Act
如果function中出现控件调用,那么必须确保该控件在相应的Act
2)定义一个可被调用的ACT
15.Q:如何管理QTP的源代码?(QTP生成的源代码比较多,而且和环境控件都有关,假如需要多人同时开发, 请问如何管理源代码?)
A: 一个是代码你可以通过vss,cvs等来进行管理
一个是通过td或者qc的基于用例的代码管理
其实第一种方法是基于版本控制来进行的,第二种方法是基于用例管理进行的
角度不同,管理方法也不同,不过团队协作需要的大家分工明确,进度控制。代码管理可以借鉴开发的方法。
16:Q:脚本不能回放,IE中的AtiveX设置有问题??
A: TOOL---OPTIONS----Ative screen
然后点开advanced..,把LOAD ACTIVEX CONTROLS打勾
TOOL---OPTIONS----Ative screen
然后点开advanced..,run scrīpts-->disabled!
17.Q: 如何参数化link
Browser("Browser").Page("Page").Sync
Browser("Browser").Navigate "http://www.51testing.com/cgi-bin/index.php"
Browser("Browser").Page("51Testing软件测试论坛---软件测试,软件质量工程师").Sync
Set tags=Browser("Browser").Page("51Testing软件测试论坛---软件测试,软件质量工程师").Object.links
Dim i,j, arr()
i=0
For Each element in tags
If Ucase(element.tagname)="A" and left(element.InnerText,1)="[" Then
ReDim Preserve arr(i+1)
arr(i)=element.InnerText
i=i+1
end if
Next
For j=0 to i
Browser("Browser").Page("51Testing软件测试论坛---软件测试,软件质量工程师").Link("[ 版主讨论区 ]").SetTOProperty "Text",arr(j)
Browser("Browser").Page("51Testing软件测试论坛---软件测试,软件质量工程师").Link("[ 版主讨论区 ]").Click
Browser("Browser").Back
Next
这段代码先是打开一个空的页面,然后输入url.
到达论坛首页。
然后得到所有版面的名称,也就是link的名称。
存到数组里面。
然后使用SetTOProperty更换录制时候录下的link的属性。
这时候再click
18. Q:QTP 在Debug狀態,在Export View 區域不能寫入任何東西
A: 如果你的目的是在debug过程中修改已执行过的命令,可以在Debug view的Command中执行命令,如重新执行已经执行过的命令,修改变量的值等等。
如:Window("Flight Reservation").WinEdit("Name:").Set "51testing"
已经执行,如果现在想修改“51testing”为“testing”,可以在command中执行
Window("Flight Reservation").WinEdit("Name:").Set "testing"
19.Q:动态变化值如何获取
A:VAL=Browser("欢迎使用我的工作台").Page("欢迎使用我的工作台").Frame("managePlace_7").WebRadioGroup("userAccountId_0").GetROProperty("Value")
Browser("欢迎使用我的工作台").Page("欢迎使用我的工作台").Frame("managePlace_7").WebRadioGroup("userAccountId_0").select val
20.Q:如何一一获得Table中 某栏 link 的 text?
A:通过上面link 的学习. 我终于融会贯通,完成了我的问题: 与大家共享:
//////////////////////////////////////////////////////////////////////////////////////
Browser("Login").Page("Page").Frame("contents").ViewLink("treeview").Image("Tplus").Click
Browser("Login").Page("Page").Frame("contents").ViewLink("treeview").Image("Tplus_2").Click
Browser("Login").Page("Page").Frame("contents").ViewLink("treeview").Link("开课设置").Click
Browser("Login").Page("Page").Frame("main").WebList("drpStatus").Select "任意"
Browser("Login").Page("Page").Frame("main").WebButton("查找").Click
Browser("Login").Page("Page").Sync
Dim finded,findCode,Nowout
'define a constrat for find
findCode = 110901
finded = false
Function MaxPage(pageString)
'msgbox pageString
Dim ilen,i,j
ilen = len(pageString)
i=ilen
While i>0
j = mid(pageString,i,1)
'msgbox j
If instr("123456789",j)>0 Then
MaxPage = j
'msgbox MaxPage
Exit function
End If
i=i-1
Wend
End Function
Dim trowcount,maxp
trowcount = Browser("Login").Page("Page").Frame("main_8").WebTable("开课代码").RowCount
msgbox "Rowcount: "&trowcount
Nowout = Browser("Login").Page("Page").Frame("main_8").WebTable("开课代码").GetCellData(trowcount,1)
Nowout = trim(Nowout)
maxp = MaxPage(Nowout)
msgbox "max page: "& maxp
Dim nowPage,checkid
For nowPage = 1 to maxp
If finded Then
Exit for
End If
' link to the 当前所需page
If nowpage>1 Then
Browser("Login").Page("Page").Frame("main_8").Link("[2]").SetTOProperty "Text","["&nowpage&"]"
Browser("Login").Page("Page").Frame("main_8").Link("[2]").Click
Browser("Login").Page("Page").Sync
end if
' Get the rowcount of table in now page
trowcount = Browser("Login").Page("Page").Frame("main_8").WebTable("开课代码").RowCount
msgbox "Rowcount: "&trowcount
'link every record in the table of the page
for i = 2 to trowcount - 2
Nowout = Browser("Login").Page("Page").Frame("main_8").WebTable("开课代码").GetCellData(i,2)
'msgbox i&": "&Nowout
checkid = "dgCourse:_ctl" &(i+1)& ":_ctl0"
Browser("Login").Page("Page").Frame("main_8").WebCheckBox("dgCourse:_ctl3:_ctl0").SetTOProperty "name",checkid
Browser("Login").Page("Page").Frame("main_8").WebCheckBox("dgCourse:_ctl3:_ctl0").Set "ON"
Browser("Login").Page("Page").Frame("main_8").Link("0901").SetTOProperty "Text",Nowout
Browser("Login").Page("Page").Frame("main_8").Link("0901").Click
Browser("开课设置详细信息").Page("开课设置详细信息").Sync
'wait(1)
msgbox "begun"
msgbox findCode
msgbox Nowout
msgbox "finished"
If trim(findCode) = trim(Nowout) Then
finded = true
msgbox "find is ok!"
wait(2)
Exit for
End If
Browser("开课设置详细信息").Close
Browser("Login").Page("Page").Sync
next
Next
21.Q:网页下拉框的选择
A:For i =1 to 10
Randomize
IndexNum=Int((10 - 5 + 1) * Rnd + 5)
Browser("Mercury Tours").Page("Find Flights_2").WebList("arrive").Select "#"&IndexNum
wait(3)
Next
Sub ChildObjects_Example()
'The following example uses the ChildObjects method to find all the
'list objects on a Web page, and then to select an item in each list.
Set ōDesc = Descrīption.Create()
oDesc("micclass").Value = "WebList"
Set Lists = Browser("Mercury Interactive").Page("Mercury Interactive").ChildObjects(oDesc)
NumberOfLists = Lists.Count()
For i = 0 To NumberOfLists - 1
Lists(i).Select i + 1
Next
End Sub
22.Q:将测试数据单独拿出来
A:取得一个
Browser("Browser").Page("").WebList("fid").GetItem (1)
取得全部
Browser("Browser").Page("").WebList("fid").GetROProperty("all items")
以下可以在自带的例子中实现
Window("Flight Reservation").WinComboBox("Fly From:").Select "Frankfurt"
a=window("Flight Reservation").wincombobox("Fly From:").GetItem(1)
reporter.ReportEvent 2,"下拉列表的值",a
23.Q:和TD连接
A:在QTP中不是有个Quality Center Connection,选择服务器连接,服务器处输入类似http://computer_name/tdbin,其中computer_name为服务器的名字,连接后在测试结果中添加defect就可以与TD相连了。
24:Q:处理Windows弹出窗口
A:IF Not Window("Flight Reservation").Exist(1) Then
'Calling open flight
If not Dialog("Login").Exist(1) Then
Browser("管理系统").Dialog("Microsoft Internet Explorer").WinButton("确定").Click
End If
25.Q:查询结果的比较
这是查询一个字段的,对查询结果多页的情况也涉及了,其实应该把所有查询字段联合起来的,也就是改改sql语句和判断条件。
[i]Set Conn = CreateObject("ADODB.Connection")
Set Rs = CreateObject("ADODB.Recordset")
Conn.Open "Descrīption=kml-it;DRIVER=SQL Server;SERVER=KML-IT;UID=sa;PWD=password;APP=QuickTest Professional;WSID=KML-MICHELLE;DATABASE
2010-04-26 11:44:08
1,不执行 IF num1 <> 0 and nums = num1 Then
原因:nums=Browser("**************").Page("************").Frame("PageFrame_2").Object.getElementById("ctl00_cntGrid2_IoPagination1_lblRecSum").innertext 是字符串型的,num1是数字型,类型不匹配,所以不执行,但程序并没有报错,只是不执行这句,走了else
2,
set table=Browser("****************").Page("*************").Frame("PageFrame").Object.getElementById("ctl00_cntGrid1_dgdData")
set rowsobj=table.rows
For i=1 to rows-1
cells=rowsobj(i).cells.length
If cells=9 then
msgbox "Rst(0)="&Rst(0)&"rowsobj(i).cells(3).innertext==="&rowsobj(i).cells(3).innertext
If Rst(0)=rowsobj(i).cells(3).innertext Then
不知为什么第一行数据的行号(rows)是1????
3, If j = num1 Then 中j不等于num1
j放到了for循环的里面,导致j的结果不准确了 ,
20100205:
QTP无法录制选中下拉菜单(winMenu)的步骤
解决方法:利用低级录制,按下下拉菜单项的快捷键
20100222:
在windows 20003上安装TD8.0失败,安装到40%到50%时,提示"Automaiton error the system cannot find the path specified Creating Virtual Directory failed"
网上查到的原因:
TD安装后,将部署到IIS的默认网站下,如果默认网站中的有一点变化,都会导致TD失败,所以一般在IIS安装后,第一个安装TD
将使用的解决方案:
新建一个干净的windows 2003 的虚拟机到本机上,
20100223:
点击run开始运行,无法执行脚本,弹出“can't find object....virifiy 。。application” 用obj spy查看对象,发现web对象被识别成winObject
解决方法:
网上资料:工具->Internet选项->程序->管理加载项
QTP用来识别Web元素的控件BHOManager Class由禁用改为启用后QTP就可以恢复正常
但其实本机的BHOManager Class确实是启用状态,只好使用将其改为禁用再改为启用的方法来解决web对象被识别成winObject的问题,同时也解决了无法执行脚本,弹出“can't find object....virifiy 。。application”的问题
2010-04-07 11:31:58
其次,自动化测试的测试环境。因为程序发布时肯定有测试环境,也有开发环境。开始我认为自动化只是在测试环境,不能在开发环境进行。但后来一件事情改变了我的看法。今天正式环境发现查询的下拉列表数据出不来。其实,这个正式环境的问题就可以用自动化测试来解决。我们也可以在正式环境中做一些通用的,但不做业务操作的自动化测试。
再一个问题,就是自动化测试的实施。自动化测试应该是在系统每次上线时都对其他已有的功能进行一遍自动化测试,确保程序的稳定。对一些需要长期投入人力开发的项目,自动化测试还是很有用的。但对一些短期项目,自动化测试就作用不大了。
再剩下的问题就是自动化测试框架了。这个框架我也没有研究过。不过对于自动化一开始就实施框架,我觉得不是太好。也许应该等到公司自动化实施一段时间,时机成熟了,再实施框架会好一些。
2010-02-06 11:27:52
b. 给【对象,输入值,输出值】通过【datatable,环境变数,外部文件读入】进行参数化
2010-02-06 11:03:14
2010-02-06 11:01:56
2010-02-06 11:00:47
序曲
假设现在有一个Excel文件:D:\data.xls,里面的具体内容如下:有两个Sheet,第一个叫Login,第二个叫InsertOrder;下面就详细的说一下DataTable是如何操作这些数据的:
正文
DataTable.Import "D:\data.xls" '将data.xls中第一个叫Login表单内容导入到Test的Global表单中,将InsertOrder表单的内容导入到Test的LoginAction表单中,依次类推;感觉怪怪的,所以这个方法比较适合只导入Excel中第一个表单的内容
DataTable.ImportSheet "D:\data.xls","Login","LoginAction"'将data.xls文件中的Login表单内容导入到当前Test的LoginAction表单中
DataTable.GetSheet("Global").SetNextRow'设置下一行,红色表示要操作的表单名字
columnCount = DataTable.GetSheet("Global").GetParametercount'取得Global表单中的总列数
DataTable.GetSheet("Global").DeleteParameter ("列名")'运行时向Global表单中删除列
DataTable.GetSheet("Global").SetPrevRow'设置上一行
cellValue = DataTable.GetSheet("Global").GetParameter("列名")'取得Global表单中某列的值,可以这样写:DataTable.Value("列名","表单名字"),我喜欢这种写法
rowCount = DataTable.GetSheet("Global").GetRowCount'取得Global表单中的总行数
DataTable.GetSheet("Global").SetCurrentRow(3)'设置当前行为第3行
DataTable.Value ("列名", "表单名字")="twf"'运行时设置某列值,例如DataTable.Value ("username", "LoginAction")="twf"
DataTable.Export "D:\result.xls"'将当前Test的所有表单(LoginAction和InsertOrderAction、Global)中的所有内容全部导出到result.xls中
DataTable.ExportSheet "D:\result.xls","LoginAction"'将当前Test的LoginAction表单中的内容导出到D:\result.xls文件中
有问题多多指教,共同进步!您的关注会使俺快乐!!!
2010-02-06 10:51:43
对于其不能准确识别的对象,QTP会把它识别成WinObject类型,这时常常会导致相应的测试脚本录制工作无法继续进行下去。
这几天在使用QTP的过程中,遇到这种情况,有些QTP曾经能识别的Web页面对象,在后来没法正确识别,用spy察看会发现识别为WinObject类型了,解决办法总结如下:
一、 察看在IE的加载项中,QTP用来识别Web元素的控件是否被禁用,如下图所示,把BHOManager Class由禁用改为启用后QTP应该恢复正常。
进入IE加载项的步骤:
工具->管理加载项 或者
工具->Internet选项->程序->管理加载项
二、如果用第一步的方法不能解决问题,则把QTP关闭重新打开,不行则重启电脑。
2010-02-06 10:43:39
|
确保你的IE运行正常
依次点击菜单
一:取消[自动完成]的设定
1. 开启IE浏览器,点选[工具]-〉[Internet选项]-〉[内容]
2. 点选 个人信息中的[自动完成],进入自动完成设置.
3. 取消[表单上的用户名和密码]选项
4. 点选确定,关闭对话框
二:
三:解决录制过程中显示弹出窗口问题 IE-> 工具->Internet 选项->安全->自定义级别
2009-11-17 16:03:30
' 演示环境 http://newtours.demoaut.com/mercuryreservation.php51Testing软件测试网 F V G c1? J Z 如图,知道其中黄色部分,要找到器绿色部分的信息,同时,在本页找不到的情况下,翻页继续找,直到最后一页! 具体代码如下: Browser("欢迎使用信贷综合管理系统").Window("查询 -- 网页对话框").Activate If Set Link = Browser("欢迎使用信贷综合管理系统").Window("查询 -- 网页对话框").Page("查询").WebTable("序号").ChildItem(row, 1, "Link", 0) Link.Click 同时,webtable常用的方法还有 if Browser("欢迎使用信贷综合管理系统").Window("查询 -- 网页对话框").Page("查询").WebTable("序号").Exist then reporter.ReportEvent 0,"pass","系统显示了所有的资讯列表!" else end if‘获取表格行数:51Testing软件测试网'i D C7t2i T `4pb l |
2009-11-17 14:07:55
2009-11-13 11:45:24
当前电脑上安装的是IE7或以上版本,安装完QTP8.2,打开之后发现无法显示Active Screen,
原因:IE7卸载,恢复IE6,(我将QTP也重装了)之后打开QTP可以显示Active Screen
疑问:在恢复IE6之后不知道需不要再重装QTP,因为当时QTP也存在其他问题,所以顺便把QTP也重装了。
2009-09-23 16:02:16
2009-09-23 15:08:15
录制时:1,QuickTest 启动时,不要在加载项管理器中加载不必要的加载项。这将缩短录制时间并提高测试运行性能。
2,如果编辑测试时没有使用Active Screen,请在编辑测试时隐藏Active Screen 以缩短编辑反应时间。选择“视图”>“Active Screen”,或切换Active Screen 工具栏按钮隐藏Active Screen。
3,1)如果正在测试Windows Applications,可以选择在每一步保存所有的Active Screen 信息、只在某些步骤保存信息或完全禁用Active Screen 捕获。可以在“选项”对话框中的“Active Screen”选项卡上设置该首选项。
2)如果正在测试Web 应用程序,则可以禁用Active Screen 中所有步骤的屏幕捕获。在“选项”对话框中的“Active Screen”选项卡上,单击“自定义级别”打开“自定义Active Screen 捕获设置”对话框。
[选择“禁止Active Screen 捕获”选项。这将缩短录制时间。]
运行时:1,在“快速模式”下运行测试。在“选项”对话框中的“运行”选项卡上,选择“快速”选项。这将指示QuickTest 运行测试而不为每个步骤显示执行箭头,从而加快测试运行速度。
当保存一个新测试,或使用“另存为”用新名保存测试时,可以通过清除 “保存”或“另存为”对话框中的“保存Active Screen 文件”选项。如果已经完成了测试设计并且计划将测试只用于测试运行时,该操作尤其有用。没有Active Screen 文件的测试打开速度更快,并且使用的磁盘空间明显更少。
确定希望何时为测试结果捕获并保存应用程序图像。在“选项”对话框中的“运行”选项卡上,从“将步骤屏幕捕获内容保存到结果中”框中选择一个选项。可以通过保存屏幕捕获内容(仅在某些情况下),或根本不保存图像来缩短测试运行时间和减少磁盘空间。
提示:保存无Active Screen 文件的测试后,如果需要恢复Active Screen 文件,请重新录制必要的步骤或使用“更新运行”选项为测试中的所有步骤重新捕获屏幕。
2009-09-23 14:59:22
2009-09-23 10:45:03
2009-09-21 16:31:55
VbWindow("frmLogin").VbEdit("txtUserID").Set "admin"
VbWindow("frmLogin").VbButton("Login(L)").Click
VbWindow("frmMain").WinMenu("Menu").Select "Template Manager(T)"
VbWindow("frmMain").VbWindow("frmTemplates").WinListView("ListView20WndClass").Select(0), micRightBtn
Dim wshShell
Set wshShell=CreateObject("WScript.Shell")
For i=1 to 1
wshShell.SendKeys "{DOWN}"
Next
wait 1
wshShell.SendKeys "{ENTER}"
VbWindow("frmMain_2").VbWindow("frmTemplates").VbWindow("FrmDocumentType").VbButton("Add(A)").Click
VbWindow("frmMain_2").VbWindow("frmTemplates").VbWindow("FrmDocumentType").VbWindow("FrmInput").VbEdit("Text1").Set DataTable("DoucmentTypeName", dtGlobalSheet)
2009-09-21 12:25:36
代码是check checkpoint(),你需要在check后面加一个(),使代码变为check .(checkpoint())并且在整行的前面加上一个变量(变量无需提前定义)如
a = Browser("").Page("").Frame("reportFrame").Check (CheckPoint("列表"))
这样检查点的返回值就可以被a记录下来,那么就可以通过判断a的值来确定检查点是否通过
清空Cookie - 联系我们 - 51Testing软件测试网 - 交流论坛 - 空间列表 - 站点存档 - 升级自己的空间
Powered by 51Testing
© 2003-2021
沪ICP备05003035号