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 上显示“电子”菜单覆盖(显然替换您自己的Browser
和Page
定义):
Browser("Flipkart").Page("Main Nav").Link("xpath:=//a[@data-tracking-id='electronics']").MouseOver
在原始版本中,有各种额外的错误处理和自定义报告,因此它会告诉您单击了什么,但本质是相同的。它在屏幕上定位对象,计算中心并将鼠标移动到那里。.Click
在调用新显示的子元素之一之前,您可能需要等待一小段时间让菜单覆盖出现。