我今天在QTP 11中发现了奇怪的行为:表达式
Browser().Page().WebElement("PositionManagerContainer").WebElement("LoadingMessage").Object.ParentNode.ParentNode
给出错误:对象必需“.Object.ParentNode”
但是表达
Browser().Page().WebElement("PositionManagerContainer").WebElement("LoadingMessage").Object.parentNode.ParentNode
(.Object的ParentNode成员的区别) 是正确的,没有任何错误正常工作。
浏览器是Firefox。在IE中,它运行良好。
有人可以解释为什么会这样吗?只是为了兴趣。
答案 0 :(得分:5)
这是一个非常好(和微妙)的观点。
通常,.Object
允许访问正在测试的应用程序中的本机对象。由于QTP是基于VBScript的,这意味着测试对象的.Object
属性为IDispatch
。
使用IE时,QTP可以传递IE公开的MSHTML对象(并且支持IDispatch
),因为MSHTML旨在与VBScript一起使用,这些对象不区分大小写。但是,在使用Firefox时,浏览器不会显示IDispatch
支持对象。因此,QTP必须通过查询Firefox公开的对象来创建实现IDispatch
的代理对象。由于Firefox旨在使用JavaScript( 区分大小写),因此此代理对象会自动区分大小写。
您看到的错误来自于第一个ParentNode
返回Empty
,因此第二个.ParentNode
引发了错误。
因此,在Firefox中使用.Object
时,必须使用正确的大小写来表示您访问的属性和方法。