先来个本系列开场白,去年5月换了新工作接触了新工种---软件测试,在去年的下半年里首先对所服务的金融行业业务知识进行了一个大致的规整,今年开始在技术方面再加大学习力度。工欲善其事必先利其器。从QTP开始吧~~~
翻阅网上关于QTP学习历程的相关资料,大致要分如下阶段:
1、入门,对自动化测试有个大概了解,啥能做啥不能做
2、安装、试用、体验QTP,有个初步印象
3、增强脚本开发的能力
4、数据驱动的感念深入
5、常用代码函数化、可复用
6、完善自动化测试框架
7、完善自动化测试流程
因为以前做过2年开发,很快到达了3、4阶段。随着学习不断深入,问题越来越多,兴趣越来越浓厚,需要积累和分享的内容也就越多,发个系列来记录一下自己的学习过程
最近开始测试某金融系统,里面涉及到工作流相关功能,而且该工作流流向很简单,很适合拿来QTP练手。
【学习内容】
1、脚本录制
2、检查点
3、输出
4、Debug基本功能
5、参数化
6、手动添加对象
7、脚本语言
8、描述性编程初识
一个星期的学习研究,最后的感想是:1、QTP真好玩,回放的时候跟看电影似的 ;2、VBA用起来不太爽 要是能用java或者C# 或者C就好啦
学习的内容只是列出学会了些什么,具体学习的教程网上很多很多。。。
【经验积累】
1、遇到很别扭的输入框的时候的处理办法
如图所示输入框:
-----------------------------------------------------
这个输入框很有意思:
Q1、随着录入的编号来动态显示相应的结果
Q2、直接复制编号对应的某某内容还不允许,页面会把录入的内容自动清空
Q3、在这个框里录入完编号后,如果不选择对应的内容,当焦点离开时内容也被清空~~~~
Q4、录入编号的时候,由于网络延迟还是啥原因不详,有时候不会马上随时更新编号对应的内容,短则等待几秒钟长则没谱了。。。这个最要命
我的解决思路:
1、最常用的方法当然就是 对象XX.对象XXX.对象XXXX.set "某某编号" 这个是直接录制后的脚本内容,一回放报错。然后我调试一下,发现set完了立即失去该页面控件焦点,完蛋 根据上述Q3 内容被自动清空 提交失败!!!
思考:看来set是一个更趋向模拟人工操作的方法,分解看来有两个动作,一个是填内容,一个是失去焦点~~,那好我就釜底抽薪,直接查看有没有设置页面控件属性的方法。经资料所知,每个测试时对象都有个Object属性,该属性返回的就是该对象的运行时对象,通过操作该对象的value属性可直接赋值
2、釜底抽薪,语句:对象XX.对象XXX.对象XXXX.Object.value = "某某编号" 结果调试的时候发现由于上述Q4 半天不出待选结果,我就。。。 真让人郁闷。。。 这会倒是不会失去焦点了,可是待选内容不出来,半天都不出来,无语!!
思考:看来釜底抽薪不管用,那干脆就纯模仿人工操作好了。。。
3、纯模仿人工操作:
Dim flag, WshShell
flag = 0
Set WshShell = CreateObject("Wscript.Shell")
while(not flag)
Browser("某系统").Page("某页面").Object.focus
Browser("某系统").Page("某页面").Frame("mainFrame").WebEdit("recvbank_n").FireEvent "onclick" '模仿人工录入时 先点击该输入域
wait(1) '模仿人工操作时候录入后的等待
WshShell.sendKeys "{m}" '模仿人工录入时候的键盘录入
WshShell.sendKeys "{o}"
wait(2) '模仿人工操作时候录入后的等待
flag = Browser("某系统").Page("某页面").Frame("mainFrame").WebElement("待选择列表").Exist '判断待选内容是否列出来
wend
'推出循环后点击待选内容即可
------------------------------------------------------
这会算是解决了,乖乖的出来了。。。
对于输入编号的参数化问题好解决,字符串变成字符数组,循环键盘录入即可
最后总结一下
1、对象XX.对象XXX.对象XXXX.set "某某编号" 这个很方便用起来,但是遇到麻烦的输入框可能会不太好用
2、对象XX.对象XXX.对象XXXX.Object.value = "某某编号" 这个很实在,对付页面上控件有特殊处理的比较好用,比如日期录入框点击后需要选择而又不能直接输入的
3、最后就是模拟实际人工操作吧
本周学习对QTP有了个大致的了解,之后还需慢慢磨练