我正在学习HP UFT。
最近我遇到了fireevent
,我试图在Flipkart的网站上实现它。我试图在网站主页上使用firevent("onmouseover")
链接Men
。
我使用ChildObjects
查找了Link和WebElement (在两个不同的测试中),首先突出显示它,然后使用object.fireevent("onmouseover")
以及object.fireevent("OnClick")
。 OnClick
正在运行,它显示链接为选中的(即我们按Tab键时覆盖链接的虚线框),但它没有显示“男性下菜单”部分。
我用谷歌搜索了很多东西。但是无法在QTP / UFT中找到FireEvent的确切工作。
请帮我解决上述问题以及FireEvent的一些教程。
编辑:我正在使用IE 11进行测试。
答案 0 :(得分: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上显示“ELECTRONICS”菜单覆盖(显然可以替换您自己的Browser
和Page
定义):
Browser("Flipkart").Page("Main Nav").Link("xpath:=//a[@data-tracking-id='electronics']").MouseOver
在原始版本中,有各种额外的错误处理和自定义报告,因此它会告诉您点击的内容,但实质是相同的。它将对象定位在屏幕上,计算中心并将鼠标移动到那里。您可能需要等待一小段时间才能显示菜单覆盖图,然后再在其中一个新显示的子元素上调用.Click
。
答案 1 :(得分: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中不起作用。不知道原因。
答案 2 :(得分:1)
这实际上取决于您正在使用的浏览器。
警告:此答案中提供的信息有例外情况,将来也可能会发生变化。答案是为了给出基本的理解,但如果不检查特定版本/用例的行为,则不要依赖它。
最初QTP的FireEvent
应该调用IE的非标准fireEvent
方法。
在Firefox和Chrome上,这是使用标准dispatchEvent
实现的。您应该检查网站期望获得哪些事件。
如果您按照此blog post中的说明混合事件模型(标准DOM级别2和微软),事情会变得复杂。