HP QTP 10:Web 应用程序测试 - SomeObj.FireEvent(“OnCLick”) 有效,SomeObj.Object.FireEvent(“OnCLick”) 无效

发布于 2024-10-11 15:01:46 字数 990 浏览 13 评论 0原文

我有一个带有 ExtJS 的丰富的 Web 应用程序 btuil。它具有多选列表控件(用JS+CSS创建)。 我想使用 HP QuickTest Pro 10 和 Internet Explorer 6 单击该列表中的某些项目。我将该项目添加到对象存储库中,发现以下代码有效 - 选择某些项目:

Browser("blah").Page("blah").WebElement("SomeElem").Click

下一个代码也有效:

Browser("blah").Page("blah").WebElement("SomeElem").FireEvent("onMouseDown")
Browser("blah").Page("blah").WebElement("SomeElem").FireEvent("onMouseUp")
Browser("blah").Page("blah").WebElement("SomeElem").FireEvent("onClick")

但我想选择多个项目使用shift+单击方法。我不知道该怎么做:( 所以我有几个问题:

  1. 如何在按住 Shift 键的情况下用鼠标单击多个 Web 元素?
  2. 我尝试使用 CreateEventObject + shiftKey 设置为 true 来做到这一点,但该方法(在 DOM 对象上执行 fireEvent,而不是对象存储库中的对象)不起作用:

    Browser("blah").Page("blah").WebElement("SomeElem").Object.FireEvent("onClick")

什么WebElement("Element").FireEvent("OnClick") 和 WebElement("Element").Object.FireEvent("OnClick") 之间的区别?

请帮助某人,因为我经常与这个问题作斗争,但没有结果。

谢谢!

I have rich web app btuil with ExtJS. It has multi-select list control (created with JS+CSS).
I want to click on some item in that list using HP QuickTest Pro 10 with Internet Explorer 6. I added that item into Object repository and found that following code works - selects some item:

Browser("blah").Page("blah").WebElement("SomeElem").Click

next code also works:

Browser("blah").Page("blah").WebElement("SomeElem").FireEvent("onMouseDown")
Browser("blah").Page("blah").WebElement("SomeElem").FireEvent("onMouseUp")
Browser("blah").Page("blah").WebElement("SomeElem").FireEvent("onClick")

But I want to select several items using shift+click method. I don't know to do that :(
So I have a few questions:

  1. How can perform click with mouse on several web elements with Shift key pressed?
  2. I tried to do that using CreateEventObject + shiftKey set to true, but the method (perform fireEvent on DOM object, not object from Object repository) doesn't work:

    Browser("blah").Page("blah").WebElement("SomeElem").Object.FireEvent("onClick")

What the difference between WebElement("Element").FireEvent("OnClick") and WebElement("Element").Object.FireEvent("OnClick") ?

Plsease, help someone, because I fought with that problem a lot, but had no result.

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

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

评论(1

苍景流年 2024-10-18 15:01:46

WebElement(...).FireEventWebElement.Object.fireEvent 之间有几个区别,第一个运行执行各种工作的 QTP 函数,第二个直接执行到 DOM 元素。下面列出了 QTP 所做的一些在本机 DOM 方法中未完成的事情(可能还有更多)。

  1. 如果元素不可见,QTP 使其可见(这包括激活选项卡并滚动到视图中)
  2. QTP 支持 设备重播 在这种情况下,它将移动光标并模拟真实的点击(这可以让您更好地模拟真实的人如何与应用程序交互)
  3. QTP 写入报告执行了 FireEvent 步骤

至于你的问题,一般来说,你可以使用本机 DOM 方法来传递事件对象,但是当我尝试它时,我无法让它从 QTP 工作

set doc = Browser("B").Page("P").WebElement("W").Object.ownerDocument
set ev = doc.createEventObject()
ev.shiftKey = True

Browser("B").Page("P").WebElement("W").Object.FireEvent "onclick", ev

但是等效的东西从浏览器运行时确实有效。

从 QTP11 开始,支持使用 Page("P").RunScript 从脚本运行 JavaScript 文件,直到您可以手动模拟此功能。以下代码片段对我有用(我使用存储库中的对象来获取元素的 IE 特定 uniqueID ,这样我就不必再次识别它)。

' Use QTP's object identification instead of reproducing the logic in JavaScript
id = Browser("B").Page("P").WebElement("W").Object.uniqueID 

' Construct JavaScript script
script = "var e = document.createEventObject(); e.shiftKey = true; " & _
         "document.getElementById('" &id & "').fireEvent('onclick', e);"

' Run it on the browser
Browser("B").Page("P").Object.parentWindow.eval script

如果一切都失败了,你可以尝试编写一个小的 web-extensibility 项目并支持此功能。

There are several differences between WebElement(...).FireEvent and WebElement.Object.fireEvent the first runs a QTP function which performs all sorts of work and the second directly goes to the DOM element. Here is a list of a few things that QTP does which aren't done in the native DOM method (there may be more).

  1. If the element isn't visible QTP makes it visible (this includes activating the tab and scrolling into view)
  2. QTP support device replay in which case it will move the cursor and simulate a real click (this gives you a better simulation of how real people interact with the application)
  3. QTP writes to the report that it performed a FireEvent step

As for your problem, in general you can use the native DOM method in order to pass an event object but when I tried it I couldn't get it to work from QTP

set doc = Browser("B").Page("P").WebElement("W").Object.ownerDocument
set ev = doc.createEventObject()
ev.shiftKey = True

Browser("B").Page("P").WebElement("W").Object.FireEvent "onclick", ev

However something equivalent does work when run from the browser.

Starting in QTP11 there's support for running JavaScript files from the script using Page("P").RunScript until that you can simulate this ability manually. The following snippet works for me (I use the object from the repository to get the IE specific uniqueID of the element so I don't have to identify it again).

' Use QTP's object identification instead of reproducing the logic in JavaScript
id = Browser("B").Page("P").WebElement("W").Object.uniqueID 

' Construct JavaScript script
script = "var e = document.createEventObject(); e.shiftKey = true; " & _
         "document.getElementById('" &id & "').fireEvent('onclick', e);"

' Run it on the browser
Browser("B").Page("P").Object.parentWindow.eval script

If all else fails you can try writing a small web-extensibility project and support this functionality.

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