致力于测试团队建设和自动化测试开发,欢迎有兴趣者一起研究讨论

QTP实例-记录网站的酒店和房型、价格信息

上一篇 / 下一篇  2008-07-25 16:46:11 / 个人分类:QTP

$`'v(q HD9C!j'M01、目标:

s oh8b+F M9L0

/jq x7S:@\X]$u0获取酒店查询结果中所有的酒店信息,并获取所有房型和价格信息进行记录

F5FwZS!m051Testing软件测试网"H O%P,a%Qw+Zc

2、难点:

h0hm{#J8|0

_G5c#DfNVI0a)酒店名称是链接形式,但查询结果界面很多链接,如何过滤出真实的酒店信息链接并获取其名称

#Uv(y2T sz051Testing软件测试网)?Ab5s)hT#o x0b/]

b)每个房型的webtable是动态显示的,只有htmlid对于这个webtable是唯一的,需要获取htmlid值来识别对象

;YPnc Zt!u K7_Q)\0

K.tp:t/\*}0c)查询结果分页,每次服务器仅返回当前页面的的信息,翻页后再次获取新的酒店信息,所以取值需要分页进行

C n$\)r+vlk+c051Testing软件测试网7p5vLjY%|

3、解决思路:

'F4?4s'r&u*O[1t J0

f1~0f8[1j-[W)mM0获取查询结果总页数,循环处理每个页面,在每个页面上获取所有链接的OuterHTML,并结合正则表达式从中提取出酒店名称和酒店ID(处理后作为房型WebTable的唯一识别属性),再获取WebTable中的房型和价格信息,记录在Text中51Testing软件测试网Q6_5px!D&y2|H}B

51Testing软件测试网 DMI~Lb B

4、运用技术

!J Z A[r0

iOq Q'a#K0b V&W%{0a)DOM

f8E/x,Uib051Testing软件测试网*\c:eq$y%~t i8c

运用getElementsByTagName("A")方法获取界面所有链接集合,并获取每个元素的OuterHTML

,[,Yz8jn B.a051Testing软件测试网xp]rC

b)正则表达式51Testing软件测试网N/U.KWc^w` P3Fr[K

51Testing软件测试网&[[rJ S

匹配出符合规则的OuterHTML,并运用Match对象Submatches集合获取OuterHTML中的酒店名称和酒店ID51Testing软件测试网HLG*^:p&EV"y

51Testing软件测试网 Cs D/u2yL3u.L

c)WebTable对象方法51Testing软件测试网y9];z*fV G

XRm@_4[)Mp%T w0获取酒店的房型和相应的价格

Z#r ]*`O0

|*z^ l9c0d)FileSystemObject对象

G_ K yzp1xOp051Testing软件测试网{E9G!HV{;z:b)B

记录所有的酒店、房型和价格信息

[1\ mF.yuI.}051Testing软件测试网+In n2{Y:Xt"j$[

5)缺点:

-mUK)R2{6i0

6C)p,A8J"w7]-A/FAT0因为链接对象过多,而且进行正则表达式匹配,所以运行速度比较慢,这个需要后续考虑是否有更好的方法进行优化

o Oa)f}0

)fG$\N Y4qV1RIe0

51Testing软件测试网bBntMU4S

脚本代码:

8V_.Gg,a v051Testing软件测试网YF+ePCyDB$z

'scrīpt Name:GetPrices
!j"wzJr1H3l0'CreateBy:LiuPei51Testing软件测试网}3[K lWK
'CreateTime:2008-07-24
a$k+G"Q+j7E;y.s"m0'Descrīption:获取所有酒店信息并列出房型价格
7{-]m6p2P;Xq^ l0'————————————————————
(yG NAeN"B0SystemUtil.CloseProcessByName "iexplore.exe"

(W:U W8Zlo0

Dy&~] F_#w0Set IE = CreateObject("Internetexplorer.Application")51Testing软件测试网B%m9Y5x8c
IE.Visible = True
v%S~?s0IE.Navigate "http://www.mangocity.com/HWEB/hotelWeb/queryHotelWeb!allForward.action?forward=query"51Testing软件测试网{A @?`E)`

"y8q0ZQ p/a'r$^U:q0'查询符合条件的酒店51Testing软件测试网8v)Y%Fus'[h.w8P(Z]
Browser("芒果网 - 酒店预订 机票预订 旅游度假 邮轮").Page("芒果网 - 酒店预订 机票预订 旅游度假 邮轮").WebRadioGroup("res_commonCity").Select "CAN"51Testing软件测试网WF/IZ }3u/]H
Browser("芒果网 - 酒店预订 机票预订 旅游度假 邮轮").Page("芒果网 - 酒店预订 机票预订 旅游度假 邮轮").WebEdit("queryHotelForWebBean.inDate").Object.value = "2008-07-30"
u[k On\3`G}V"i0Browser("芒果网 - 酒店预订 机票预订 旅游度假 邮轮").Page("芒果网 - 酒店预订 机票预订 旅游度假 邮轮").WebEdit("queryHotelForWebBean.outDate").Object.value = "2008-07-31"
dNg/[.J|r0Browser("芒果网 - 酒店预订 机票预订 旅游度假 邮轮").Page("芒果网 - 酒店预订 机票预订 旅游度假 邮轮").Image("SubmitQuery").Click51Testing软件测试网Nz+id$u7I

0s2}6c]%c*o0'获取查询结果页数
e'n0q+[dQCr0AllItems = Browser("芒果网 - 酒店预订 机票预订 旅游度假 邮轮").Page("芒果网 - 酒店预订 机票预订 旅游度假 邮轮").WebList("selectPage2").GetROProperty("all items")
S)n\:G7f |Z0ItemsArr = Split(AllItems , ";")51Testing软件测试网j!E `P I;zS x
PageCount = UBound(ItemsArr) + 151Testing软件测试网5iTj tF iFwhC

E'C.V!e7XYG_t `C(W&^0'循环取酒店名称直到所有都完成
+O&d"}$L,I y}3O-t0For i = 1 to PageCount
KH,F*^0uZ$a'S0 Browser("芒果网 - 酒店预订 机票预订 旅游度假 邮轮").Page("芒果网 - 酒店预订 机票预订 旅游度假 邮轮").WebList("selectPage2").Select ItemsArr(i-1)
:U!vnGZC|.ej2[0 Browser("芒果网 - 酒店预订 机票预订 旅游度假 邮轮").Page("芒果网 - 酒店预订 机票预订 旅游度假 邮轮").Sync51Testing软件测试网_+[R_ |.D9vO-hD

Lz#K?)tM3wF `&c0 '获取酒店信息51Testing软件测试网)?jOI B4m@(E6R
 Set ōPage = Browser("芒果网 - 酒店预订 机票预订 旅游度假 邮轮").Page("芒果网 - 酒店预订 机票预订 旅游度假 邮轮").Object51Testing软件测试网#Q&]h.qWco$O

i!J US;A3_hSCD0 For Each Element in oPage.getElementsByTagName("A")
|tc3h;Y n#V0  TempHtml = Element.outerhtml51Testing软件测试网N N D5Fx(b~
  
WE5{&IZi9I)l0    '建立正则表达式匹配符合条件的链接字符串51Testing软件测试网j;Y5M8Qy&]
  Set RegEx = New RegExp51Testing软件测试网} w1K7v$b AKU
  RegEx.Pattern = "<A\s*?\w*?\W*?\s*?view_hotel_priceinfo\(.(\d{8})..*?\s*?jpg.\).\s*?href\=.\s*.*?>([^\x00-\xff]*?\W*?[^\x00-\xff]*?\(.*?\))</A>"51Testing软件测试网?E$w8AND&@w+l
  RegEx.Global = True
1AB0wZV?7m0  RegEx.IgnoreCase = True51Testing软件测试网}Xnf:SWK
  Set matches=RegEx.execute(TempHtml)51Testing软件测试网DJvn x0L.c g2[)_U

orF,BcAWe#m0  '获取酒店名称51Testing软件测试网.`1Y-qC6i5}^v
  For each match in matches
SY0z @0xzv(Z(U@0   Hotelid = match.submatches(0)51Testing软件测试网~\N$|!w^]T
   HotelName = match.submatches(1)51Testing软件测试网 RSK,c$] |K

51Testing软件测试网$PQp5sd4O

   '记录酒店信息51Testing软件测试网Uq}N aZE {!d
   Call WriteHotelInfo(HotelName , "D:\HotelInfo.txt")51Testing软件测试网z!A4c b o

.s Alg-`~1j0   '房型WebTable的htmlid唯一,采用该属性识别WebTable51Testing软件测试网Y1_&j(R t3O^$E#o
   id = "hotel" & Hotelid
hs[ ]y)YS0   
)h|#F'w*tD0   '获取房型和价格51Testing软件测试网 u_ I$qL+`
   Set ōWebTable = Browser("芒果网 - 酒店预订 机票预订 旅游度假 邮轮").Page("芒果网 - 酒店预订 机票预订 旅游度假 邮轮").WebTable("html id:="&id)51Testing软件测试网.U,B LI/iFm#AP
   NumOfRow =  oWebTable.RowCount()51Testing软件测试网hJfB$br*C
   For j = 1 to NumOfRow51Testing软件测试网 R!C#S |7`!^/LQV#d
    '获取房型51Testing软件测试网Mz O6deo6}~c `
    Room =  oWebTable.GetCellData(j , 1)51Testing软件测试网*V)Y+]L(s
    Arr = Split(Room , chr(32))51Testing软件测试网9B,Q(E;}]&vq+L%ic
    RoomType = Arr(Lbound(Arr))51Testing软件测试网Se,S8~n?%a
    '获取价格
6F$R R(eF2DQ.U0    RoomPrice = oWebTable.GetCellData(j , 4)

7w*UzMN$o)]9U0

9wl6Ft'| Z/}|)y0    '记录房型价格信息51Testing软件测试网 F7k9v4U,R
    Call WriteRoomInfo(RoomType , RoomPrice , "D:\HotelInfo.txt")51Testing软件测试网]t7vO*{
   Next
vm8xScKC*`5|0t0  Next51Testing软件测试网(iH^*n1I0`] e!j
  Set RegEx = Nothing51Testing软件测试网DD Lw [(d]pz2t
 Next51Testing软件测试网9F'C]A7G9x U~
Next
(^7z'P!X:luV_Y0Set IE= Nothing

d3w9T;@E&E$Ed N051Testing软件测试网)uKl/VIX3y

'写入酒店名称
v7B3Z2e6G r*U Fn0Function WriteHotelInfo(Hotel , FilePath)51Testing软件测试网)m+p ]C.h.M [
 Set fso = CreateObject("scrīpting.FileSystemObject")51Testing软件测试网Y#t7LwL T']!X
 51Testing软件测试网:P;\3x5Bp$i*D
 Const ForAppending = 8
[1dhH&s0 Set f = fso.OpenTextFile(FilePath , ForAppending , True)
8xA(^;v&x!B0 f.WriteLine "------------------" & Hotel & "------------------" & vbCrLf
y$Vo*vP7m:b0 
Y6t i,G@9J_0 f.Close51Testing软件测试网%r)AnGbm$H
 Set f = Nothing
4b|2FoH(gSl#l0 Set fso = Nothing
O S:f k6Ae$~0End Function

c [)ucL$b#C6}0

GDO`e2H U/|"^9z7ti0'写入房型价格信息51Testing软件测试网mP(epA6Eq
Function WriteRoomInfo(Room , Price , FilePath)
!@%l)?8F(y~F"XWW0 Set fso = CreateObject("scrīpting.FileSystemObject")
V.} X[i$n0 51Testing软件测试网z8~4C3^'y ZJ%P(C2w
 Const ForAppending = 8
,iU"U w;q!a3I%l2S0 Set f = fso.OpenTextFile(FilePath , ForAppending , True)
qV&D4tK6C0 f.WriteLine Room & "-----------" & Price51Testing软件测试网$QnZ$b+|X$\%h']7C
 
0U,E:t ^pOM0 f.Close
@|-d0}r!d9CC0 Set f = Nothing
_}j M"P2ni|0 Set fso = Nothing
i$P]yP7z:Z0rZ0End Function51Testing软件测试网2v,e G^` Ap`

E-~ybpJ${0
51Testing软件测试网$c`W+y!]

B{n Tk.pqQD^0

51Testing软件测试网lqJK+y

运行效果:

N(A8X8\!k z/D1S4h051Testing软件测试网&d0K5c9A?

------------------广东国际大酒店(Guangdong International Hotel)------------------

~Eh6z!}@QD P6E051Testing软件测试网MR$S(T vP$dzm

房型-----------周三51Testing软件测试网Fw*V}(Zr9NMA'~
标准客房(单自助早)-----------¥480
:a0jF1W.G E.A0高级客房(单自助早)-----------¥590
D+@1hg}I @Y F#]E z0商务套房(单自助早)-----------¥690
6a$@8K_})A/Oj \|!_0行政房(单自助早)-----------¥690
8r m9IU&Ph!L0豪华套房(单自助早)-----------¥790
PDcI"G,N0行政商务套房(双自助早)-----------¥86051Testing软件测试网1jy,?!G&p6Z
行政豪华套房(双自助早)-----------¥101051Testing软件测试网q \3S G%QH@-[a6b1[
------------------广州总统大酒店(Guangzhou President Hotel)------------------51Testing软件测试网)[WHr!rUxkq$r

51Testing软件测试网'l(N9t6J OPP*|F

房型-----------周三
/O.V7v6a,]Y0舒适间(无早)-----------¥320
{w9y|K4L0N0舒适间(双自助早)-----------¥360
mx*M0NS(J(w0高级间(双自助早)-----------¥40851Testing软件测试网sVC:M(pn r8k
行政间(双自助早)-----------¥49851Testing软件测试网 fU9h;wE4Wq(T
商务套房(双自助早)-----------¥648
8T&S3dS*W H$J qJ!U \0行政套房(双自助早)-----------¥788
A;Vjy,r,L G7pU0------------------广东南洋长胜酒店(Guangzhou Nanyang King Gate Hotel)------------------51Testing软件测试网i2f/x[?'U V7gAvv

,v5tqd'H2v| j/~0房型-----------周三51Testing软件测试网6R6{jC C
卢浮宫-标准单人间(含双早)-----------¥300
1kb)m]N] m#E5s8A~M0卢浮宫-标准双人间(含双早)-----------¥300
nxcr)cX-g5l0凯旋宫-高级房(含双早)-----------¥38051Testing软件测试网9` [_5i-kg&{ QH$|
凯旋宫-豪华房(含双早)-----------¥438
Pi,@!J3f2o5oB+W-w0凯旋宫-豪华商务大床房(含双早)-----------¥568
8| K2oN7B.M z+V0卢浮宫-行政A一房一厅(含双早)-----------¥600
wUJ}2k0@0凯旋宫-豪华套房(含双早)-----------¥950
{RHU }![7Z!tmw0卢浮宫-行政B三房一厅(含双早)-----------¥160051Testing软件测试网/j].r,_~eH}
------------------广州鼎龙国际大酒店(Guangzhou Donlord International Hotel)------------------

S-||^Bi_+S&l051Testing软件测试网DIn eN*N W-[/T

房型-----------周三51Testing软件测试网6e^ v)@7Cc-e x
舒适房(双自助早)-----------¥380
&bSX3edc U0高级单人房(双自助早)-----------¥438
|+B5oo~|"R/m k0高级双人房(双自助早)-----------¥43851Testing软件测试网 De?m'F3v xX
豪华房(双自助早)-----------¥550
'b u8b,e.z0高级套房(双自助早)-----------¥640
$s GpDR0{4Rw0豪华行政客房(双自助早)-----------¥64051Testing软件测试网 k*a8q!XDg9L
豪华套房(双自助早)-----------¥84051Testing软件测试网TW8X/QzA

/y8qq$d4vZI%Pq0

TAG: QTP

引用 删除 huangyl   /   2012-03-27 10:33:17
好牛叉!
ziqiuwendan的个人空间 引用 删除 ziqiuwendan   /   2008-07-29 18:16:00
能不能加我msn  ziqiuwendan@163.com
飘哥 引用 删除 pcl2004_27   /   2008-07-25 18:43:24
哥们 你的联系方式?
认识下
 

评分:0

我来说两句

日历

« 2024-04-13  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 90944
  • 日志数: 79
  • 图片数: 1
  • 建立时间: 2008-05-18
  • 更新时间: 2009-06-04

RSS订阅

Open Toolbar