QTP 11 问题中的区分大小写:VBScipt 中不同情况的不同结果
我今天在 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 中它运行良好。
有人可以解释为什么会发生吗?只是为了兴趣。
I found strange behavior in QTP 11 today: expression
Browser().Page().WebElement("PositionManagerContainer").WebElement("LoadingMessage").Object.ParentNode.ParentNode
Gives error: Object Required ".Object.ParentNode"
But expression
Browser().Page().WebElement("PositionManagerContainer").WebElement("LoadingMessage").Object.parentNode.ParentNode
(the difference in case of ParentNode member of .Object)
Is correct and works fine without any errors.
Browser is Firefox. In IE it worked fine.
Can someone explain why it happens? Just for interest.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这是一个非常好的(而且微妙的)观点。
一般来说,
.Object
允许访问正在测试的应用程序中的本机对象。由于 QTP 是基于 VBScript 的,这意味着测试对象的.Object
属性是IDispatch
。使用 IE 时,QTP 可以传递 IE 公开的 MSHTML 对象(以及支持
IDispatch
),因为 MSHTML 设计为与 VBScript 一起使用,所以这些对象不区分大小写。然而,当使用 Firefox 时,浏览器不提供 IDispatch 支持对象。因此QTP必须创建一个代理对象,通过查询Firefox公开的对象来实现IDispatch
。由于 Firefox 设计为使用 JavaScript(区分大小写),因此该代理对象自动区分大小写。您看到的错误来自于第一个
ParentNode
返回Empty
因此第二个.ParentNode
抛出错误。因此,在 Firefox 中使用
.Object
时,您必须为您访问的属性和方法使用正确的大小写。This is a very good (and subtle) point.
In general
.Object
allows access to the native object in the application being tested. Since QTP is VBScript based this means that the.Object
property of test objects isIDispatch
.When working with IE QTP can pass the MSHTML object that IE exposes (and which supports
IDispatch
), since MSHTML is designed to work with VBScript these objects are case insensitive. However when working with Firefox there is noIDispatch
supporting object which is exposed by the browser. Therefore QTP has to create a proxy object that implementsIDispatch
by querying the object exposed by Firefox. Since Firefox is designed to work with JavaScript (which is case sensitive) this proxy object is automatically case sensitive.The error you saw came from the fact that the first
ParentNode
returnedEmpty
so the second.ParentNode
threw an error.Therefore when using
.Object
with Firefox you must use the correct casing for the properties and methods you access.