51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3080|回复: 3
打印 上一主题 下一主题

[原创] QTP取出页面中webtable数据,写出到Excel的问题

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2012-2-28 11:19:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
应朋友要求,想把淘宝网店的交易的所有交易记录写到Excel里面

出现几个问题:
1、webtable对象使用webtable.rowcount,总是说只有一行,返回的总是1。但是直接这样遍历取值又取到了值
  for  i =1 to 16
   str=Brows("XXXX").page("XXX").WebTable("XXXX").GetCellData(i,1)
   msgbox str
   next
全部都能取到值。但是为什么webtable.rowcount就是1???????这样导致一个问题,我不能知道表格有多少行了,不能控制循环。
2、将取到的值写入到Excel里面,写入是写入进去了,但是过程中怎么产生了。temp文件,关闭了Excel之后仍然说temp文件被使用,不能删除。关QTP也删除不了,是不是大家写Excel都会产生temp文件?主要写Excel代码如下:
set xlsobj=createobject("excel.application")   '创建excel对象
set xlsbook=xlsobj.Workbooks.Open("C:\Documents and Settings\Administrator\桌面\Book1.xlsx")    ‘打开指定的excel文件
Set xlssheet=xlsbook.Sheets("sheet1")  ’设置操作sheet对象,可使用index-从1开始
xlssheet.cells(1,1)=1   ‘对第一列的第一行赋值
xlsbook.Save      ’保存excel文件  
xlsbook.Close   ‘关闭
创建,保存,关闭,统统都是放在写数据循环之外的。

3、翻页问题,淘宝的翻页到了最后一页后,下一页会置灰不能点击,用那个属性控制?怎么实现自动翻页操作??


想实践下的朋友可以找个随便的淘宝网店试一下。。。。。。求高手指教。。。。。。。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2012-2-28 23:42:42 | 只看该作者
本帖最后由 wower1985 于 2012-3-15 20:49 编辑

回复 1# wower1985


    算了,没人鸟,全部内容自己想办法解决了。附上全部代码。


'使用前最好关闭浏览器,先开QTP
Set IEBrowser = CreateObject("InternetExplorer.Application")
IEBrowser.Visible = True
IEBrowser.Navigate  "http://zx.taobao.com/detail.htm?id=11204926"   '导航到的URL,换别的地址就行
'换别的地址要注意该这里的Browse title 名字和page title名字,只统计你们的模版市场不需要改
set myPage=Browser("micclass:=Browser","title:=.*模板详情 - 店铺装修市场 – 淘宝网").Page("micclass:=Page","title:=.*模板详情 - 店铺装修市场 – 淘宝网")
'等待页面加载
myPage.Sync
'点击成交记录
myPage.WebElement("micclass:=WebElement","innertext:=成交记录").Click
'获得多少页记录
pageText=myPage.WebElement("micclass:=WebElement","innertext:=.*共.*条 / 共 .* 页").GetROProperty("innertext")
startIndex=InStr(pageText,"/ 共")+3
endIndex=InStr(pageText,"页")-1
l=endIndex-startIndex
pageStr=trim (mid(pageText,startIndex,l))
pageNum=Cint(pageStr)
'msgbox  pageNum
myPage.WebTable("micclass:=WebTable","html tag:=TABLE","column names:=买家;出价;成交时间;状态").Click
'开始写入到Excel,先创建excel文件,地址放对。
set xlsobj=createobject("excel.application")   '创建excel对象
set xlsbook=xlsobj.Workbooks.Open("C:\Users\Administrator\Desktop\book1.xlsx")    '打开指定的excel文件
Set xlssheet=xlsbook.Sheets("sheet1")  '设置操作sheet对象,可使用index-从1开始
'设置表头
xlssheet.cells(1,1)="买家"
xlssheet.cells(1,2)="出价"  
xlssheet.cells(1,3)="成交时间"   
xlssheet.cells(1,4)="状态"
'读取内容部分
k=0
j=0
Do while j< pageNum
For  i=1 to 15
'判断是否有值
a=  myPage.WebTable("micclass:=WebTable","html tag:=TABLE","column names:=买家;出价;成交时间;状态").GetCellData(i+1,1)

If  a="ERROR: The specified cell does not exist."  Then
  Exit for
  Exit Do
End If
'a=  myPage.WebTable("micclass:=WebTable","html tag:=TABLE","column names:=买家;出价;成交时间;状态").GetCellData(i+1,1)
b=  myPage.WebTable("micclass:=WebTable","html tag:=TABLE","column names:=买家;出价;成交时间;状态").GetCellData(i+1,2)
c=  myPage.WebTable("micclass:=WebTable","html tag:=TABLE","column names:=买家;出价;成交时间;状态").GetCellData(i+1,3)
d=  myPage.WebTable("micclass:=WebTable","html tag:=TABLE","column names:=买家;出价;成交时间;状态").GetCellData(i+1,4)
xlssheet.cells(i+k+1,1)=a
xlssheet.cells(i+k+1,2)=b  
xlssheet.cells(i+k+1,3)=c   
xlssheet.cells(i+k+1,4)=d
Next
k=k+15
j=j+1
       If  j=pageNum    Then
     Exit Do
       End If
myPage.Link("micclass:=Link","name:=下一页").Click
Loop
'关闭Excel
xlsbook.Save   
xlsbook.Close  
xlsobj.Quit
set xlssheet=nothing
set xlsbook=nothing
set xlsobj=nothing
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2015-4-16 21:09
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    3#
    发表于 2012-3-14 23:26:54 | 只看该作者
    代码贴得不错,教育意义不是很大,更希望看到分析过程。

    解决问题的思路才是关键,代码仅仅是一种体现形式而已。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4#
     楼主| 发表于 2012-3-15 20:48:19 | 只看该作者
    解决过程其实没多少技术含量。。。。。。
    1、关于问题1webtable.rowcount 取出来总是等于1,我没有管它,因为循环能取到表格下面的所有值。
    关键是如何控制循环次数,列表数据总共有16行,直接写死,不用count。
    2、关于翻页问题,最后一页时候会边灰,尝试过两个属性,运行时根本没有。解决方法是干脆从页面上获取有多少页,把页面上的webelement的innertext属性取出来,注意使用正则匹配,保证不同的页数也能取值,切割字符串,得到多少页。
    3、控制循环,外层循环由页数控制,内层循环写死。
    4、关于最后一页数据条数不确定怎么办。。。,,,这样处理:当QTP调用函数GetCellData(i,1)时,不存在值没有这一行时,会返回"ERROR: The specified cell does not exist." ,用这个字符来判断退出循环。
    5、操作excel产生临时文件是因为没有释放用户,这么一句:xlsobj.Quit。连续的在excel里面写翻页数据行数就是内、外循环变量相加。
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-18 04:52 , Processed in 0.077330 second(s), 28 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表