AJAX在当前的WEB应用开发中广泛使用;依靠强大的异步处理机制,AJAX实现了动态、美妙的WEB界面与服务器交互;然而对于自动化测试,AJAX确实一个冲击!传统的对象识别技术已经无法解析AJAX页面元素;今日叶赫华给大家一个实例,供测试同行学习参考!
解析AJAX WEB页面的方式有很多,这里Sincky只是通过DOM技术这种方式来说明问题。这里以福建莆田人才在线网站为例,网址http://www.eptrc.com/job_list.aspx,打开首页后,大家会看见【企业招聘信息】区域有很多招聘信息,仔细分析它的实现技术,它不再是传统的HTML TABLE显示方式,而是DIV层技术,这也是AJAX技术里非常通用的WEB元素显示模式。现在我们以目前最主流的HP Mercury QuickTest Pro为例,来讲解如何获得该网站首页【企业招聘信息】区域所有的企业名称。
* 打开本机安装的QTP,加载WEB插件,推荐QTP版本是9.2以上
* 新建一个QTP脚本
* 关闭当前桌面所有浏览器
* 新开一个IE,定位到http://www.eptrc.com/job_list.aspx
* 打开当前脚本的对象库,添加新对象:把刚才IE里的莆田人才网首页的Page对象加载到对象库即可;即当前脚本只有Browser和Page二级对象,方便起见,它们的名字可以改成Browser和Page;关闭对象库
* 把以下代码拷贝到当前脚本编辑窗口
SystemUtil.Run "C:\Program Files\Internet Explorer\iexplore.exe","","C:\Documents and Settings\叶赫华","open" Browser("Browser").Page("Page").Sync Browser("Browser").Navigate "http://www.eptrc.com/job_list.aspx" Browser("Browser").Page("Page").Sync Dim DOM, Flag, oDIVs, i, myDiv, strCompanyNameTitleDIV, mySearchTable, myChildDIVs, strCompanyName Set DOM = Browser("Browser").Page("Page").Object.documentElement Flag = 0 Set oDIVs = DOM.GetElementsByTagName("DIV") For i = 0 to oDIVs.length - 1 If trim(oDIVs(i).innertext) = "企业招聘信息" then Flag = Flag + 1 Set myDiv = oDIVs(i) End if Next If Flag = 1 Then Flag = 0 Set strCompanyNameTitleDIV = myDiv.ParentNode If trim(strCompanyNameTitleDIV.className) = "texttitle" Then Set mySearchTable = strCompanyNameTitleDIV.NextSibling Set myChildDIVs = mySearchTable.ChildNodes For i = 0 to myChildDIVs.length - 1 If trim(myChildDIVs.item(i).classname) = "row" or trim(myChildDIVs.item(i).classname) = "rowhl" Then Flag = Flag + 1 strCompanyName = myChildDIVs.item(i).firstChild.getElementsByTagName("DIV").item(1).innertext Print strCompanyName End If Next End If End If Set oDIVs = Nothing Set DOM = Nothing
|
* 关闭刚才的IE;执行该QTP脚本,会弹出QTP打印小窗口,显示莆田人才网首页企业招聘信息区域所有的企业名称,例如我这里执行结果是:
好朋友茶叶茶具连锁机构 莆田市人才职业培训学校 恒信贸易 泉州蒙羊 福建莆田市远润装修装饰有限公司 兴安药业有限公司 拓森贸易 莆田永辉超市有限公司 福洲晋安区网玛动漫人才培训中心 莆田天发投资咨询有限公司 易迈贸易有限公司 莆田市东南纸业工贸有限公司 神龙木业有限公司 莆田市竞升生物科技发展有限公司 兄弟连医疗网络公司 莆田市华达电子有限公司 正荣(莆田)置业发展有限公司 东兴贸易有限公司 快乐星幼儿园 欧捷投资贸易 |
说明:这里Sincky用的是最土的全页扫描方式来获取关键字标记;如果需要处理的AJAX区域有特别标记,可以此标记去定位AJAX区域,再进一步处理,从而节省脚本执行时间。(首发于Sincky的搜狐博客)
相关阅读:
他和他的QTP——51Testing专题采访
最新QTP识别flex4方法研究
QTP六脉神剑之调用Java程序