3

我正在学习 HP UFT。

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

我曾经ChildObjects找出 Link 和 WebElement (在两个不同的测试中),首先突出显示它,然后使用object.fireevent("onmouseover")as well as object.fireevent("OnClick")OnClick正在工作并且它显示链接为选中状态(即,当我们按 Tab 时覆盖链接的虚线框),但它没有显示 Men 部分下的菜单。

我用谷歌搜索过很多次。但无法在 QTP/UFT 中找到 FireEvent 的确切工作方式。

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

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

4

3 回答 3

4

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

根据我的经验.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 上显示“电子”菜单覆盖(显然替换您自己的BrowserPage定义):

Browser("Flipkart").Page("Main Nav").Link("xpath:=//a[@data-tracking-id='electronics']").MouseOver

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

于 2014-06-11T11:34:24.367 回答
3

我找到了解决问题的方法,并且运行良好。

Setting.WebPackage("ReplayType") = 2
object.FireEvent "onmouseover"
Setting.WebPackage("ReplayType") = 1

在这种情况下,object将是:

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

我已经尝试过了,它工作正常。我想,我们不需要任何替代方案。但我真的不知道,Ctrl+Space 在 UFT 中不起作用。不知道原因。

于 2014-06-17T10:38:46.477 回答
1

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

警告:此答案中提供的信息有例外情况,将来也可能会发生变化。答案是为了给出一个基本的理解,但不要在不检查您的特定版本/用例的行为的情况下依赖它。

原本 QTPFireEvent应该调用 IE 的非标准fireEvent方法。在 Firefox 和 Chrome 上,这是使用标准实现的dispatchEvent。您应该检查网站期望获得哪些事件。如果您将事件模型(标准 DOM 级别 2 和 Microsoft)混合在一起,如本博文中所述,事情会变得复杂。

于 2014-06-11T08:37:31.130 回答