QTP 11中的区分大小写问题:VBScipt中不同案例的结果不同

vmg*_*vmg 3 vbscript qtp case-sensitive

我今天在QTP 11中发现了奇怪的行为:表达式

Browser().Page().WebElement("PositionManagerContainer").WebElement("LoadingMessage").Object.ParentNode.ParentNode
Run Code Online (Sandbox Code Playgroud)

给出错误:对象必需".Object.ParentNode"

但表达

Browser().Page().WebElement("PositionManagerContainer").WebElement("LoadingMessage").Object.parentNode.ParentNode
Run Code Online (Sandbox Code Playgroud)

(.Object的ParentNode成员的情况不同)是正确的,没有任何错误正常工作.

浏览器是Firefox.在IE中它工作得很好.

有人能解释为什么会这样吗?只是为了兴趣.

Mot*_*tti 5

这是一个非常好(和微妙)的观点.通常.Object允许访问正在测试的应用程序中的本机对象.由于QTP是基于VBScript的,这意味着.Object测试对象的属性是IDispatch.

使用IE时,QTP可以传递IE公开的MSHTML对象(以及支持的对象IDispatch),因为MSHTML旨在与VBScript一起使用,因此这些对象不区分大小写.但是,在使用Firefox时,浏览器不会显示任何IDispatch支持对象.因此,QTP必须创建一个代理对象,IDispatch该对象通过查询Firefox公开的对象来实现.由于Firefox是设计用JavaScript的工作(这区分大小写),该代理对象会自动区分大小写.

您看到的错误来自第一个ParentNode返回的事实,Empty因此第二个.ParentNode引发了错误.

因此,在使用.ObjectFirefox时,必须使用正确的外壳来访问您访问的属性和方法.