心念旧安,夙夜忧叹。

用QTP实现对一淘网的自动化测试

上一篇 / 下一篇  2011-11-25 16:30:45 / 个人分类:原创文章

给学生讲解一个Web Automation Testing的例子,做了两个脚本。大家看看要是喜欢就顶一下,还有就是转贴一定注明出处!
51Testing软件测试网9C"\/^{Y0?L i&VM*r
现在一淘的广告铺天盖地,决定用这个例子结合QTP做个Demo。
先把题目的需求列出来:
    打开一淘,在输入框输入“htc”,这时会弹出一个提示的下拉框(Ajax实现),共有10个项。用QTP实现将下拉框的内容全部打印出来(用print),并随机的选择一个进行购物搜索。
    用两种方法实现,一种是基于对象库,一种是描述性编程。
51Testing软件测试网9wYI1m*q/E'B
常规解决思路:
    肯定会想到加载 Web Add-in 来做,但是录制的时候会意外的发现后续的动作根本录不进去。特别是对象的抓取成为了一个棘手问题。好不容易抓到了对象,又不知道如何抓取里面哪些特征属性作为我们的识别依据。这时候困扰的问题就是没有办法知道HTML加载了Ajax之后的源代码(即Dynamic HTML Object)。
51Testing软件测试网9zlWZ i@
对于查看DHTML Object这个问题,我建议安装谷歌的Chrome浏览器,里面有个“审查元素”功能非常好用。当然用FireFox的FireBug或者IE的IE Developer也行。
51Testing软件测试网GUMfc3]
解决方案1 -- 基于对象库(下面只提供代码,不提供对象库和全套脚本,读者自行添加)
以下代码由songfun提供:
Dim iCount,iChild,sKeyword
SystemUtil.Run "C:\Program Files\Internet Explorer\IEXPLORE.EXE"
Browser("Browser").Page("Page").Sync
Browser("Browser").Navigate "http://www.etao.com/"
Setting.WebPackage("ReplayType") = 2
Browser("Browser").Page("Page").WebEdit("q").Set "htc"
' 请注意下对象库里的WebElement对象不能采用默认的innertext作为识别属性,而应该用html tag和class两个属性 
iCount = Browser("Browser").Page("Page").WebElement("htc g11").Object.parentElement.parentElement.childNodes.length
Print iCount
i = RandomNumber(0,iCount-1)
sKeyword = Browser("Browser").Page("Page").WebElement("htc g11").Object.parentElement.parentElement.childNodes.item(i).firstChild.innerText
For Each iChild In Browser("Browser").Page("Page").WebElement("htc g11").Object.parentElement.parentElement.childNodes
Print iChild.firstChild.innerText
Next
Browser("Browser").Page("Page").WebEdit("q").Set sKeyword
Browser("Browser").Page("Page").WebEdit("q").Submit
Setting.WebPackage("ReplayType") = 1
51Testing软件测试网E`5y$Ub6b
解决方案2 -- 基于描述性编程
以下代码由songfun提供:
Dim oDesc,oWebElement,sKeyword
SystemUtil.Run "C:\Program Files\Internet Explorer\IEXPLORE.EXE"
Browser(":=").Page(":=").Sync
Browser(":=").Navigate "http://www.etao.com/"
Setting.WebPackage("ReplayType") = 2
Browser(":=").Page(":=").WebEdit("html tag:=INPUT","name:=q").Set "htc"
Setting.WebPackage("ReplayType") = 1
Set Desc = Description.Create()
oDesc("micclass").value = "WebElement"
oDesc("html tag").value = "SPAN"
oDesc("class").value = "ks-suggest-key"
Set WebElement = Browser(":=").Page(":=").ChildObjects(oDesc)
iCount = oWebElement.Count
For iLoop = 0 To iCount-1
Print iLoop & "  " & oWebElement(iLoop).object.innerHTML
Next
sKeyword = oWebElement(RandomNumber(0,iCount-1)).object.innerHTML
Browser(":=").Page(":=").WebEdit("html tag:=INPUT","name:=q").Set sKeyword
Setting.WebPackage("ReplayType") = 2
Browser(":=").Page(":=").WebEdit("html tag:=INPUT","name:=q").Submit
Setting.WebPackage("ReplayType") = 1
Set Desc = Nothing
Set WebElement = Nothing
51Testing软件测试网9NCZL/J0@+{J jv
关于 解决方案 ,我这里只提供了两种,其实还有很多,只能算抛砖引玉。Kevin给了很多好点子,我这里没有给出他的代码和绝招(他的著作权),大家想要可以找他。这里也要特别感谢他在其中给出了很多好意见。
51Testing软件测试网}G$gS+`4NE
里面的代码需要结合HTML的源代码做参照,以下提供一淘的HTML源代码(rar附件)——注意,我这里的HTML代码是加在了Ajax之后的代码,不是你们在一淘网首页的HTML代码那么简单!
51Testing软件测试网u@Q"mp7`V5o

TAG:

x3034911的个人空间 引用 删除 x3034911   /   2012-11-08 14:42:38
5
引用 删除 dowell_liu   /   2012-11-06 17:59:49
1
qiqi-zhj的个人空间 引用 删除 qiqiaisisi   /   2012-11-02 13:29:42
5
harryzhang2522的个人空间 引用 删除 harryzhang2522   /   2012-06-15 17:21:24
5
stevenli的个人空间 引用 删除 stevenli   /   2012-06-14 23:26:33
5
引用 删除 mmyyy   /   2012-01-09 17:10:51
很好很好,对于初学者来说是个参考
111111 引用 删除 teskly   /   2011-12-17 20:49:38
5
 

评分:0

我来说两句

日历

« 2022-01-21  
      1
2345678
9101112131415
16171819202122
23242526272829
3031     

数据统计

  • 访问量: 423936
  • 日志数: 138
  • 图片数: 4
  • 建立时间: 2006-11-26
  • 更新时间: 2013-08-30

RSS订阅

Open Toolbar