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

发布于 2024-11-29 21:52:28 字数 477 浏览 2 评论 0原文

我今天在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

断桥再见 2024-12-06 21:52:28

这是一个非常好的(而且微妙的)观点。
一般来说,.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 is IDispatch.

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 no IDispatch supporting object which is exposed by the browser. Therefore QTP has to create a proxy object that implements IDispatch 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 returned Empty 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文