这两周我开始学习QTP测试我们的web服务了;大体的软件使用操作流程是懂了,但具体实施起来特别是代码的组织及函数应用还有一些困难,因为自己只会vb没学习vbscript,所以想和大家交流一下代码等一些基础知识;呵呵,一起学习,加强记忆与应用。
1 生产随机数列
第一种方法
1. Randomize '更新返回的数据(Initialize random-number generator)
2. Function rand(k)
3. n = Int((k-1)* Rnd +1)
4. rand = n
5. End Function
复制代码
第二种方法
1. n=randomnumber.value(1,255)
复制代码
2 当运行到表中的某一行,自动导出表中的所有数据
1. row=datatable.getcurrentrow
2. if row="5" then
3. datatable.export("d:\data.xml")
4. end if
复制代码
3
1. webedit("txtpass").setsecure"sdsdf...."
复制代码
如果参数化密码,可以直接在数据表中写入未加密的密码,它会自动识别,即不用把setsecure改为set
4 如果弹出对话框就获取上面提示信息并与表中的信息对比,不统一证明弹出的提示出错,主要用来验证
1. if browser("web_name").dialog("dialog_name").exist(1) then'如果不出现=false
2. error_message=browser("web_name").dialog("diaglog_name").static("用户密码错误!".getRoproperty("text")
3. if error_message<>(datatable.value("error_info"))then
4. msgbox(error_message)
5. end if
6. browser("web_name").dialog("diaglog_name").close
7. end if
复制代码
这里我总结了两点技巧:
一是:对于dialog中,虽然提示信息对象名称是"用户密码错误",但如果信息对象名称是“该用户不存在”,不用更改会自动识别,我想主要是录制第一遍时,“用户密码错误”只是让运行时能找到这个控制,而不管它是什么内容,因为在对象仓库中,text不是决定该对象的属性
二是:如果对于提示信息比较长的,可以用mid(error_message,n,m)取一部份特征提示信息进行验证,这样我想可以节省处理时间,又可以避免长度以及空格等字符的处理
5 datatable.value("num")只在global形式下的一种省略形式;完整形式
是:
1. datatable.value("num",dtlocalsheet)
复制代码
5.1 向某一列的单元格赋值:
1. datatable.value("column_name",dtlocalsheet)="nanjing"
复制代码
5.2 取得某一行具体值:
1. datatable.setcurrentrow(n)
2. msgbox(datatable.getsheet("global").getparameter("column_name").Rawvalue)
3. 或者kk=datatable.Rawvalue("column_name","action1")
复制代码
5.3 在run-time时,动态添加表格与数据
1. kk=datatable.addsheet("sheet_name").addparameter("column_name","value").name;
复制代码
6 wintreeview一些操作
1. 选择一个条目:wintreeview.select(item)'根是0
2. 根的名称:wintreeview.getitem(0)
复制代码
7 数据库检查点模块:
1. sub database_check
2. set con=createobject("adodb.connection")
3. con.open "Description=IBM_ODBC;DRIVER=SQL Server;SERVER=IBM;UID=sa;"&_
4. "PWD=123456;APP=Quick Test Pro;WSID=IBM;DATABASE=IBM_table"
5. 'access方式:con.open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=d:\test.mdb"
6. 'Orocle方式:con.open "DRIVER={Oracle in OraHome92};SERVER=CESHI;UID=CND_TEST;PWD=CND;DBQ=CESHI;DBA=W;APA=T;EXC=F;XSM=Default;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;GDE=F;FRL=Lo;BAM=IfAllSuccessful;MTS=F;MDI=Me;CSR=F;FWC=F;PFC=10;TLO=O;"
7. set record=createobject("adodb.recordset")
8. sql="select*from ibm_one_table"
9. record.open sql,con
10. DO
11. if(record("ibm_table_column")="kai")then'//查找表格中有多少kai
12. num=num+1;
13. end if
14. record.movenext
15. loop until record.eof=true
16. record.close
17. set record=nothing
18. con.close
19. set con=nothing
20. end sub
复制代码
8 换行符
1. vbcr----chr(13)回车符// vblf----chr(10)换行符
2. vbcrlf----chr(13)+chr(10)结合//type(chr(13)就相当于按了一上键盘上的enter
复制代码
9 Run from step有两种方式:
1. 在Keyword View模式会从本步骤运行到所有action结束
2. 在expert view模式仅会将本action运行结束
复制代码
10 由于对象属性原因,无法识别对象
1. -----对于对象属性是变化的,可以参数化/或者用正则表达式
2. -----报匹配多个对象错误,可以spy查看对象,添加一个该对象另一个唯一标识属性
3. -----有时可以删除对象的变化的属性来解决识别问题
4. ------对于多个完全相同的对象,可以采用添加index,location,createtime等特殊属性来识别
5. (index:按照程序源码,绘制对象的先后标识对象,所以与其它相同对象是相互依赖,当其它对象发生
6. 变化后,原先的所有对象index属性要发生变化,开始是0;如index:=0;
7. location:根据对象的位置进行确定,从上到下,从左到右;
8. CreateTime:按照对象被浏览器打开的先后标识对象)
9. ------另外换一种思维方式,采取等效的方法;比如用键盘代替鼠标或用操作系统本身特性去解决问题
复制代码
11 对系统文件的操作
1. 11.1 从系统的文件中获取信息及删除文件
2. get_file_infor("c:\she.mpg")
3. function get_file_infor(url)
4. dim fso,f
5. set fso=createobject("scripting.filesystemobject")
6. set f=fso.getfile(url)
7. f.name:f.size:f.type:f.datacreated'///获取文件信息
8. fso.deletefile(url)'/////删除文件
9. end function
10.
11. 11.2 获取文件夹里所有文件信息
12. get_folder_infor("c:\kai")
13. function get_folder_infor(folder)
14. dim fso,f,f1,n
15. set fso=createobject("scripting,filesystemobject")
16. set f=fso.getfolder(folder)
17. set fc=f.files
18. for each f1 in fc
19. select case f1.name
20. case"kai.mpg","she.mpg","dd.mp3"'//检查文件夹里是否含有这些文件
21. end select
22. next
23. end function
复制代码
12 等待某个对象出现方法
1. y=......waitproperty("visible",true,10000)
复制代码
13 防程序中断方法
1. On error resume next
2. On error goto handle
复制代码
14 数组的应用:
1. name=array(1,2,"aa","bb")
2. name(2)="aa"
复制代码
15 正则表达式应用模板
1. 进行日期YYYY-MM-DD的格式检查 :
2. Function RegExpTest(patrn, strng)
3. Dim regEx, Match, Matches ' Create variable.
4. Set regEx = New RegExp ' Create a regular expression.
5. regEx.Pattern = patrn ' Set pattern.
6. regEx.IgnoreCase = True ' Set case insensitivity.
7. regEx.Global = True ' Set global applicability.
8. Set Matches = regEx.Execute(strng) ' Execute search.
9. For Each Match in Matches ' Iterate Matches collection.
10. RetStr = RetStr & "Match found at position "
11. RetStr = RetStr & Match.FirstIndex & ". Match Value is '"
12. RetStr = RetStr & Match.Value & "'." & vbCRLF
13. Next
14. RegExpTest = RetStr
15. End Function
16. date_pattern="^((((19|20)(([02468][048])|([13579][26]))-02-29))|((20[0-9][0-9])|(19[0-9][0-9]))-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((01,3-9])|(1[0-2]))-(29|30)))))$"
17. result_message=RegExpTest(date_pattern, inputbox("请你输入要检查的时间:"))'用其它正则表达式更改此处
18. Select case result_message
19. Case ""
20. msgbox("你输入的日期格式与标准不匹配")
21. case else MsgBox(result_message)
22. end select
复制代码
16 返回一个字符串在另一字符串中的位置
1. instr(string1,string2)
复制代码
17 有时回放出现找不到对象时,可能不是由于你的代码问题,而是由于你的操作系统等设置问题;
1. 举例说明1:
2. 比如:你录制一个选择磁盘中的文件动作
3. 会录制为:
4. .winlistview(" ").drap 46,99
5. .winlistview(" ").draponitem "she.mp3"
6. 下次录制的时候,如果你的系统文件改为不显示扩展名,下次执行的时候,QTP就找不到she.mp3,只能找到she;
7. 举例说明2:
8. 有时由于不同操作系统以及不同的ie,导致有些窗口不能识别,比如在2000下弹出的网页对话框的标题是:
9. “web对话框",而在2003上是”网页对话框"
复制代码
18 "is+*"类型function
1. isarray'是否是数组
2. isconnected'判断QTP是否连接到TD
3. isdate'是否是合法的日期类型
4. isempty'判断是否初始化
5. isNull'判断是否为空值
6. isNumeric'判断是否是数字型
7. isobject'判断是否一个功能对象
8. isready'判断设备是否准备就绪
9. isRootFolder'是否是根目录
复制代码
19 Action之间的参数传递
1. 例如:在Action1中,有如下代码:
2. out_str="This is out_string"
3. RunAction "Action2",oneIteration,out_str
4. 在Acton2中,在其step->Action Properties中的,input参数栏,加入out_str后,
5. msgbox(parameter("out_str")),就能正确显示参数了
复制代码
20 WScript.Shell的一些应用
1. set WshShell =CreateObject("WScript.Shell")
2. WshShell.SendKeys "{ENTER}" '模拟键盘进行操作
3. WshShell.AppActivate "Calculator" '启动应用程序
复制代码
21 获取对象属性名称用法:
1. GetRoProperty----从应用程序界面上获取对象属性(即,是脚本运行时,获取的对象动态属性值)
2. 例如:获取对象库中index属性值,似乎只能用GetToProperty,因为应用程序界面上对象没有该属性,只是
3. QTP为识别该对象创立的描述属性;
4. GetToproperty----从对象库中描述对象的属性,静态值
5. GetToProperties----获取用于标识对象的属性集;对于这个集合,有count等属性方法
复制代码
22 FireEvent的使用
可以对一个对象进行更复杂的操作
1. 如:FireEvent("onfocus") '使一个控件获取焦点
2. FireEvent("ondblclick") '实现双击/也可以在事件设定中针对该对象事件响应
复制代码
23 模板的应用
1. -----新建一个文本,输入一些新建Action时常包含的信息,然后保存为ActionTemplate.MST文件,
2. 并复制到QTP/dat目录下;这样每次新建action都会包含固定的信息了;
3. 例如:
4. '-------------------脚本说明---------------
5. '产品版本: __Build( )
6. '测试员:
7. '编写日期:
8. '测试功能:
9. '脚本类型:
10. '被测试对象初始状态:
11. '进展程度:
12. '基本思路:
13. '主要功能函数:
14. '历史修改:
15. '没解决的问题:
16. '--------------------脚本内容-------------
复制代码
24 在对象库中,两个对象有时不能通过更改属性或命名来达到两个对象完全一致的替换;
在web-mod项目中,我在对象库里添加了一个自动含有index标识属性的对象,然后每次通过SetToproperty来改变
index值,对对象进行数据驱动,使其操作另一个对象,但脚本始终操作原先index属性值的对象;后来,把该对象
删除掉,重新添加一个不自动含有index标识属性的该类对象,然后,手工添加,index标识属性,后来脚本能正常 工作了,可见两次的对象属性完全一致,但形成方式不一样,导致的结果往往也不一样。
25 childobject的应用
1. childobject可以返回界面上满足条件的对象集合,而且与对象库里是否有这些对象无关,这就可以简化对象库;
2. 返回的对象集合的count方法可以返回对象个数,这就可以通过下标对单个对象进行操作;在出现index标识对象时
3. 可以进行运用
4. 如:Set m_WinCheck=Description.Create()
5. m_WinCheck("nativeclass").Value="Button"
6. set All_WinCheck=Window("").Dialog("").Childobject(m_WinCheck)
7. n=All_WinCheck.Count()
8. for i=0 to n-1
9. All_WinCheck(i).Set "ON"
10. next
复制代码
--以上是一些简单基础内容及我的经验心得,欢迎大家贴一些特色代码或具体应用的核心代码,谢谢!
26 Create Log File:
1. Dim LOGFile, fso, MyFile
2.
3. LOGFile="C:\Log.txt"
4. Set fso = CreateObject("Scripting.FileSystemObject")
5. If fso.FileExists(LOGFile) = False Then
6. Set MyFile = fso.CreateTextFile(LOGFile, True)
7. MyFile.Close
8. end if
9. Set MyFile = fso.OpenTextFile(LOGFile, 8, True)
10. MyFile.WriteLine("")
11. MyFile.WriteLine(" " & Cstr(Now) & " ---------------------------------------------------------")
12. MyFile.WriteLine("LOG Information!")
13. MyFile.Close
复制代码
27 对于经常由于ghost系统,需要再次配置QTP参数,可以参考以下方法,写一个vbs,对QTP自动配置;
qtApp_configture_for_LMS.vbs (2.94 KB)
28 数据输入输出方法
1. 数据输入输出的方法:
2. 1 ExecuteFile"e:\kk.vbs"
3. 2 Environment.LoadFromFile("e:\k.xml")
4. 3 Datatable.ImportSheet/Import
5. 4 GetData from DataBase
6. 5 Datatable autofill
7. 6 Action input/output
8. 7 Use GetxxProperty to get data from Object
9. 8 Use Some Function to Product data
复制代码
29 插入同步等待某个对象出现
1. Dim continue
2. continue = False
3.
4. While not continue
5. wait(1)
6. continue = Window("航班预订").Exist
7. Wend
复制代码
30 异常控制
1. If Window("航班预订").Dialog("航班预订").Exist Then
2. Set myStatic = Description. Create()
3. myStatic("nativeclass").Value="Static"
4. Set myObject=Window("航班预订").Dialog("航班预订").ChildObjects(myStatic)
5. ErroInfo = myObject(0).GetRoProperty("text")
6. Reporter.ReportEvent micFail,"时间输入", ErroInfo
7. Window("航班预订").Dialog("航班预订").WinButton("确定").Click
8. ExitActionIteration
9.
10. End If
复制代码
分享到:
相关推荐
通过学习和理解这个VB编写的按键精灵源码,开发者不仅可以掌握VB的基础语法和API调用,还能深入了解自动化工具的实现原理,这对于提升编程技能和解决实际问题非常有帮助。在深入研究源码时,建议逐步分析每个模块的...
我觉得王正林老师编写的这本书不错,它适合于有一定MATLAB基础知识,但是想学学数值算法和提高编程能力的朋友。附件为这本书的大量科学计算算法源代码,对我们掌握MATLAB程序设计,编写规范、高效的程序,以及培养和...
复制代码经过对比,对于目标边界清晰的图片,RGB颜色模型的效果很不错,结果在贴图中。 2、分割出来的交通标志,为了便于二值化处理,强烈建议将背景黑色转成白色,这里标准模板只处理了20几张(考虑到可能用不到...
同时,评分85分表明这个项目在大多数方面都做得不错,具有一定的参考价值。 源代码部分是学习者最直接的学习材料。通过阅读和分析代码,可以学习到Java编程的技巧,例如如何使用面向对象的思想设计类,如何利用Java...
交通灯控制系统是城市交通管理的基础,通常由嵌入式系统负责,而ARM处理器由于其低功耗、高性能的特点,在嵌入式领域广泛应用。 在描述中提到,“找了好久才找到的,觉得不错,提供给大家实验和学习参考。”这暗示...
- **PagerAdapter**:基础适配器接口,需要重写`getCount()`和`instantiateItem(ViewGroup, int)`等方法。 - **FragmentPagerAdapter**:适用于固定数量的Fragment,每个页面对应一个Fragment。 - **...
1. **Java工作目录**:工作目录是指Java程序运行时所在的目录,它决定了相对路径解析的基础。默认情况下,工作目录是执行Java命令的目录,但可以通过操作系统API或Java API进行更改。 2. **获取当前工作目录**:在...
可以不用重起机子的方法,找一个动载加载驱动工具:DriverMonitor不错了。然后在“开始菜单”-> "运行"输入 "net start filedisk" 出现:“ 请求的服务已经启动”。这个必须得成功才行哦。 接下来注意点。cmd后 ...
### 描述分析:“后盾网的教学视频很不错,向军更是业界大牛” 这段描述进一步强调了: - **后盾网的教学视频质量很高**,能够为学员提供高质量的学习体验。 - **向军**作为讲师,在PHP领域内享有很高的声誉,这...
该项目是一个使用Kotlin的lambda表达式与扩展函数特性封装的DSL工具,如果你有一定的Kotlin基础,并且喜欢DSL的优雅,那么这个项目会是一个不错的学习对象。 一、它能做什么? 我们在写项目的时候,必不可少的需要...
Spring Boot基础教程 本项目内容为《Spring Boot基础教程》的程序样例。如您觉得该项目不错,欢迎点击右上方的Star按钮,给予支持!!! 如果您对文字类教程不感冒或者想要通过综合案例学习Spring,那么给您推荐这个...
针对提供的文件信息,知识点主要集中在Python编程语言的基础教育方面。考虑到信息中部分内容与实际教学...对于有兴趣深入学习Python的读者来说,这本书是一个不错的起点,能够为未来的学习和开发工作打下坚实的基础。
标题中的“Android代码-显示在一个半圆列表项一个不错的鱼眼效果.zip”表明这是一个关于Android开发的项目,特别关注在Android界面中实现一种独特的视觉效果,即“鱼眼效果”。这种效果通常指的是图像或元素在视觉上...
理解它们是解答C/C++题目和编写代码的基础。 - C++作为C的超集,引入了类和对象的概念,因此需要掌握面向对象编程的基本概念,如封装、继承和多态。 2. **指针**: - 指针是C/C++中的一个强大特性,它允许我们...
总的来说,这个压缩包提供了一个很好的学习平台,让初学者能够了解并实践VBA宏在创建用户界面方面的应用,而对已经有一定基础的用户来说,也是一个不错的参考和灵感来源。无论你是办公室白领还是数据分析员,掌握VBA...
一直想实现一个java版本的itchat,由于工作太忙导致一拖再拖,这段时间稍微空闲了一些,仔细阅读了itchat的源码,终于完成了一个基础版本,由于主要灵感来源于itchat项目,所以这个项目的就暂时定名为itchat4j吧。...
仿开眼视频Android客户端,本项目主要用来练手Google-MVP已及kotlin,对于急切想熟悉kotlin的童鞋来说是一个不错的练手项目,由于公司任务比较紧急所以本项目目前处于功能完善中,相关技术文章还未整理发布,想参与本...
1. **Android SDK**:首先,这个项目基于Android SDK,这是安卓应用开发的基础。开发者需要熟悉Java或Kotlin语言,因为这两种语言是Android开发的主要工具。 2. **Eclipse集成开发环境(IDE)**:描述中提到要使用...
大家可以关注老师的课和博客很不错,老师很nice! 谢谢大家 !课程地址:https://coding.imooc.com/class/168.html 一点小建议:学习本系列知识之前,如果你完全没接触过 MQ、SpringBoot、Redis、Dubbo、ZK 、Maven,...
复制代码经过对比,对于目标边界清晰的图片,RGB颜色模型的效果很不错,结果在贴图中。 2、分割出来的交通标志,为了便于二值化处理,强烈建议将背景黑色转成白色,这里标准模板只处理了20几张(考虑到可能用不到...