今天我在 QTP 11 中发现了奇怪的行为:表达式
Browser().Page().WebElement("PositionManagerContainer").WebElement("LoadingMessage").Object.ParentNode.ParentNode
给出错误:需要对象“.Object.ParentNode”
但表达
Browser().Page().WebElement("PositionManagerContainer").WebElement("LoadingMessage").Object.parentNode.ParentNode
(.Object 的 ParentNode 成员的情况差异) 正确且工作正常,没有任何错误。
浏览器是火狐浏览器。在 IE 中它运行良好。
有人可以解释为什么会发生这种情况吗?只是为了兴趣。
最佳答案
这是一个非常好的(而且微妙的)观点。
一般来说,.Object
允许访问正在测试的应用程序中的 native 对象。由于 QTP 是基于 VBScript 的,这意味着测试对象的 .Object
属性是 IDispatch
.
使用 IE 时,QTP 可以传递 MSHTML IE 公开的对象(并且支持 IDispatch),因为 MSHTML 设计为与 VBScript 一起使用,所以这些对象不区分大小写。然而,当使用 Firefox 时,浏览器不提供 IDispatch 支持对象。因此QTP必须创建一个代理对象,通过查询Firefox公开的对象来实现IDispatch
。由于 Firefox 设计为使用 JavaScript(区分大小写),因此该代理对象自动区分大小写。
您看到的错误来自于第一个 ParentNode
返回 Empty
因此第二个 .ParentNode
抛出错误。
因此,在 Firefox 中使用 .Object
时,您必须为您访问的属性和方法使用正确的大小写。
关于vbscript - QTP 11问题: different results with different cases in VBScipt中的大小写敏感,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7091314/