2011-08-17 22 views
3

我今天11发现了奇怪的行为,QTP:表达区分大小写:用不同的情况不同的结果在VBScipt

Browser().Page().WebElement("PositionManagerContainer").WebElement("LoadingMessage").Object.ParentNode.ParentNode 

给出错误:所需的对象 “.Object.ParentNode”

但表达

Browser().Page().WebElement("PositionManagerContainer").WebElement("LoadingMessage").Object.parentNode.ParentNode 

是正确的,并没有任何错误,工作正常(在.Object的ParentNode成员的情况下的差异)。

浏览器是Firefox。在IE中它工作正常。

有人可以解释为什么会发生?只是为了兴趣。

回答

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必须使用正确的外壳来访问您访问的属性和方法。

+0

+1,伟大的写法@Motti – 2011-08-17 20:08:43

相关问题