Testing HP QTP/UFT中fireevent()的功能是什么?

Testing HP QTP/UFT中fireevent()的功能是什么?,testing,qtp,functional-testing,hp-uft,Testing,Qtp,Functional Testing,Hp Uft,我正在学习HP UFT 最近我遇到了fireevent,我试图在的网站上实现它。我试图在网站主页上使用firevent(“onmouseover”)链接Men 我使用ChildObjects查找链接和WebElement(在两个不同的测试中),首先突出显示它,然后使用object.firevent(“onmouseover”)以及object.firevent(“OnClick”)。OnClick正在工作,它显示所选的链接(即按tab键时覆盖链接的虚线框),但不显示Men部分下的菜单 我在谷歌上

我正在学习HP UFT

最近我遇到了
fireevent
,我试图在的网站上实现它。我试图在网站主页上使用firevent(“onmouseover”)链接
Men

我使用
ChildObjects
查找链接和WebElement(在两个不同的测试中),首先突出显示它,然后使用
object.firevent(“onmouseover”)
以及
object.firevent(“OnClick”)
OnClick
正在工作,它显示所选的链接(即按tab键时覆盖链接的虚线框),但不显示Men部分下的菜单

我在谷歌上搜索了很多东西。但无法在QTP/UFT中找到FireEvent的确切工作方式

请帮助我解决上述问题,以及FireEvent的一些教程


编辑:我正在使用IE11进行测试。

这实际上取决于您使用的浏览器

警告:此答案中提供的信息有例外,将来也可能会更改。答案是为了给出一个基本的理解,但在没有检查特定版本/用例的行为之前,不要依赖于它是否正确

最初QTP的
FireEvent
应该调用IE的非标准方法。 在Firefox和Chrome上,这是使用标准实现的。您应该检查网站希望获得哪些事件。
如果将事件模型(标准DOM level 2和Microsofts)混合在一起,事情就会变得复杂起来。

莫蒂已经回答了技术定义,但我将尝试为您的功能问题提供解决方案

根据我的经验,
.FireEvent
通常不会像您预期的那样工作。类似于
onmouseover
的另一种方法是通过实际将鼠标移动到所需位置,更接近地模拟用户行为。在我们的框架中,我们有一个小小的扩展函数来实现这一点,这里显示了它的精简版本:

Sub My_MouseOver(objSender)
    Dim absX : absX = objSender.GetROProperty("abs_x")
    Dim absY : absY = objSender.GetROProperty("abs_y")
    Dim width : width = objSender.GetROProperty("width")
    Dim height : height = objSender.GetROProperty("height")
    Dim x : x = (absX + (width / 2))
    Dim y : y = (absY + (height / 2))
    Dim deviceReplay : Set deviceReplay = CreateObject("Mercury.DeviceReplay")
    deviceReplay.MouseMove x, y

    Reporter.ReportEvent micDone, "A step name", "A useful step description"
End Sub
RegisterUserFunc "Link", "MouseOver", "My_MouseOver"
RegisterUserFunc "WebButton", "MouseOver", "My_MouseOver"
RegisterUserFunc "WebElement", "MouseOver", "My_MouseOver"
例如,您可以执行以下操作,在flipkart.com上打开“ELECTRONICS”(电子)菜单覆盖(显然可以替换您自己的
浏览器
页面
定义):


在原始版本中,有各种额外的错误处理和自定义报告,因此它会告诉您单击了什么,但本质是一样的。它在屏幕上定位对象,计算中心并将鼠标移动到那里。在调用
之前,您可能需要等待一小段时间,以使菜单覆盖显示出来。单击新显示的子元素之一。

我找到了解决问题的方法,它工作正常

Setting.WebPackage("ReplayType") = 2
object.FireEvent "onmouseover"
Setting.WebPackage("ReplayType") = 1
在这种情况下,
对象将是:

Browser("name:=Online Shopping.*").Page("name:=Online Shopping.*").Link("innertext:=Men")

我试过这个,效果很好。我想,我们不需要任何选择。但我真的不知道,在UFT中,Ctrl+Space不适用于此。不知道原因。

谢谢你的回答,但我无法用它来解决问题。问题是
object.firevent(“onmouseover”)
没有做任何事情。我还添加了有关浏览器的信息。@我建议首先使用JavaScript从浏览器控制台启动浏览器,这样你就可以知道需要执行哪些步骤,然后在UFT中执行这些步骤。好的,我一定会尝试。谢谢。非常感谢你的解决方案。这样肯定行得通。我试试这个。但是现在我真的需要知道是什么原因使得onmouseover不能工作。而且,尽管它并不完全相关,我总是怀疑
浏览器
页面的工作方式到底有什么区别。我知道这是一个层次结构之类的东西,但该工具如何区分浏览器和页面,以及两者的用途是什么。你能在这里告诉我吗?或者我可以问一个不同的问题吗?很高兴看到重播类型适合你。我们创建了自定义MouseOver方法来处理一个非常顽固的AJAX驱动的弹出窗口,该弹出窗口无法正确响应.FireEvent,无论是否更改ReplayType。当使用FireEvent时,您还应该注意它允许您对真实用户无法交互的对象进行操作的情况。我会处理好这一点。到目前为止,我只处理真实用户可以查看的对象。谢谢你的警告!如果这不起作用,请尝试将浏览器缩放级别恢复为默认值(ctrl+0)。。。我花了半天时间才弄明白。
Browser("name:=Online Shopping.*").Page("name:=Online Shopping.*").Link("innertext:=Men")