QTP行和列数始终为1

时间:2016-04-16 11:36:06

标签: excel vbscript qtp

我正在编写一段代码,用于将数据从Web表复制到Excel工作表。我不明白为什么我会得到行数和列数1.是否还需要添加其他内容?

这是我的代码:

Dim XL
Set XL=createobject("Excel.Application")
XL.Workbooks.Open "D:\QTP\RailwaysforSurat.xlsx"
Set nsheet = XL.Sheets.Item(1)
row=Browser("title:=.*").Page("title:=.*").WebTable("html tag:=TABLE", "index:=0").GetROProperty("rows")
msgbox row
cols=Browser("title:=.*").Page("title:=.*").WebTable("html tag:=TABLE", "index:=1").GetROProperty("cols")
msgbox cols

这不是完整的代码。我很难获得行和列数。请帮忙!

P.S。我正在使用此网站进行测试" http://www.indianrail.gov.in/cgi_bin/inet_trnnum_cgi.cgi"

3 个答案:

答案 0 :(得分:1)

Hindrail页面没有打开,所以看不到你正在测试的表。但是QTP为行和列提供了默认方法,尝试使用它并查看它是否有效。

NumRows = Browser("Mercury Tours").Page("Search      Results").WebTable("OutboundFlights").RowCount

NumColumns = Browser("Mercury Tours").Page("Search Results").WebTable("OutboundFlights").ColumnCount(1)

ColumnCount takes row number as parameter

答案 1 :(得分:1)

我注意到您正在使用描述性编程技术来识别WebTable,但您对所有内容使用极其通用的描述。也许这只是为了公开发布而被删除,但重要的是我注意到你的代码读取Rows试图找到一个索引为0的表,你的代码读取Cols试图找到一个索引为1的表...

这意味着您正在访问两个不同的表。你确定你的描述找到了你认为你想要的表吗?

我的建议是:

1)在浏览器中打开页面,以便查看表格。 2)启动QTP并打开GuiSPY 3)单击立方体按钮上的指针以开始间谍活动 4)点击您正在尝试使用的表格内的内容。

GuiSPY将快照并显示它找到的对象层次结构。接下来,您希望明确地确定该层次结构中的哪个级别是......我会......

5)从顶部开始(浏览器),选择顶行,然后单击"在应用程序中突出显示"并观察点亮的东西。 6)在层次结构列表中单击层次结构中的下一个项目,然后单击"在应用程序中突出显示"直到你在确切的桌子上看到它闪现,你试图瞄准目标。 7)一旦隔离了表格,单击"将标识属性复制到剪贴板"按钮,然后关闭GuiSPY。 8)打开记事本,或者只使用QTP编辑器窗口本身并粘贴GuiSPY复制到剪贴板的内容。

好的,您现在已经拥有了QTP能够查看的有关您要检测的特定表的所有内容的完整列表。从这里开始,您需要查看属性列表并找到一个(或两个)每次都能正确识别该表的内容。例如,在此页面上,包含您问题的表可以标识为: WebTable(" text:=我正在写一段代码来复制数据")......(*注意我已经把它弄糟了,因为它自动成为正则表达式字符串...通过一些清理,可能是:

Browser("StackOverFlow.Com").Page("Question 36663629").WebTable("text:=I am writing a piece of code to copy data"))

现在用您选择的数据替换.WebTable(" html标记:= TABLE"," index:= 0"),然后再次尝试。希望您可以锁定您期望的确切表格并获取所需信息。

答案 2 :(得分:1)

不确定您正在查看哪些表,但如果是服务和信息,那么这些表的行/列值为1.整个网页由连接的Web表组成。因此捕获这些信息会变得有点棘手。尝试使用子对象方法并计算Web表中的链接数量,它看起来像这样 -

Set oWebEdit=Description.Create
oWebLink("micclass").value="Link"
Set olink = Browser("title:=.*").Page("title:=.*").WebTable("").childobjects(oWebLink)
 olink.count
 msgbox olink.count 

'然后启动for循环

For i = 0 to olink.count-1

'获取链接名称

olink. count(i).GetRoproperty("name")

'启动数组并保存链接名称

如果获取链接名称不起作用,则可以使用childitem方法。 还要确保使用正确的表索引或定义其他一些属性。

P.S。如果您将来要使用DP并且还没有阅读有关Childitems / childobjects方法的内容。它们在使用DP时非常方便。