存在QTP Webtable,但在通过描述性编程遍历两次时RO属性为空

时间:2014-04-10 15:35:03

标签: qtp

我正在使用QTP 11和Win 7以及IE 9 我试图使用描述性编程自动化应用程序。 我面临的问题是屏幕上有webtable。我必须在完整的工作流程中多次访问其内容。

当我第一次得到rowcount时它会返回一个正确的值,但在执行其他一些步骤之后,当我再次尝试遍历webtable时,其exists属性为true但RO属性为空。

如果我只使用rowcount方法,QTP会抛出错误Unspecified error,但如果我使用GetRoProperty("rows")获取变量中的值,则在调试器的监视窗口中显示的值为空。

这里的问题是webtable正好在屏幕上,如果我使用Object Repository,那么代码工作正常,但使用描述性编程给我带来了困难。

如果我在退出完整的工作流程后获取rowcount,则返回正确的值。 唯一的问题是,如果我同时运行两个模块然后失败,但如果我单独运行它们,那么一切都正常。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

根据您的描述,您可能会在第一次传递时存储对WebTable对象的引用,导航离开WebTable所在的页面,然后在工作流程中稍后返回该页面(或刷新页面) )。然后,您尝试通过存储的变量访问对象属性。正确的吗?

如果是这样,你就无法做到这一点。返回页面时需要重新获取对WebTable的引用。我想如果你在变量中存储对OR对象的引用并试图以相同的方式重用它,你会遇到同样的问题。

换句话说,你不能这样做:

set x = Browser().Page().WebTable("some descriptive programming") 'same if this was an OR definition
print x.RowCount
'Navigate to another page
'Do stuff
'Navigate back to the page with the WebTable
print x.RowCount

编辑:正如TheBlastOne提醒我的那样,这些天的首选解决方案是调用.RefreshObject:

set x = Browser().Page().WebTable("some descriptive programming")
print x.RowCount
'Navigate to another page
'Do stuff
'Navigate back to the page with the WebTable
x.RefreshObject ' <== REACQUIRE
print x.RowCount

作为RefreshObject的替代方法,您可以这样做:

set x = Browser().Page().WebTable("some descriptive programming")
print x.RowCount
'Navigate to another page
'Do stuff
'Navigate back to the page with the WebTable
set x = Browser().Page().WebTable("some descriptive programming") ' <== REACQUIRE
print x.RowCount

每次使用OR定义也可以正常提及:

print Browser().Page().WebTable("MyTable").RowCount
'Navigate to another page
'Do stuff
'Navigate back to the page with the WebTable
print Browser().Page().WebTable("MyTable").RowCount