我正在使用QTP 11和Win 7以及IE 9
我试图使用描述性编程自动化应用程序。
我面临的问题是屏幕上有webtable
。我必须在完整的工作流程中多次访问其内容。
当我第一次得到rowcount时它会返回一个正确的值,但在执行其他一些步骤之后,当我再次尝试遍历webtable
时,其exists属性为true但RO属性为空。
如果我只使用rowcount方法,QTP会抛出错误Unspecified error
,但如果我使用GetRoProperty("rows")
获取变量中的值,则在调试器的监视窗口中显示的值为空。
这里的问题是webtable
正好在屏幕上,如果我使用Object Repository,那么代码工作正常,但使用描述性编程给我带来了困难。
如果我在退出完整的工作流程后获取rowcount,则返回正确的值。 唯一的问题是,如果我同时运行两个模块然后失败,但如果我单独运行它们,那么一切都正常。
有什么建议吗?
答案 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